是否有一种简单的方法可以让这个NASM代码段工作?
add ebx, byte [ebp-10+ecx]
我收到以下错误:error: mismatch in operand sizes
。
我想将内存地址[ebp-10+ecx]
中的字节添加到ebx的最低有效字节。当然ebx是一个4或8字节的寄存器,会导致错误。
答案 0 :(得分:5)
您可以使用零扩展移动指令将一个字节加载到32位寄存器中,并使用它将其添加到EBX中:
movzx eax,byte ptr [ebp-10+ecx]
add ebx,eax
或者,如果您想要执行8位加法并且不关心EBX的其余位,只需将该字节添加到EBX的最低部分即可。请注意,这不会在EBX中从第7位到第8位进行传输
add bl,byte ptr [ebp-10+ecx]
您甚至可以使用MOVSX
指令而不是MOVZX
将带符号的字节添加到32位数字。 MOVSX
代表"移动符号扩展"。