大家好,欢迎来到IT知识分享网。
Q:什么是指令?什么是指令系统?为什么要引入指令系统?
Q:一般来说,指令分为哪些部分?每部分有什么用处?
Q:对于一个指令系统来说,寻址方式多和少有什么影响?
一、指令系统
1.指令集体系结构
机器指令(指令):指示计算机执行某种操作的命令。
指令系统(指令集):一台计算机的所有指令的集合的构成。
1)指令格式,指令寻址方式,操作类型,以及每种操作对应的操作数的相应规定。
2)操作数类型,操作数寻址方式,以及按大端方式还是小端方式存放。
3)程序可访问的寄存器编号、个数和位数、存储空间的大小和编址方式。
2.指令的基本格式
一条指令就是一组有意义的二进制代码。
操作码:这条指令干什么
单字长指令:指令字长=机器字长
半字长指令:指令字长=机器字长的一半
note:指令字长和机器字长没有固定的关系
①零地址指令
无地址码
这种指令有两种可能:
①不需要操作数的指令 eg:空操作指令、停机指令、关中断指令
②零地址的运算类指令仅用在堆栈计算机中。(堆栈指令)
参与运算的两个操作数隐含地从栈顶和次栈顶弹出,送到运算器进行运算,运算结果再隐含地压入堆栈。
②一地址指令
①
②若地址码均为主存地址,完成一条一地址指令需要3次访存(取指令1次、取操作数1次、存结果1次)
③二地址指令
指令含义:
(121)
若地址码均为主存地址,完成一条二地址指令需要4次访存(取指令1次、取操作数2次、存结果1次)
④三地址指令
指令含义:
(123)
若地址码均为主存地址,完成一条二地址指令需要4次访存(取指令1次、取操作数2次、存结果1次)
⑤四地址指令
指令含义:
(1234)
:下一条将要执行指令的地址
若地址码均为主存地址,完成一条二地址指令需要4次访存(取指令1次、取操作数2次、存结果1次)
3.定长操作码指令格式
定长操作码指令:
在指令字的最高位部分分配固定的若干位(定长)表示操作码。一般n位操作码字段指令系统最大能够表示
条指令。
4.扩展操作码指令格式
1.不允许短码是长码的前缀
2.各指令的操作码一定不能重复
设计扩展码的核心思想:操作码的位数随地址数的减少而增加
留n位的话,4位操作码对应的四地址指令个数:
再编次长地址指令:留m位的话,8位操作码对应的三地址指令个数为:
(因为操作码留完了,此时,地址码位数减少,变成操作码)
依次类推。
5.指令的操作类型
①数据传送
通常有寄存器之间的传送(MOV)
从内存单元读取数据到CPU寄存器(LOAD)从CPU寄存器写数据到内存单元(STORE)
进栈操作(PUSH)
出栈操作(POP)
②算术和逻辑运算
③移位操作
算术移位、逻辑移位、循环移位
④转移操作
无条件转移(JMP):在任何情况下都执行转移操作
⑤输入输出操作
这类指令用于完成CPU与外部设备交换数据或传送控制命令及状态信息。
二、指令的寻址方式
确定本条指令的数据地址及下一条待执行指令的地址的方法。
1.指令寻址
①顺序寻址
通过程序计数器PC + 1 (1条指令的长度),自动形成下一条指令的地址
②跳跃寻址
通过转移类指令实现。“跳跃”是指本条指令给出下条指令地址的计算方式,而是否跳跃可能受到状态寄存器的控制。
跳跃的方式
①绝对转移:地址码直接指出转移目标地址
②相对转移:地址码指出转移目的地址相对于当前PC值的偏移量
由于CPU总是根据PC内容去主存取指令的,因此转移指令执行的结果是修改PC值,下一条指令仍然通过PC给出。
2.数据寻址
数据寻址:确定本条指令的地址码指明的真实地址
直接寻址,则形式地址的位数决定了可寻址的范围
寄存器寻址,则形式地址的位数决定了通用寄存器的最大数量。
①隐含寻址
优点:有利于缩短指令字长
缺点:要增加存储操作数或隐含地址的硬件。
②立即寻址
指令字中地址字段指出的不是操作数地址,而是操作数本身(用补码表示)。
#就是立即寻址特征,A就是操作数。
优点:指令执行阶段不访存,执行速度最快
缺点:A的位数限制了立即数的范围。
③直接寻址
优点:简单,不需要专门计算操作数的地址,指令在执行阶段仅需访存一次。
缺点:A的位数限制了该指令操作数的寻址范围,操作数不易修改。
④间接寻址
地址字段给出的不是操作数的真正地址,而是操作数有效地址所在主存单元的地址,即操作数地址的地址。
⑤寄存器寻址
缺点:寄存器价格昂贵,CPU的寄存器数量有限。
⑥寄存器间接寻址
⑦相对寻址
EA=(PC)+A A:用补码表示,可正可负;A的位数决定了操作数的寻址范围。
⑧基址寻址
EA= (BR)+A 。
基址寻址是面向操作系统的,内容由操作系统或管理程序确定,主要用于解决程序逻辑空间与存储器物理空间的无关性。在程序执行过程中,基址寄存器的内容不变(作为基地址),形式地址可变(作偏移量)。采用通用寄存器作为基址寄存器时,可由用户决定哪个寄存器作为基址寄存器,但其内容由操作系统确定。优点:
⑨变址寻址
EA=(IX) + A
其中IX可以是专用变址寄存器,也可以用通用寄存器作为变址寄存器来实现。
变址寄存器是面向用户的,在程序执行过程中,变址寄存器的内容可由用户改变(作为偏移量),形式地址A不变(基地址)
变址面向用户,主要用于数组问题,在变址寻址过程中,变址寄存器的内容由用户设定,在程序执行过程中寄存器内容值可变,A不可变。
基址寻址 变址寻址 有效地址 EA=(BR)+A EA=(IX)+A 访存次数 1 1 寄存器内容 由操作系统或管理程序确定 由用户设定
程序执行过程中值是否可变 不可变 可变 特点 有利于多道程序设计和编制浮动程度 有利于处理数组问题和编制循环程序
⑩堆栈寻址
寄存器堆栈:硬堆栈
从主存划出一段区域:软堆栈
三、程序的机器级代码表示


