Assembly 汇编中操作码的二进制

Assembly 汇编中操作码的二进制,assembly,x86,opcode,Assembly,X86,Opcode,我有以下代码(在生成为intel 80x86编写的清单文件之后): 我现在把注意力集中在第19排,我不完全理解它。 我知道操作码“loop”的二进制是E2 但是D9字节从哪里来?它是如何计算的?19 000000 2F E2D9环路r,ecx 第二个操作码(D9)来自哪里 第二个操作码(0xD9,本例中为)是两个补码中的相对目标地址——因为您是向后跳,所以在本例中为负数: 0x00000031 (The address following the loop instruction) +

我有以下代码(在生成为intel 80x86编写的清单文件之后):

我现在把注意力集中在第19排,我不完全理解它。 我知道操作码“loop”的二进制是E2


但是D9字节从哪里来?它是如何计算的?

19 000000 2F E2D9环路r,ecx

第二个操作码(D9)来自哪里

第二个操作码(
0xD9,本例中为
)是两个补码中的相对目标地址——因为您是向后跳,所以在本例中为负数:

  0x00000031   (The address following the loop instruction)
+ 0xFFFFFFD9   (Signed-extended representation of 0xD9 - actually a negative number, -39 decimal)
============
  0x0000000A   (The address of the r label)
注意,目标地址是根据循环指令后的地址计算的


另请参见

这不是指定寄存器吗?为什么不更改值,看看反汇编是如何更改的呢?将D9视为两个补码表示…0xFFFFD9带有符号扩展名。
  0x00000031   (The address following the loop instruction)
+ 0xFFFFFFD9   (Signed-extended representation of 0xD9 - actually a negative number, -39 decimal)
============
  0x0000000A   (The address of the r label)