失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 4-1指令系统-指令格式

4-1指令系统-指令格式

时间:2023-12-11 07:35:10

相关推荐

4-1指令系统-指令格式

文章目录

一.指令的基本格式1.结构2.长度3.根据操作数地址码数目分类(1)零地址指令(2)一地址指令(3)二地址指令(4)三地址指令(5)四地址指令 二.扩展操作码指令格式三.指令的操作类型1.数据传送2.算术逻辑单元3.移位操作4.转移操作5.输入输出操作

一.指令的基本格式

一条指令就是机器语言的一个语句,它是一组有意义的二进制代码。

1.结构

一条指令通常包括操作码字段和地址码字段两部分。

(1)操作码OP:指出指令中应该执行什么性质的操作和具有何种功能。即进行什么操作,如取数、乘法、加法、停机

(2)地址码Ai:给出被操作的信息(指令或者数据)的地址。即对谁进行操作

2.长度

(1)指令字长:一条指令的总长度(可能会变)

(2)机器字长:CPU进行一次整数运算所能处理的二进制数据的位数(通常和ALU直接相关)(固定不变)

(3)存储字长:一个存储单元中的二进制代码位数(通常和MDR位数相同)(固定不变)

什么是指令字长、机器字长和存储字长?

指令字长是指一个指令字中包含二进制代码的位数。机器字长指计算机能直接处理的二进制数据的位数。存储字长指一个存储单元存储一串二进制代码(存储字)的位数。

指令字长会影响取指令所需时间。如:机器字长=存储字长=16bit,则取一条双字长指令(32bit)需要两次访存

①按指令长度分类

单字长指令:长度等于机器字长双字长指令:长度等于两倍机器字长半字长指令:长度等于半个机器字长定长指令字结构:所有指令长度相同变长指令字结构:各种指令长度不同

②按操作码长度分类

定长操作码:指令系统中所有指令的操作码长度都相同。n位的操作码可以支持2n条指令。控制器的译码电路设计简单,但灵活性较低可变长操作码:指令系统中各指令的操作码长度可变。控制器的译码电路设计复杂,但灵活性较高

3.根据操作数地址码数目分类

(1)零地址指令

只给出操作码,没有给出地址。

①不需要操作数的指令。如停机指令、空操作指令、关中断指令。

②零地址的运算类指令仅使用在堆栈计算机中

通常参与运算的两个操作数隐含的从栈顶和次栈顶弹出,送到运算器进行运算,运算结果再隐含地压入堆栈。

类似于用栈实现中缀转后缀,详见3-2栈和队列-应用-2.表达式求值-(6)用栈实现中缀转后缀(运算符栈)

(2)一地址指令

给出操作码和一个地址码。若指令字长32位,操作码8位,地址码24位,则指令操作数直接寻址范围为224,其他同理

①只有目的操作数的单操作指令

按A1读取操作数,进行OP操作后,结果存回源地址。对地址码指定位置的操作数进行操作码操作,存回地址码指定位置OP(A1)→A1

如:加1、减1、取反

A1指某个主存地址,(A1)表示A1所指向的地址中的内容需要三次访存:取指令、取操作数、存放结果

②隐含约定目的地址的双操作数指令

按指令地址A1读取源操作数,指令可隐含约定。另一个操作数由ACC提供,运算结果也存入ACC中。对地址码指定位置的操作数与ACC存放的操作数进行操作码运算,结果存入ACC,即(ACC)OP(A1)→ACC

如:加法、减法、乘法、除法

需要两次访存:取指令、取操作数

(3)二地址指令

给出操作码和两个地址码。常用于需要两个操作数的算术运算、逻辑运算相关指令。

对目的地址码A1指明的目的操作数和源地址码A2指明的源操作数进行操作码执行的运算,结果存回目的操作数的地址A1(目的地址码),即(A1)OP(A2)→A1

需要四次访存:取指令、取两个操作数、存放结果

(4)三地址指令

(A1)OP(A2)→A3

需要四次访存:取指令、取两个操作数、存放结果

(5)四地址指令

(A1)OP(A2)→A3,A4指明下一条要执行指令的地址

需要四次访存:取指令、取两个操作数、存放结果正常情况下,取指令后(PC)+1→PC,PC自动指向下一条指令。但在四地址指令中,应该将PC的值修改为A4所指向的地址

二.扩展操作码指令格式

扩展操作码是定长指令字结构(所有指令长度相同)和可变长操作码(操作码的长度可变)的结合。操作码的长度随地址码的减少而增加,不同地址数的指令可具有不同长度的操作码,从而在满足需要的前提下,有效地缩短指令字长。但增加了指令译码和分析的难度,使控制器的设计复杂化。

