gpt4 book ai didi

assembly - x86汇编问题

转载 作者:行者123 更新时间:2023-12-02 19:59:54 27 4
gpt4 key购买 nike

我有 2 个简单但可能很棘手的问题。假设我有汇编指令:MOV EAX,[ebx+6*7] - 我很好奇的是,这条指令是否真的按原样转换为操作码,因此括号中的代码计算被编码为操作码,或者这只是编译器的伪指令,而不是CPU,以便编译器在使用 add mul 计算括号中的值之前,将结果存储在某个 reg 中,然后使用 MOV EAX,reg 计算值?需要明确的是,我知道输出将是相同的。我对执行感兴趣。

第二个是关于 LEA 指令。我知道它的作用,但我更感兴趣的是它的真实指令,因此编译不会进一步改变它,只是将其变成操作码,或者只是编译器的伪代码,再次首先计算地址然后存储它。

最佳答案

汇编器(不是编译器,尽管非常相似)会将 6*7 位计算为 42,然后指令是:

MOV EAX,[ebx+42]

这就是处理器可以执行的操作,方法是将 ebx 寄存器的内容与常量 42 相加,然后使用该地址加载 eax。没有指令将 6 和 7 编码为不同的实体,以便稍后相乘。

LEA 与其他指令一样真实。同样,汇编器可以处理常量折叠(计算出固定值),以将汇编器语句转换为处理器可用的形式。

您只需考虑说明:

mov ax,1+1+1+1+1+1+1

这不会被编码为某些(神奇的)字节序列eb 01 01 01 01 01 01 01,它将被编码为与以下任何一个完全相同:

mov ax,7
mov ax,49-42
mov ax,42/6

关于assembly - x86汇编问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2842039/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com