Assembly instructions 汇编指令解析 A&AT
2014-05-11 20:40
369 查看
Assembly instructions
汇编初步学习
汇编0基础的戳上面,刷一遍,包治百病
%eax寄存器的值与C语言的return的值相对应
(%esp)地址处储存的是函数的返回地址 return address
%esp 栈顶寄存器 保存栈顶指针。
%ebp = boundary between parameters and local variable
函数执行时不要改变这个寄存器的值!
pushl 指令究竟都干了什么:
pushl x
等价于
有个常遇到的汇编代码 pushl %ebx 有点意思,
这里就等价于
这里就把%ebx 寄存器的值储存在%esp 指向的内存地址了
同样popl命令与之相反.
这里就相当于恢复了原来x的值(x是寄存器)
就相当于
ret 就相当于
popl %eip
哈
leavel 相当于
movl %ebp, %esp; //恢复原来的栈顶
popl %ebp
如果编译器意识到没有变更%ebp的值,那么就会用调用leave,而是直接popl
例如仅有一个main函数的时候
leal 指令
我今天才知道 lea 是load effective address的缩写。。。
仅仅是简单的算术运算,不是解引用
leal 0x400580,%rcx
把0x400580 加到%rcx里面去
汇编初步学习
汇编0基础的戳上面,刷一遍,包治百病
%eax寄存器的值与C语言的return的值相对应
(%esp)地址处储存的是函数的返回地址 return address
%esp 栈顶寄存器 保存栈顶指针。
%ebp = boundary between parameters and local variable
函数执行时不要改变这个寄存器的值!
pushl 指令究竟都干了什么:
pushl x
等价于
subl $4, %esp; movl x, (%esp)
有个常遇到的汇编代码 pushl %ebx 有点意思,
这里就等价于
subl $4 %esp movl %ebx (%esp)
这里就把%ebx 寄存器的值储存在%esp 指向的内存地址了
同样popl命令与之相反.
popl x movl %(esp) x add $4 %esp
这里就相当于恢复了原来x的值(x是寄存器)
calll 0x4005e8 <map>
就相当于
push %eip jump 0x4005e8
ret 就相当于
popl %eip
哈
leavel 相当于
movl %ebp, %esp; //恢复原来的栈顶
popl %ebp
如果编译器意识到没有变更%ebp的值,那么就会用调用leave,而是直接popl
例如仅有一个main函数的时候
leal 指令
我今天才知道 lea 是load effective address的缩写。。。
仅仅是简单的算术运算,不是解引用
leal 0x400580,%rcx
把0x400580 加到%rcx里面去
相关文章推荐
- AT&T汇编指令介绍
- (深入理解计算机系统)AT&T汇编指令
- 使用java中汇编指令解析String对象(String s1="a";String s2=s1+"b";String s3=new String("a");String s4=s3+"a";)
- AT&T汇编指令总结
- AT&T汇编指令
- 想了解下 GCC 对 switch 的优化,但是不懂 AT&T 伪汇编指令,帮忙分析下
- AT&T汇编指令
- AT&T(GAS)汇编指令小集
- AT&amp;T汇编指令总结
- AT&T 汇编指令说明
- AT&T汇编指令enter、leave、call、ret
- AT&T汇编指令总结
- AT&T汇编指令总结
- AT&T汇编指令
- AT&T汇编指令
- AT&T与INTER汇编格式解析
- AT&T(GAS)汇编指令小集
- AT&T汇编指令
- AT&T汇编指令 AT&T汇编伪指令
- AT&T汇编指令