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
,根据该计算设置各种标志(例如设置零标志ZF
到 1
如果减法结果是 0
)。各种 jmp
指令然后根据设置的标志确定是否跳转。
所以我有一行进行逻辑比较,例如:
cmpl [=10=]x1, -0x18(ebp)
。在此之后如果相等则跳转,但是 -0x18(ebp) 到底是做什么的?
让我们分解一下。
-0x18(ebp)
取存储在 ebp
寄存器中的值,从中减去 0x18
,并将结果用作要读取的内存地址。
因此,cmpl [=13=]x1, -0x18(ebp)
读取存储在根据 -0x18(ebp)
计算的内存地址的值并从中减去 [=15=]x1
,根据该计算设置各种标志(例如设置零标志ZF
到 1
如果减法结果是 0
)。各种 jmp
指令然后根据设置的标志确定是否跳转。