【问题标题】:Is there any way to add an 8-bit value to a 32-bit register in x86?有没有办法在 x86 中将 8 位值添加到 32 位寄存器?
【发布时间】:2012-11-13 23:11:41
【问题描述】:

有没有办法在 x86 中将 8 位值添加到 32 位寄存器?

例如,如果您执行“ADD EAX,8”,则 8 将被编码为 32 位值,因此您的二进制文件中将包含“08000000”。如果你是加一个,你显然可以使用 INC 指令,但是有没有办法在 x86 汇编中添加一个通用的 8 位值?

请注意,我认为您不能执行“ADD AL,8”,因为如果 AL 已经包含 xFE,那么它就不会进行进位。但是,“ADC AL,8”会带来 AH 的价值吗?

【问题讨论】:

  • ADC AL, 88 加上进位值加到AL。它没有触及AH
  • ADD EAX, 8 应该使用 8 位立即数进行编码。如果 8 编码为 32 位值,则这是一个汇编程序错误。作为一种解决方法,您可以尝试使用与EAX 不同的寄存器。

标签: optimization assembly x86


【解决方案1】:

有一种使用 8 位符号扩展立即数的编码,它被列为 ADD r/m32, imm8 操作码 83 /0。您如何表示您想要该编码取决于您的汇编程序,但您忘记提及您使用的是哪一个。 nasm 例如,如果您打开优化或您像这样明确要求它,则会自动使用此编码:add eax, byte 8。 GNU 汇编器似乎也使用较短的编码,实际上我不知道如何将其强制为 32 位(与您的问题相反)。

【讨论】:

    猜你喜欢
    • 2020-11-21
    • 2011-01-14
    • 2014-11-18
    • 2012-02-26
    • 2021-11-26
    • 2015-05-31
    • 2015-12-26
    • 2013-06-27
    相关资源
    最近更新 更多