2012-11-13 22 views
0

有什么办法可以将8位值添加到x86中的32位寄存器中?例如,如果您执行“ADD EAX,8”,则8将被编码为32位值,因此您的二进制文件中将包含“08000000”。如果你正在添加一个,你可以明显地使用INC指令,但是有没有办法在x86程序集中添加一个通用的8位值?有没有办法在x86中向32位寄存器添加一个8位值?

注意我不认为你可以做“添加AL,8”,因为如果AL已经有了,比如xFE,那么它不会执行进位。但是,“ADC AL,8”的情况是否会将该值传递给AH?

+0

'ADC AL,8'将'8'加上进位值加到'AL'。它不会触及'AH'。 –

+2

'ADD EAX,8'应该用8位立即编码。如果8编码为32位值,这是一个汇编错误。作为一种解决方法,您可以尝试使用不同于“EAX”的寄存器。 –

+0

使用MOVZX进行转换。 –

回答

5

有一种编码使用8位立即符号扩展,它被列为ADD r/m32, imm8操作码83 /0。你如何表明你想要编码取决于你的汇编程序,但你忘记了提供哪一个。例如,如果您打开优化或者您明确要求如下所示,则自动使用此编码:add eax, byte 8。 GNU汇编程序似乎也使用较短的编码,事实上我不知道如何强制它到32位(类型与你的问题相反)。

相关问题