汇编代码学习一
来源:互联网 发布:淘宝苏宁易购退笔记本 编辑:程序博客网 时间:2024/05/28 06:07
一个IA32的cpu包含八个存储32位值的寄存器。这些寄存器可以用来存储寄存器和指针。每个寄存器一%开头,如下图所示:
大多情况下,前六个可以看作通用寄存器,多他们没有特别的使用限制。最后两个保存着指向程序最重要的两个指针。栈指针和帧指针(基址指针)。
操作数指示符
1 立即数,也称常数,在ATT汇编代码中用 '$'后面跟一个标准C表示的常数。如:$ox1F;
2 寄存器,表示某个寄存器的内容,对双字操作来说,可以是8个32位寄存器其中一个如:%eax; 对单字操作来说,可以表示8个16位寄存器其中的一个如:%ax,对字节操作来说,可以表示8个8位寄存器其中的一个:%ai;
3 存储器,他会根据计算出来的地址访问,访问某个存储器位置。如;4(%eax),表示访问 %eax + 4 这个地址的内容。
上图所示,是操作数指示符的一些操作。
数据传送指令:
movb:移动一个byte
movw:移动一个字(2byte)
movl:移动双字 (4byte)
movl $0x12F %eax immediate -> register 4bytes
movw %bp %sp register -> register 2bytes
movb (%edi,%ecx) %ah memmory -> register 1byte
movl $0x12 4(%eax) immediate -> memory 4bytes
-------------------------------------------------------------
pushl: 把数据压入栈顶,指令只有一个操作数,动作为:先把栈指针减四4(栈向低地址扩展),然后把值写到新的栈顶地址
如在函数调用的时候经常看到的 pushl %ebp,其行为等价于下面两条:
subl $0x4 %esp
movl %ebp (%esp)
popl:把数据弹出栈顶,指令也只有一个操作数,动作:先把栈顶值读出,然后栈指针加4
如 popl %eax 其行为等价于下面两条指令;
movl (%esp) %eax
addl $0x4 %esp
加载有效地址指令 lean
如: lean (%eax) %ecx
表面上看上去是将存储器的内容传给%ecx,实际上根本没有用到存储器引用,而是把有效地址加载给%ecx,即 把%eax -> %ecx;
淡然还有其他的整数算数操作,如下图:
- 汇编代码学习一
- 汇编学习笔记(一)
- 汇编学习笔记一
- 汇编学习(一)
- 汇编学习--练习一
- 汇编学习笔记《一》
- 汇编学习一
- 汇编学习(一)
- 汇编学习一: 汇编传参例子
- win32汇编基础学习一
- 汇编学习笔记(一)
- 汇编学习笔记(一)
- 汇编学习笔记(一)
- WIN32汇编学习笔记(一)
- 汇编学习笔记(一)
- s3c6410裸机学习笔记(一)--汇编启动代码start.S
- java汇编代码学习(一)基本类型与数组类型
- 基础的反汇编代码(一)
- 初识ant
- staticInter
- HDU 4548 -------美素数
- MySQL的安装与基本命令
- netfilter
- 汇编代码学习一
- Android中自定义属性的格式详解
- linux 配置jlink
- class E_up
- Mongodb主从架构
- leetcode Unique Paths II
- RSS收藏 设计师必看的苹果设计历代启示录
- UML统一建模语言
- tomcat下多网站、网站下多应用时的配置