1.三地址指令:OP4位,0000~1110,15条

对于三地址指令,前4位为基本操作码OP,后面三个地址字段A1、A2、A3分别占4位,指令字长共16位。4位基本操作码若全部用于三地址指令,即从0000到1111共16条。为保证零地址、一地址、二地址指令的使用,需留出1111开头的OP作为扩展操作码。因此三地址指令共15条。

2.二地址指令:OP8位,11110000~11111110,15条

对于二地址指令,前8位为基本操作码OP,后面两个地址字段A1、A2分别占4位,指令字长共16位(不变)。8位基本操作码若全部用于二地址指令,二地址指令的OP以111开头,范围1111 0000~1111 1111,共16条。同样二地址指令需要将1111 1111开头的OP留作扩展操作码,供一地址和零地址使用。因此二地址指令共15条。

3.一地址指令:OP12位,111111110000~111111111110,15条

对于一地址指令,前12位为基本操作码OP,后面一个地址字段A1占4位,指令字长共16位(不变)。12位基本操作码全部用于一地址指令,一地址指令以1111 1111开头,范围1111 1111 0000~1111 1111 1111,共16位。同样一地址指令需要将1111 1111 1111开头的OP留作扩展操作码,供零地址使用。因此一地址指令共15条。

4.零地址指令:OP16位,1111111111110000~1111111111111111,16条

对于零地址指令,16位全部为基本操作码OP,指令字长16位(不变)。16位基本操作码全部用于零地址指令,范围1111 1111 1111 0000~1111 1111 1111 1111,共16条。

可以看出,操作码的长度随地址码的减少而增加,使得所有指令长度相同。

以上设计满足:

①不允许短码是长码的前缀

②各指令的操作码一定不能重复

(类似于哈夫曼编码)

通常来说,对于使用频率较高的指令分配较短的操作码,从而尽可能减少指令译码和分析的时间。

[例] 设指令字长固定为16位试设计一套指令系统满足:有15条三地址指令,12条二地址指令,62条一地址指令,32条零地址指令

解:

①三地址指令:0000~1110

②二地址指令:1111 0000~1111 1011

③一地址指令:

1111 1100 0000~1111 1100 1111

1111 1101 0000~1111 1101 1111

1111 1110 0000~1111 1110 1111

1111 1111 0000~1111 1111 1101(零地址32条,至少留2组,即10和11)

④零地址指令:

1111 1111 1110 0000~1111 1111 1110 1111

1111 1111 1111 0000~1111 1111 1111 1111

注:设地址长度为n,上一层留出m种状态,下一层可扩展出m×2n种状态

在本例中地址长度为4,三地址指令留出一位给二地址,二地址可扩展出1×24=16种状态,而二地址只需要12条,给一地址留出4条。一地址可扩展出4×24=64种,而一地址只需要62种,留个零地址指令2种。零地址指令可扩展出2×24=32种

三.指令的操作类型

1.数据传送

传送指令通常有寄存器之间的传输(MOV)、从内存单元读取数据到CPU寄存器(LOAD)(如取a置ACC)、从CPU寄存器写数据到内存单元(STORE)(如将存放在ACC中的计算结果写回主存)

2.算术逻辑单元

加(ADD)、减(SUB)、比较(CMP)、乘(MUL)、除(DIV)、加1(INC)、减1(DEC)、与(AND)、或(OR)、取反(NOT)、异或(XOR)

3.移位操作

算法移位、逻辑移位、循环移位等

4.转移操作

无条件转移(JMP)、条件转移(BRANCH)、调用(CALL)、返回(RET)、陷阱(TRAP)等。无条件转移指令在任何情况下都执行转移操作,而条件转移指令仅在特定条件满足时才执行转移操作,转移条件一般是某个标志位的值,或几个标志位的组合。(转移主要依靠PC的指向)

调用指令和转移指令的区别

执行调用指令时必须保存下一条指令的地址(返回地址),当子程序执行结束时,根据返回地址返回到主程序继续执行;而转移指令则不返回执行。

5.输入输出操作

这类指令用于完成CPU与外部设备交换数据或传送控制命令及状态信息。

按指令的操作类型分类:

(1)数据传送类:进行主存和CPU之间的数据传送(数据传送)

(2)运算类:算术逻辑操作、移位操作

(3)程序控制类:改变程序执行的的顺序(转移操作)

(4)输出/输出类:进行CPU和I/O设备之间的数据传送(输入输出操作)

如果觉得《4-1指令系统-指令格式》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。