1.指令的基本格式
1.1指令系统
指令(机器指令)是指示计算机执行某种操作的命令。一台计算机的所有指令的集合构成该机的指令系统,也称指令集。
指令系统是指令集体系结构(ISA)中最核心的部分,ISA完整定义了软件和硬件之间的接口,是机器语言或汇编语言程序员所应熟悉的。
ISA规定的内容主要包括:指令格式,数据类型及格式,操作数的存放方式,程序可访问的寄存器个数、位数和编号,存储空间的大小和编址方式,寻址方式,指令执行过程的控制方式等。
1.2指令格式
条指令就是机器语言的一个语句,它是一组有意义的二进制代码。条指令通常要包括操作码字段和地址码字段两部分:
操作码(OP) | 地址码 (A) |
用户要干什么? | 对谁进行操作? |
停机,中断,求反,求补,加减乘除 | 不需要操作对象需要一个操作对象需要两个操作对象 |
1.3指令-按地址码数目分类
1.4指令-按指令长度分类
指令字长:一条指令的总长度(可能会变)
机器字长:CPU进行一次整数运算所能处理的二进制数据的位数(通常和ALU直接相关)
存储字长:一个存储单元中的二进制代码位数(通常和MDR位数相同)
半字长指令、单字长指令、双字长指令--指令长度是机器字长的多少倍指令字长会影响取指令所需时间。
如:机器字长=存储字长=16bit,则取一条双字长指令需要两次访存
定长指令字结构:指令系统中所有指令的长度都相等
变长指令字结构:指令系统中各种指令的长度不等
1.5指令-按操作码长度分类
指令由操作码和若干个地址码组成。
定长指令字结构:指令系统中所有指令的长度都相等
变长指令字结构:指令系统中各种指令的长度不等
定长操作码:指令系统中所有指令的操作码长度都相同
变长操作码指:令系统中各指令的操作码长度可变中
定长指令字结构 + 可变长操作码 = 扩展操作码指令格式
定长操作码 | :指令系统中所有指令的操作码长度都相同n位→2^n条指令 | 控制器的译码电路设计简单,但灵活性较低 |
可变长操作码 | :指令系统中各指令的操作码长度可变 | 控制器的译码电路设计复杂,但灵活性较高 |
定长指令字结构+可变长操作码 | 扩展操作码指令格式 |
1.6指令一按操作类型分头类
1.数据传送 | LOAD作用:把存储器中的数据放到寄存器中作用:把寄存器中的数据放到存储器中 |
2.算术逻辑操作 | 算术:加、减、乘、除、增 1、减 1、求补、浮点运算、十进制运算逻辑:与、或、非、异或、位操作、位测试、位清除、位求反 |
3.移位操作 | 算术移位、逻辑移位、循环移位(带进位和不带进位) |
4.转移操作 | 无条件转移JMP 条件转移JZ:结果为0;J0:结果溢出;JC:结果有进位 调用和返回CALL和RETURN 陷阱(Trap)与陷阱指令 |
5.输入输出操作 | CPU寄存器与10端口之间的数据传送(端口即I0接口中的寄存器) |
2.扩展操作码指令格式
在设计扩展操作码指令格式时,必须注意以下两点:
1)不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同。
2)各指令的操作码一定不能重复。
通常情况下,对使用频率较高的指令,分配较短的操作码;对使用频率较低的指令,分配较长的操作码,从而尽可能减少指令译码和分析的时间。
扩展操作码举例
设指令字长固定为16位,试设计一套指令系统满足:
a)有15条三地址指令
0000-1110 | A1 | A2 | A3 |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 |
b)有12条二地址指令
1111 XXXX XXXX XXXX | 1111 | 0000-1011 | A1 | A2 |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
11110000 | ~0001 | ~0010 | ~0011 | ~0100 | ~0101 | ~0110 | ~0111 | ~1000 | ~1001 | ~1010 | ~1011 |
c)有62条一地址指令
1111 11XX XXXX XXXX | 1111 | 1100-1111 | 0000-1111 | A1 |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
000000 | 000001 | 000010 | 000011 | 000100 | 000101 | 000110 | 000111 | 001000 | 001001 | 001010 | 001011 | 001100 | 001101 | 001110 | 001111 |
010000 | ~0001 | ~0010 | ~0011 | ~0100 | ~0101 | ~0110 | ~0111 | ~1000 | ~1001 | ~1010 | ~1011 | ~1100 | ~1101 | ~1110 | ~1111 |
10 | ~ | ~ | ~ | ~ | ~ | ~ | ~ | ~ | ~ | ~ | ~ | ~ | ~ | ~ | ~ |
11 | ~ | ~ | ~ | ~ | ~ | ~ | ~ | ~ | ~ | ~ | ~ | ~ | ~ |
d)有32条零地址指令
1111 1111 111X XXXX | 1111 | 1111 | 1110-1111 | 0000-1111 |
设地址长度为n,上一层留出M种状态,下一层可扩展出mx2^n种状态
【2017统考真题】某计算机按字节编址,指令字长固定且只有两种指令格式,其中三地址指令 29 条、二地址指令 107条,每个地址字段为6位,则指令字长至少应该是()
二地址指令有 29条,所以其操作码至少为5位。以5位进行计算,它剩余32-29=3种操作码给二地址。而二地址另外多了6位给操作码,因此其数量最大达3x64=192。所以指令字长最少为23位,因为计算机按字节编址,需要是8的倍数,所以指令字长至少应该是24位。
【2022 统考真题】设计某指令系统时,假设采用 16 位定长指令字格式,操作码使用扩展编码方式,地址码为6位,包含零地址、一地址和二地址3种格式的指令。若二地址指令有 12条,一地址指令有 254条,则零地址指令的条数最多为( )。
地址码为6位,一条二地址指令会占用2条一地址指令的空间,一条一地址指令会占用2条零地址指令的空间。如果全都是零地址指令,则最多有2条,减去一地址指令和二地址指令所占用的零地址指令空间,即2^16-254x2^6-12x2^6x2^6=(2^10-254-12x2^6)x2^6=2x2^6=128。