指令系统概述
- 指令:要求计算机执行特定操作的命令,是程序员指挥计算机工作的最小单位。
- 指令系统:指一台计算机全部指令的集合。也称计算机指令集。反应该计算机硬件能完成的,全部功能。是软硬件的界面。
-
指令系统设计包括:指令格式、指令类型、寻址方式、数据形式。
不同计算机有不同的指令系统(CPU不同-->指令系统不同-->功能不同)
指令的基本格式:
(二进制代码表示指令)
- 指令操作码(性质和功能)
- 定长操作码(操作码长度相同,编码简单、译码时间短、不便于新增指令)
- 变长操作码(操作码位数不相同,压缩操作码平均长度、设计复杂、译码时间长)
- 指令的地址码(操作数地址)
-
零地址指令(只有操作码,无操作数)
-
一地址指令(只有一个操作数)
-
二地址指令
-
三地址指令
-
多地址指令
字长较长、功能较大、中型机中才会采用三地址指令和多地址指令
指令字长
操作码和地址码两部分组成的一串二进制数码的位数。(固定或变长)
- 指令字长应与计算机字长相匹配,简化读取指令的操作,减少取指令的时间。一般指令字长是计算机字长的整数倍。(当指令字长=计算机字长时称为单字长指令,对它的访问只需要一次访问内存即可完成读取)
指令助记符
用较容易记忆的文字符号来表示指令中的操作码和操作数-->助记符
- 所有指令助记符的集合及使用规则构成的程序设计语言,称为汇编语言(面向机器的低级语言)
80X86寻址方式
指令寻址
顺序寻址
处理器按程序顺序执行,一条指令结束,PC自动增量指向下一条指令,开始执行下一条指令。
跳转寻址
遇到程序分支等情况,需要控制流程跳转(转移)到指定位置(目标地址、目的地址)
按获得目标地址的方法不同,跳转寻址分为三类:
- 相对寻址
指令代码提供目标地址相对于当前指令地址的位移量,转移到目标地址就是当前指令地址加上位移量
1.同一程序被操作系统安排到不同的存储区执行时,指令间的位移没有改变。
2.采用相对寻址就无需改变转移地址,给操作系统的灵活调度提供了很大的方便。
- 直接寻址
指令代码直接提供目标地址
- 间接寻址
指令代码指出寄存器或存储单元地址,目标地址来自寄存器或存储单元的内容
80X86中指令地址是由代码段寄存器cs和指令指针寄存器来决定的。
16位CPU是代码段值左移四位+IP=指令存储单元物理地址
32位CPU(指令指针寄存器位32位,称EIP。利用代码段寄存器内容得到描述符,取出32位段地址+EIP的值=指令的物理地址)
数据寻址
80X86寻址方式类型
1.立即数寻址(指令需要的操作数紧跟在操作码之后作为指令代码的一部分,并随着处理器的取指操作从主存进入指令寄存器。)
2.寄存器寻址(指令的操作数存放在寄存器中)
3.存储器直接寻址(存储器寻址,操作数在存储单元,I/O指令特殊)
(如果操作数在主存单元中,指令代码中直接给出操作数有效地址称为存储器直接寻址)
4.寄存器间接寻址(存储器寻址~)(有效地址存放在寄存器中,就是采用寄存器间接寻址存储器操作数)
5.寄存器相对寻址(存储器寻址~)
(寄存器相对寻址的有效地址是寄存器内容和位移量的和)
6.基址加变址寻址(存储器寻址~)(操作数有效地址是由基址寄存器(BX或BP)的内容加变址寄存器(SI或DI)的内容构成)
7.相对基址加变址寻址(存储器寻址~)(操作数的有效地址是由基址寄存器(BX或BP)的内容加上变址寄存器(SI或DI)的内容再加上位移量构成)
有效地址和形式地址
-
形式地址(指令中给出的地址)-->有效地址(经过某些规则计算)-->物理地址(处理器通过有效地址转换)-->访问存储单元
8.带比例的变址寻址(在32位的寻址方式中支持变址寻址寄存器内容乘以一个常数(可取1,2,4,8)这种寻址方式称为带比例的变址寻址)
寻址方式及特点
大多数处理器都支持基本寻址方式:
立即数寻址、寄存器寻址和存储器直接寻址、寄存器间接寻址和寄存器相对寻址。目的操作数(寄存器或存储器寻址)<--源操作数(立即数、寄存器或存储器寻址)【两者不能同时为存储器寻址】
80X86CPU的常用指令
数据传送指令
1.通用数据传送指令(指令功能,指令支持的寻址方式,指令对标志的影响,特殊地方)
-
数据传送指令(数据传送是计算机中最基本、最重要的一种操作,数据传送指令的功能是把数据从一个位置传送到另一位置)
(1)通用数据传送指令(MOV,XCHG和XLAT方便传送)
0AH,0BH既可以认为是字节也可以认为是一个字。[SI]和[SI+2]属于存储器寻址方式既可以认为是字节地址也可以认为是字的地址。
(2)堆栈操作指令(先进后出的主存区域)使用SS存放段地址,使用SP指针存放偏移地址。
(3)标志传送类指令(对标志寄存器(FR)保护和更新操作)
(4)地址传送类指令(存储器的逻辑地址传送至指定的寄存器中)
(5)输入(外部设备-->CPU)输出指令(CPU-->外部端口)
源操作数:8位二进制数提供的端口地址/DX间接提供的端口地址
目的操作数:AL字节数据/AX字数据
源操作数:AL/AX寄存器
目的操作数:8位二进制数据直接提供的端口地址/DX寄存器间接提供的端口地址(端口号>256时只能使用DX间接寻址)
80x86 CPU常用指令按功能分为
算术运算指令(带符号和不带符号的8位/16位二进制算数运算和BCD码表示的十进制算数运算。)
+、-、*、/、符号扩展、十进制调整
- 加减运算指令:
(+:ADD,ADC,INC)
减法指令(-:SUB,SBB,DEC,NEG,CMP)
减量指令(DEC):
求补指令(NEG):
比较指令(CMP)
-
乘法运算指令(目的操作数隐含不显示)
无符号数
有符号数(补码-->源码 再乘。乘完符号相同+,符号相反-)
-
除法运算指令(源操作数代表除数,目的操作数隐含)
无符号
有符号
被除数确定余数位(+则+),除数确定商的位(同号+)
影响标志位的有:写标志寄存器SAHF
逻辑运算指令(字或字节按位逻辑运算)
移位运算指令(算数移位/逻辑移位:左移/右移。移位次数可>=1:可以是字节也可以是字进行操作)
对于逻辑移位和算数移位来说:
对于循环移位指令来说:
程序控制指令
串操作及CPU控制指令
CISC和RISC