此问题在此处已有答案:
How to understand "cmpl $0x0, -0x30(%rbp)" / "je ..."(2个答案)
x86 cmpl and jne(1个答案)
三年前就关门了。
所以我有一行代码来进行逻辑比较,比如:cmpl $0x1, -0x18(ebp)
。在这之后,如果这是相等的,它就会跳,但是-0x18(ebp)到底是做什么的?
此问题在此处已有答案:
How to understand "cmpl $0x0, -0x30(%rbp)" / "je ..."(2个答案)
x86 cmpl and jne(1个答案)
三年前就关门了。
所以我有一行代码来进行逻辑比较,比如:cmpl $0x1, -0x18(ebp)
。在这之后,如果这是相等的,它就会跳,但是-0x18(ebp)到底是做什么的?
1条答案
按热度按时间s5a0g9ez1#
让我们把它分解一下。
-0x18(ebp)
取存储在ebp
寄存器中的值,从中减去0x18
,并将结果用作从中读取的存储器地址。因此,
cmpl $0x1, -0x18(ebp)
读取存储在从-0x18(ebp)
计算的存储器地址处的值,并从中减去$0x1
,根据计算结果设置各种标志(例如,如果减法结果为0
,则将零标志ZF
设置为1
)然后,各种jmp
指令基于所设置的标志来确定是否跳转。