我正在研究由GCC生成的汇编代码。但我不明白:
movl $0x2d, 0x4(%esp)
在第二个操作数中,
0x4
代表什么?偏移地址?以及EAX寄存器的用途是什么? 最佳答案
movl $0x2d, 0x4(%esp)
表示获取堆栈指针的当前值(%esp
),加4(0x4
),然后将长(32位)值0x2d
存储到该位置。eax
寄存器是通用32位寄存器之一。 x86体系结构指定以下32位寄存器:
eax Accumulator Register
ebx Base Register
ecx Counter Register
edx Data Register
esi Source Index
edi Destination Index
ebp Base Pointer
esp Stack Pointer
以及某些名称和用途可以追溯到英特尔8080的时代。
This page很好地概述了英特尔类型的寄存器。上面列表中的前四个也可以作为16位或两个8位值进行访问。例如:
3322222222221111111111
10987654321098765432109876543210
<- eax ->
<- ax ->
<- ah -><- al ->
指针和索引寄存器不允许使用8位部分,但是您可以使用16位
bp
。关于c - 0x4在 "movl $0x2d, 0x4(%esp)"中做什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2386684/