cmpl $0x1, -0x18(ebp) 在 AT&T 中的作用是什么?

What cmpl $0x1, -0x18(ebp) does in AT&T?

所以我有一行进行逻辑比较,例如: cmpl [=10=]x1, -0x18(ebp)。在此之后如果相等则跳转,但是 -0x18(ebp) 到底是做什么的?

让我们分解一下。

-0x18(ebp) 取存储在 ebp 寄存器中的值,从中减去 0x18,并将结果用作要读取的内存地址。

因此,cmpl [=13=]x1, -0x18(ebp) 读取存储在根据 -0x18(ebp) 计算的内存地址的值并从中减去 [=15=]x1,根据该计算设置各种标志(例如设置零标志ZF1 如果减法结果是 0)。各种 jmp 指令然后根据设置的标志确定是否跳转。