CS学习(二)初识指令&stack

lea指令的用途:

1)地址计算/地址传送(详情见上文)

2)执行计算操作:

来源:湖大CS课程组(侵删)

通过比例基址寻址的知识,我们知道t=5*x+2*y+8*z;

lea实在AGU内执行的,对于普通的用ALU执行的计算操作而言,其优势在于:

lea可以在一个时钟周期内完成,执行效率高。而ALU计算的话,加法需要1~3个时钟周期,乘法一般需要>10个时间周期,除法需要几十甚至上百个时间周期。

JMP指令(无条件跳转)

有这样一个汇编语言文件,第八行有jmp指令,预期不会执行第九行的movl而是直接跳转到11行。

设置断点,开run,执行结果与预期相符。

栈操作指令(先进后出)

这里stack的样子与C++中的相反,是倒过来的,即:

入栈(push)是将元素依次从上往下放。

指令格式:
push S

pop D

操作数可以是:

        立即数(仅push)

        寄存器

        内存(已定义的变量)

实例:

注:

高位高地址,低位低地址。

入栈过程解析:

10行:将32位的0x88888888入栈。

13行:将32位的0x12345678写入ebx。

14行:ebx入栈。

17行:bx(ebx的低十六位)入栈。

18行:pushw读取value的后十六位,高位到低位依次入栈。

19行:value的地址入栈。

来源:湖大CS课程组(侵删)

出栈过程解析:

22行:32位数据出栈,并将其写入ebx寄存器中。

23行:32位数据出栈,并将其写入eax寄存器中。

24行:16位数据出栈,并将其写入cx寄存器中。

来源:湖大CS课程组(侵删)

(注意顺序:低位到高位保存,但是我们是从高位到低位读)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值