基本汇编指令详解

几种基本汇编指令详解
常见寄存器
寄存器 16位 32位 64位
累加寄存器 AX EAX RAX
基址寄存器 BX EBX RBX
计数寄存器 CX ECX RCX
数据寄存器 DX EDX RDX
堆栈基指针 BP EBP RBP
变址寄存器 SI ESI RSI
堆栈顶指针 SP ESP RSP
指令寄存器 IP EIP RIP
汇编指令
mov
movb(8位)、movw(16位)、movl(32位)、movq(64位)

寄存器寻址:

movl %eax, %edx

eax -> edx

立即数寻址:

movl $0x123, %edx

数字->寄存器

直接寻址:

movl 0x123, %edx

直接访问内存地址数据,edx = *(int32_t *)0x123;

间接寻址:

movl (%ebx), %edx

%ebx 是个内存地址,(%ebx)指的是该地址中的数据,edx = *(int32_t*)ebx;

变址寻址:

movl 4(%ebx), %edx

edx = *(int32_t*)(ebx+4);

push & pull
堆栈数据结构简介
作用:
程序调用框架
传递参数
保存返回地址
提供局部变量
……
结构:


相关寄存器: esp, ebp

相关操作: pop, push

//建立被调用者函数的堆栈框架
pushl %ebp
movl %esp, %ebp

//拆除框架
movl %ebp, %esp
popl %ebp
ret
1
2
3
4
5
6
7
8
push:压栈
push %eax

相当于:

subl $4, %esp
//栈顶指针减4
movl %eax, (%esp)
//%eax -> esp 地址
1
2
3
4
pop:出栈
pop %eax

相当于:

movl (%esp), %eax
addl %4, %esp
//栈顶指针加4
1
2
3
call&ret
call
call 0x12345

相当于:

pushl %eip
movl $0x12345, %eip
//当前地址压栈,存入新地址
1
2
3
ret
相当于:

popl %eip
//栈 -> eip
1
2
enter&leave
enter
push %ebp
movl %esp, %ebp
//将堆栈置空(栈上重堆)
1
2
3
leave
movl %ebp, %esp
popl %ebp
//将堆栈置空(撤销堆栈)
1
2
3
例子:分析一段汇编代码
pushl $8 ①
movl %esp, %ebp ②
subl $4, %esp ③
movl $8, (%esp) ④
1
2
3
4

 

https://blog.csdn.net/luoyhang003/article/details/46786591

https://zhuanlan.zhihu.com/p/420032439

http://c.biancheng.net/view/3602.html

posted @   扯不断得红尘  阅读(833)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示