x86汇编寄存器和mov指令,以及跳转偏移量

时间:2017-10-06 04:20:17

标签: assembly x86 offset cpu-registers

我刚才有一个问题,我似乎找不到合适的答案 我给出了这段代码:

0020 mov eax, [ebp+0x0c]; value inside = 0x000000ff
0023 mov cl, [ebp+ox08]; value inside- 0x82
0026 cmp al, cl  
0028 jl label             ;label is at address 003c, jl is signed
002a nop
002b
...
003c label:sub al,cl

如果在执行此代码之前[ebp+0x08]中的值为0x82且ecx为0xabcd1234, 执行此代码后eax的值是多少?
它会清除高位,以便ecx是0x00000082还是ecx是0xabcd1282?

还计算了jl指令的偏移量的地址是什么? 那么如何确定jl指令的偏移值?

al的值是否大于cl?所以不会jl 跳?

提前致谢

1 个答案:

答案 0 :(得分:3)

加载ecxcl中的值为0xabcd1282。

cl(signed -126 / unsigned 130)小于al(有符号-1 /无符号255),无论它是被视为有符号还是无符号。 (在这种情况下,它被视为由jl签名。)因此不进行跳转。由于我们不知道0x2b和0x3c之间有什么指令,因此无法知道eaxecx的最终值是什么。

跳转的偏移量为0x12(0x3c - 0x2a,目标地址减去下一条指令的地址)。