1.常用汇编指令介绍
①相关寄存器
①通用寄存器:以X为结尾的
eg:EAX、EBX、ECX、EDX
由于这些通用寄存器的高两位字节和低两位字节可以独立使用,又衍生出一些寄存器的表示
eg:EAX的低两位字节被称为AX,
除了EBP、ESP外,其他几个寄存器的用途是比较任意的。
②Intel和AT&T汇编指令格式对比
Intel格式更符合人们习惯。
③ 常用指令
(1)数据传送指令
mov指令
将第一个操作数(寄存器的内容、内存中的内容或常数值)复制到第二个操作数(寄存器或内存)
但是不能用于直接从内存复制到内存
push指令
先让ESP减4,再将操作数(立即数、寄存器、主存地址)压入栈
pop指令
让栈顶元素出栈写入(寄存器、主存地址),再让ESP加4
(2)算术和逻辑运算指令

add/sub
两个操作数执行操作,将结果保存再第一个数中。
inc/dec
操作数自增或自减
imul
带符号乘法指令。一二操作,放一
idvi
带符号整数除法指令。

and/or/xor
指令分别是逻辑与,逻辑或,逻辑异或,用于操作数的位操作数,操作结果放在第一个操作数中。
not
取反,将操作数种每一位都翻转
neg
负指令
shl/shr
逻辑左/右移。第一个表示被操作数,第二个表示指示移动的位数
(3)控制流指令

jmp
无条件转移指令
jxx
条件转移指令
cmp/test
cmp指令比较两个操作数的值,test指令对两个操作数进行逐位运算
call/ret
分别实现子程序(过程,函数等)的调用及返回
①将IP旧值压栈保存,保存在函数的栈帧顶部
②设置IP新值,无条件转移至被调用函数的第一条指令
从函数的栈帧顶部找到旧值,将其出栈并恢复IP寄存器。
2.过程调用的机器级表示
Q2:如何访问栈帧里面的数据?
Q3:栈帧内可能包含哪些内容?
先来认识一下两条跳转指令 ret call具体执行的细节:
1.假如函数中有形参,形参要如何进行工作 —>Q1
函数调用模型总图
3.选择语句的机器级表示
帮助理解的cmp底层实现
举个栗子
汇编语言实现 if语句跳转
if语句跳转另一种实现方式
4.循环语句的机器级表示
条件转移实现循环
四、CISC和RISC的基本概念
对传统的CISC指令系统的测试表明,各种指令的使用频率相差悬殊,大概只有20%的简单指令被反复使用,而80%的复杂指令使用很少,于是人们开始重组80%的那复杂的指令功能,于是RISC随之诞生。
设计思路:一条指令完成一个复杂的基本功能
精简指令系统计算机 RISC:减少指令种类和简化功能,提高指令的执行速度。
设计思路:一条指令完成一个基本“动作”,多条指令组合完成一个复杂的基本功能。
他俩的区别
在题目中如何快速地区分CISC、RISC:
指令是否定长
除了Load、store之外,是否还有其他指令访存。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/112289.html




















































