寄存器(2)汇编常用指令/寄存器

1. 传送指令(4): mov push pop lea

			1.1 mov       数据传送指令 a=b 
			1.2 push 	  堆栈操作指令 压栈
			1.3 pop       出栈
			1.4 lea       有效地址传送指令

1.1 lea 指令(传地址)

lea load effective address LEA指令的功能是取偏移地址,指令形式是从存储器读数据到寄存器, 效果是将存储器的有效地址写入到目的操作数, 类似, C语言中的”&”.

它的指令形式是从存储器读数据到寄存器,但实际上它根本就没有引用存储器。
他只是取地址但是并没有取地址对应的值。

lea指令只有一个周期,某些编译器会使用lea来优化加法等操作

1.2 mov 和 lea 的区别

mov是将数据从源操作传到目的操作数中
lea是将源操作数的地址传到目的操作数中

一个是数据,一个是地址
LEA指令的功能是取偏移地址,MOV指令的功能是传送数据 

示例1:

leal 18(%eax),%ebx
movl 18(%eax) ,%ebx
这样,两条指令,传送的值是不一样的
leal 是传送 18+%eal(值)到 寄存器%ebx
movl 是传送的是在主存中以18+%eax为地址的存储序列里面存的值到%ebx。

示例2:

leal 6(%eax), %edx //把eax的值+6放入edx中。
leal (%eax, %ecx), %edx //把eax+ecx的值装入edx中。
leal (%eax, %ecx, 4), %edx //把eax + 4*ecx的值装入edx中。
leal 7(%eax, %eax, 8), %edx //把9*eax +7的值装入edx中。
leal 0xA(,%eax,4), %edx //把4*eax + 10的值装入edx中。
leal 9(%eax, %ecx, 2), %edx //把eax + 2*ecx+ 9的值装入edx中。

2. 转移指令(8):call jmp je jne jb jnb ja jna

			2.1 call 过程调用指令
			2.2 jmp 无条件转移指令
			2.3 je 条件转移指令
			2.4 jne 条件转移指令
			2.5 jb 条件转移指令
			2.6 jnb 条件转移指令
			2.7 ja 条件转移指令
			2.8 jna 条件转移指令

3. 运算指令(7):add sub mul div adc sbb cmp

			3.1 add 加法指令
			3.2 sub 减法指令 sub a,b  -> a=a-b 
			3.3 mul 无符号数乘法指令
			3.4 div 无符号除法指令 
			3.5 cmp 比较指令  cmp a,b 判断两个寄存器的值是否相等

4. 处理机控制指令(1):nop

			4.1 nop 空操作指令

5. 32位机汇编指令:movl、subl、addl、pushl、popl、call、leave、ret

movl %ebp, %esp 将ebp中内容放置到esp中。
subl $4, %esp 寄存器esp值减少4。
addl $1, %eax 寄存器eax中值增加1。
popl %ebp 栈顶内容保存到ebp中,之后esp寄存器数值加4。
pushl %ebp 将ebp中内容入栈,之后esp寄存器值减4。
call f 先将eip指向地址入栈(call f 下一条指令位置),之后eip指向f地址位置。
pushl %eip
movl f , %eip
leave 将ebp中的内容移动到esp中去,之后出栈内容到ebp中。
movl %ebp, %esp
popl %ebp
ret 出栈内容到eip中。
popl %eip

参考: 汇编语言之常见的汇编指令
https://wenku.baidu.com/view/8ada1771846a561252d380eb6294dd88d1d23dc7.html?re=view
https://chenyu.blog.csdn.net/article/details/53011181
https://baijiahao.baidu.com/s?id=1669091385513843860&wfr=spider&for=pc

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值