本文主要是介绍X86汇编基础,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. mov指令及几种内存寻址方式:
寄存器模式(register mode),以%开头的寄存器标示符
立即数(immediate):是以$开头的数值
直接寻址(direct):直接访问一个指定的内存地址的数据
间接寻址(indirect):将寄存器的值作为一个内存地址来访问内存
变址寻址(displaced):在间接寻址之时改变寄存器的数值
AT&T汇编格式与Intel汇编格式略有不同
Linux内存使用的是AT&T汇编格式
2. 几个重要的汇编指令:push、pop、call、ret
eip(*)-后面的*表示不能被直接修改,只能通过特殊指令间接修改
IP是指令寄存器,存放当前指令的下一条指令的地址。CPU该执行哪条指令就是通过IP来指示的。
EIP是32位机的指令寄存器。
ESP (extended stack pointer)寄存器用于记录当前堆栈的顶部位置
EBP (extended base pointer) 寄存器用于记录当前堆栈的基准位置
案例一:
案例二:
案例三:
//在64位环境下编译成32位的汇编
gcc -S -o ccode32.s ccode.c -m32
//链接时会缺少构建32 位可执行程序缺少的包,使用以下指令安装:
sudo apt-get install libc6-dev-i386
//编译链接成32位的可执行文件
gcc -o ccode32 ccode.c -m32
这篇关于X86汇编基础的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!