Assembly 汇编中操作码的二进制
我有以下代码(在生成为intel 80x86编写的清单文件之后): 我现在把注意力集中在第19排,我不完全理解它。 我知道操作码“loop”的二进制是E2Assembly 汇编中操作码的二进制,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) +
但是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)