【发布时间】:2018-10-25 20:23:16
【问题描述】:
我不明白这个汇编代码是做什么的。
imul -0x8(%rsp, %rbx, 4), %eax
cmp %eax, -0x4(%rsp, %rbx, 4)
我知道 imul 和 cmp 的指令是做什么的,但我不明白 -0x4(%rsp, %rbx, 4) 和 -0x8(%rsp, %rbx, 4) 是什么意思。如果需要,我可以提供更多上下文,但我真正想要的只是这两行的字面翻译。第一行的 %eax 中存储了什么? %rbx*4 和 %rsp - 8 的乘积?
【问题讨论】:
-
-0x8(%rsp, %rbx, 4)是一个内存操作数。在 AT&T 语法中,它是位移(base, index, scale),其中计算是位移+base+index*scale。 base 和 index 必须是寄存器,scale 是一个值 1,2,4,8,displacement 可以是 32 位有符号值。
标签: assembly x86 cpu-registers