在x64程序集中添加值

时间:2013-02-11 15:53:46

标签: assembly x86 64-bit x86-64

ADD EAX,如果我只操作32位低位,EBX将EAX的32位高位置零;

那么ADD RAX,EBX呢?可能吗?如果是,是否保留了RAX的32个高位?

2 个答案:

答案 0 :(得分:3)

ADD EAX, EBX RAX 的高32位归零。 ADD RAX, EBX不是有效的指令。

听起来您想在EBX中将32位值添加到RAX中的64位值。要执行此操作,首先要对其进行零扩展(MOV EBX, EBX)或符号扩展(MOVSX RBX, EBX),然后将RBX添加到RAX。 (如果您将EBX中的值解释为无符号,则使用零扩展名,如果已签名则使用符号扩展名。)

答案 1 :(得分:2)

是的,32位ADD将高位比特归零。 ADD RAX, EBX是不可能的。您可以将前32位置零(例如MOV EBX, EBX),然后使用ADD RAX, RBX(注意这可能会更改RAX的前32位)