mar*_*tin 10 c x86 assembly gnu-assembler
我正在研究GCC生成的汇编代码.但我不明白:
movl $0x2d, 0x4(%esp)
Run Code Online (Sandbox Code Playgroud)
在第二个操作数中,0x4代表什么?偏移地址?注册EAX有什么用?
pax*_*blo 14
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
Run Code Online (Sandbox Code Playgroud)
并且有些人的名字和目的可以追溯到英特尔8080的时代.
此页面提供了有关Intel类型寄存器的概述.上面列表中的前四个也可以作为16位或两个8位值访问.例如:
3322222222221111111111
10987654321098765432109876543210
<- eax ->
<- ax ->
<- ah -><- al ->
Run Code Online (Sandbox Code Playgroud)
指针和索引寄存器不允许使用8位部分,但您可以使用例如16位bp.
| 归档时间: |
|
| 查看次数: |
7406 次 |
| 最近记录: |