我正在研究由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/

10-12 16:35