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

x86 Assembly registers and mov instruction, and jump offset

我刚刚有个问题,我似乎找不到合适的答案。
我得到了这个代码:

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不会跳吗?

提前致谢

加载clecx中的值为0xabcd1282.

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

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