写在前面:
- 本系列笔记主要以《计算机组成原理(唐朔飞)》为参考,大部分内容出于此书,笔者的工作主要是挑其重点展示,另外配合下方视频链接的教程展开思路,在笔记中一些比较难懂的地方加以自己的一点点理解(重点基本都会有标注,没有任何标注的难懂文字应该是笔者因为强迫症而加进来的,可选择性地忽略)。
一、设计指令格式应考虑的因素
指令系统集中反映了机器的性能,又是程序员编程的依据。用户在编程时既希望指令系统很丰富,便于用户选择,同时还要求机器执行程序时速度快、占用主存空间少,实现高效运行。此外,为了继承已有的软件,必须考虑新机器的指令系统与同一系列机器指令系统的兼容性,即高档机必须能兼容低档机的程序运行,称之为“向上兼容”。
指令格式集中体现了指令系统的功能,为此,在确定指令格式时必须从以下几个方面总和考虑:
①操作类型:包括指令数及操作的难易程度。
②数据类型:确定哪些数据类型可以参与操作。
③指令格式:包括指令字长、操作码位数、地址码位数、地址个数、寻址方式类型,以及指令字长和操作码位数是否可变等。
④寻址方式:包括指令和操作数具体有哪些寻址方式。
⑤寄存器个数:寄存器的多少直接影响指令的执行时间。
二、指令格式举例——IBM 360
IBM 360是32位机器,按字节寻址,并可支持多种数据类型,如字节、半字、字、双字(双精度实数)、压缩十进制数、字符串等,在CPU中有16个32位通用寄存器(用户可选定任一个寄存器作为基址寄存器BR或变址寄存器IX)、4个双精度(64位)浮点寄存器,指令字长有16位、32位、48位三种,如下图所示。
三、指令格式设计举例
某机字长16位,存储器直接寻址空间为128字,变址时的位移量为-64~+63,16个通用寄存器均可作为变址寄存器。设计一套指令系统格式,满足下列寻址类型的要求。
①直接寻址的二地址指令3条。
②变址寻址的一地址指令6条。
③寄存器寻址的二地址指令8条。
④直接寻址的一地址指令12条。
⑤零地址指令32条。
(1)在直接寻址的二地址指令中,根据直接寻址空间为128字,则每个地址码为7位。3条这种指令的操作码为00、01和10,剩下的11可作为下一种格式指令的操作码扩展用。
(2)在变址寻址的一地址指令中,根据变址时的位移量为-64~+63,形式地址A取7位,根据16个通用寄存器可作为变址寄存器,取4位作为变址寄存器的编号,剩下的5位可作操作码。6条这种指令的操作码为11000-11101,剩下的两个编码11110和11111可作为扩展用。
(3)在寄存器寻址的二地址指令中,两个寄存器地址和
共8位,剩下的8位可作操作码。8条这种指令的操作码为11110000-11110111,剩下的11111000-11111111这8个编码可作为扩展用。
(4)在直接寻址的一地址指令中,除去7位的地址码外,可有9位操作码。以11111作为指令的操作码特征位,12条这种指令的操作码为111110000-111111011,剩下的111111100-111111111可作为扩展用。
(5)在零地址指令中,指令的16位都作为操作码,与上述剩下的4个操作码组合后,共可构成条指令的操作码。32条这种指令的操作码可取1111111000000000-1111111000011111。