NASM 添加字节到寄存器 ebx
NASM add byte to register ebx
有没有一种简单的方法可以使这个 NASM 代码段起作用?
add ebx, byte [ebp-10+ecx]
我收到以下错误:error: mismatch in operand sizes
。
我想把内存地址[ebp-10+ecx]
中的字节加到ebx的最低位字节上。当然 ebx 是一个 4 或 8 字节的寄存器,这会导致错误。
您可以使用零扩展移动指令将一个字节加载到 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
代表"move with sign extend".
有没有一种简单的方法可以使这个 NASM 代码段起作用?
add ebx, byte [ebp-10+ecx]
我收到以下错误:error: mismatch in operand sizes
。
我想把内存地址[ebp-10+ecx]
中的字节加到ebx的最低位字节上。当然 ebx 是一个 4 或 8 字节的寄存器,这会导致错误。
您可以使用零扩展移动指令将一个字节加载到 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
代表"move with sign extend".