指令格式
指令的定义
指令(又称机器指令) :是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。一台计算机的所有指令的集合构成该机的指令系统,也称为指令集。
注:一台计算机只能执行自己指令系统中的指令,不能执行其他系统的指令。
指令格式
一条指令就是机器语言的一个语句,它是一组有意义的二进制代码。
一条指令通常要包括操作码字段和地址码字段两部分:
一条指令可能包含0个、1个、2个、3个、4个地址码…
根据地址码数目不同,可以将指令分为零地址指令、一地址指令、二地址指令…
零地址指令
1.不需要操作数,如空操作、停机、关中断等指令
2.堆栈计算机,两个操作数隐含存放在栈顶和次栈顶,计算结果压回栈顶
一地址指令
1.只需要单操作数,如加1、减1、取反、求补等
指令含义: OP(A1)→A1 完成一条指令需要3次访存:取指→读A1→写A1
2.需要两个操作数,但其中一个操作数隐含在某个寄存器(如隐含在ACC)
指令含义: (ACC)OP(A1)→ACC
注: A1 指某个主存地址,(A1)表示 A1所指向的地址中的内容
二、三地址指令
常用于需要两个操作数的算术运算、逻辑运算相关指令
指令含义: (A1)OP(A2)→A1
完成一条指令需要访存4次,取指→读A1→读A2→写A1
常用于需要两个操作数的算术运算、逻辑运算相关指令
指令含义: (A1)OP(A2)-→A3
完成一条指令需要访存4次,取指→读A1→读A2→写A3
四地址指令
指令含义:(A1)OP(A2)→A3,A4=下一条将要执行指令的地址
完成一条指令需要访存4次,取指→读A1→读A2→写A3
正常情况下:取指令之后PC+1,指向下一条指令
四地址指令:执行指令后,将PC的值修改位A4所指地址
若指令总长度固定不变,则地址码数量越多,寻址能力越差
指令按指令长度分类
指令字长:一条指令的总长度(可能会变)
机器字长: CPU进行一次整数运算所能处理的二进制数据的位数(通常和ALU直接相关)
存储字长:一个存储单元中的二进制代码位数(通常和MDR位数相同)
半字长指令、单字长指令、双字长指令-- 指令 长度是机器字长的多少倍
指令字长会影响取指令所需时间。如:机器字长=存储字长=16bit,则取一条 双字长指令需要两次访存
定长指令字结构:指令系统中所有指令的长度都相等
变长指令字结构:指令系统中各种指令的长度不等
指令按操作码长度分类
定长操作码:指令系统中所有指令的操作码长度都相同
n位->2^n指令
可变长操作码:指令系统中各指令的操作码长度可变
定长指令字结构+可变长操作码->扩展操作码指令格式,不同地址数的指令使用不同长度的操作码
指令按操作类型分类
1.数据传送
LOAD 作用:把存储器中的数据放到寄存器中
STORE 作用:把寄存器中的数据放到存储器中
2.算术逻辑操作
算术:加、减、乘、除、增1、减1、求补、浮点运算、十进制运算
逻辑:与、或、非、异或、位操作、位测试、位清除、位求反
3.移位操作
算术移位、逻辑移位、循环移位(带进位和不带进位)
4.转移操作
无条件转移JMP
条件转移JZ:结果为0; JO:结果溢出; JC:结果有进位
调用和返回CALL和RETURN
陷阱(Trap)与陷阱指令
5.输入输出操作
CPU寄存器与IO端口之间的数据传送(端口即IO接口中的寄存器)
扩展操作码指令格式
拓展操作码
指令字长为16位,每个地址码占4位:
前4位为基本操作码字段OP,另有3个4位长的地址字段A1、A2和A3。
4位基本操作码若全部用于三地址指令,则有16条。
但至少须将1111留作扩展操作码之用,即三地址指令为15条;
1111 1111留作扩展操作码之用,二地址指令为15条;
1111 1111 1111留作扩展操作码之用,一地址指 令为15条;
零地址指令为16条。
●在设计扩展操作码指令格式时,必须注意以下两点:
1)不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同。
2)各指令的操作码一定不能重复。
通常情况下,对使用频率较高的指令,分配较短的操作码;对使用频率较低的指令,分配较长的操作码,从而尽可能减少指令译码和
分析的时间。
扩展操作码举例
设指令字长固定为16位,试设计一套指令系统满足:
指令操作码
操作码指出指令中该指令应该执行什么性质的操作和具有何种功能。
操作码是识别指令、了解指令功能与区分操作数地址内容的组成和使用方法等的关键信息。例如,指出是算术加运算,还是减运算;是程序转移,还是返回操作。
指令寻址
指令寻址、下一条欲执行指令的地址(始终由程序计数器PC给出)
顺序寻址
该系统采用定长指令字结构
指令字长=存储字长=16bit=2B
主存按字编址
主存按字节编址
该系统采用变长指令字结构
跳跃寻址
数据寻址
直接寻址
一条指令的执行:取指令访存1次执行指令访存1次暂不考虑存结果共访存2次
优点:简单,指令执行阶段仅访问一次主存,不需专门计算操作数的地址。
缺点:A的位数决定了该指令操作数的寻址范围。操作数的地址不易修改。
间接寻址
优点:可扩大寻址范围(有效地址EA的位数大于形式地址A的位数)。便于编制程序(用间接寻址可以方便地完成子程序返回)。
缺点:指令在执行阶段要多次访存(一次间址需两次访存,多次寻址需根据存储字的最高位确定几次访存)。
寄存器寻址
一条指令的执行:取指令访存1次执行指令访存0次暂不考虑存结果共访存1次
优点:指令在执行阶段不访问主存,只访问寄存器,指令字短且执行速度快,支持向量/矩阵运算。
缺点:寄存器价格昂贵,计算机中寄存器个数有限。
寄存器间接寻址
一条指令的执行:取指令访存1次执行指令访存1次暂不考虑存结果共访存2次
特点:与一般间接寻址相比速度更快,但指令的执行阶段需要访问主存(因为操作数在主存中)。
隐含寻址
隐含寻址:不是明显地给出操作数的地址,而是在指令中隐含着操作数的地址。
优点:有利于缩短指令字长。
缺点:需增加存储操作数或隐含地址的硬件。
立即寻址
一条指令的执行:取指令访存1次执行指令访存0次暂不考虑存结果共访存1次
数据寻址-偏移寻址
基址寻址:以程序的起始存放地址作为“起点”
变址寻址:程序员自己决定从哪里作为“起点”
相对寻址:以程序计数器Pc所指地址作为“起点”
基址寻址
基址寻址:将CPU中**基址寄存器(BR)**的内容加上指令格式中的形式地址A,而形成操作数的有效地址,即EA=(BR)+A。
拓展:程序运行前,CPU将BR的值修改为该程序的起始地址(存在操作系统PCB中)
注:基址寄存器是面向操作系统的,其内容由操作系统或管理程序确定。在程序执行过程中,基址寄存器的内容不变(作为基地址),形式地址可变(作为偏移量)。当采用通用寄存器作为基址寄存器时,可由用户决定哪个寄存器作为基址寄存器,但其内容仍由操作系统确定。
优点:可扩大寻址范围(基址寄存器的位数大于形式地址A的位数)﹔用户不必考虑自己的程序存于主存的哪一空间区域,故有利于多道程序设计,以及可用于编制浮动程序(整个程序在内存里边的浮动)。
变址寻址
变址寻址:有效地址EA等于指令字中的形式地址A与变址寄存器Ix的内容相加之和,即EA=(IX)+A,其中IX可为变址寄存器(专用),也可用通用寄存器作为变址寄存器。
注:变址寄存器是面向用户的,在程序执行过程中,变址寄存器的内容可由用户改变**(IX作为偏移量),形式地址A不变(作为基地址)。**
在数组处理过程中,可设定A为数组的首地址,不断改变变址寄存器IX的内容,便可很容易形成数组中任一数据的地址,特别适合编制循环程序。
复合寻址
相对寻址
相对寻址:把程序计数器PC的内容加上指令格式中的形式地址A而形成操作数的有效地址,即EA=(PC)+A,其中A是相对于PC所指地址的位移量,可正可负,补码表示。
相对寻址:EA=(PC)+A,其中A是相对于PC所指地址的位移量,可正可负,补码表示
拓展:ACC加法指令的地址码,可采用“分段”方式解决,即程序段、数据段分开。
优点:操作数的地址不是固定的,它随着PC值的变化而变化,并且与指令地址之间总是相差一个固定值,因此便于程序浮动(一段代码在程序内部的浮动)。相对寻址广泛应用于转移指令。
硬件实现数的比较
硬件视角:
通过"cmp指令”比较a和 b(如cmp a, b),实质上是用a-b,相减的结果信息会记录在程序状态字寄存器中(PSW).根据PSW的某几个标志位进行条件判断,来决定是否转移。有的机器把PSW称为“标志寄存器”
PSW中有几个比特位记录上次运算的结果
进位/借位标志CF:最高位有进位/借位时CF=1
零标志ZF:运算结果为o则ZF=1,否则ZF=0
符号标志SF:运算结果为负,SF=1,否则为0
溢出标志OF:运算结果有溢出OF=1否则为0
数据寻址-堆栈寻址
堆栈寻址:操作数存放在堆栈中,隐含使用堆栈指针(SP)作为操作数地址。
堆栈是存储器(或专用寄存器组)中一块特定的按“后进先出(LIFO)”原则管理的存储区,该存储区中被读/写单元的地址是用一个特定的寄存器给出的,该寄存器称为堆栈指针(SP) 。
堆栈可用于函数调用时保存当前函数的相关信息
CISC与RISC
CISC: Complex Instruction Set Computer
设计思路:一条指令完成一个复杂的基本功能。
代表:x86架构,主要用于笔记本、台式机等
80-20规律:典型程序中80%的语句仅仅使用处理机中20%的指令
RISC: Reduced Instruction Set Computer
设计思路:一条指令完成一个基本“动作”,多条指今组合完成一个复杂的基本功能。
代表:ARM架构,主要用于手机、平板等
乘法指令可以访存,一定是CISC
相对于CISC,RISC的特点是:指令条数少,指令长度固定,指令格式和寻址种类少,只有存数/取数指令访问存储器,其余指令的操作均在寄存器之间进行,CPU中通用寄存器多,大部分指令在一个或小于一个机器周期内完成,以硬布线逻辑为主,不用或者少用微程序控制。
uter
设计思路:一条指令完成一个复杂的基本功能。
代表:x86架构,主要用于笔记本、台式机等
80-20规律:典型程序中80%的语句仅仅使用处理机中20%的指令
RISC: Reduced Instruction Set Computer
设计思路:一条指令完成一个基本“动作”,多条指今组合完成一个复杂的基本功能。
代表:ARM架构,主要用于手机、平板等
乘法指令可以访存,一定是CISC
相对于CISC,RISC的特点是:指令条数少,指令长度固定,指令格式和寻址种类少,只有存数/取数指令访问存储器,其余指令的操作均在寄存器之间进行,CPU中通用寄存器多,大部分指令在一个或小于一个机器周期内完成,以硬布线逻辑为主,不用或者少用微程序控制。