7.1、机器指令
指令的一般格式:
操作码字段 | 地址码字段 |
---|
- 操作码:用来指明该指令所要完成的操作,例如加法、减法等。
- 地址码:地址码用来指出该指令的原操作数的地址、结果的地址以及下一条指令的地址。
地址码分类
1. 四地址指令
\(OP\) | \(A_1\) | \(A_2\) | \(A_3\) | \(A_4\) |
---|
\(OP\):操作码
\(A_1\):第一操作数地址,
\(A_2\):第二操作数地址
\(A_3\):结果地址
\(A_4\):下一条指令的地址。
- 完成的操作是:\((A_1)\)OP\((A_2 )\rightarrow A_3\)
完成一次四地址指令,共需访存4次(取指令一次,取两个操作数两次,存放结果一次)。
2. 三地址指令
\(OP\) | \(A_1\) | \(A_2\) | \(A_3\) |
---|
- 完成的操作:\((A_1)\)OP\((A_2 )\rightarrow A_3\)
后续指令的地址隐含在程序计数器PC中。一条三地址指令 也需要访存4次。
3. 二地址指令
\(OP\) | \(A_1\) | \(A_2\) |
---|
A1字段即代表源操作数的地址,又代表存放本次运算结果的地址
完成的操作:\((A_1)\)OP\((A_2 )\rightarrow A_1\),这种情况完成一次指令仍需要访问存储器4次。
- 如果完成:\((A_1)\)OP\((A_2 )\rightarrow ACC\),此时完成一条指令只需访存3次。因为将中间结果放在了ACC(累加器)里。
4. 一地址指令
\(OP\) | \(A_1\) |
---|
完成的操作:\((ACC)\)OP\((A_1 )\rightarrow ACC\)
其中,ACC即存放参与运算的操作数,又存放运算的中间结果。因此完成一条一指令只需要访存2次(取指一次,操作数一次)。
5. 零地址指令
零地址指令在指令字中无地址码,其操作数的地址隐含在堆栈指针SP中。
操作码长度
-
操作码长度固定:
- 优点:便于硬件设计,译码时间短
- 缺点:操作码位数未能完全使用
- 示例:RISC指令集、IBM370
-
操作码长度不固定
- 优点:有效压缩操作码的平均长度
- 缺点:增加指令译码和分析的难度,控制器设计复杂
- 示例:CISC指令集、Intel 8086
扩展操作码(操作码不固定的一种形式)
指令字长为16位,随着地址码的减少,操作码的位数增加,三地址指令有4位操作码,二地址有8位操作码,一地址有12位操作码,零地址有16位操作码。
图中表示三地址最多有15条指令,00001110,但如果三地址指令减少了一条,变成00001101,那么二地址将会增加16条指令,增加的指令为1110 0000~ 1101 1111 这16个指令。
例题7.1
假设指令字长为16位,操作数的地址码为6位,指令有零地址、一地址、二地址三种格式。
(1)设操作码固定,若零地址指令有P种,一地址指令有Q种,则二地址指令最多有几种?
(2)采用扩展操作码技术,若二地址指令有X种,零地址指令有Y种,则一地址指令最多有几种?
解题:
7.2、操作数类型和操作类型
- 字节:8位
- 字:16位
- 双字:32位
- 四字:64位
7.3、寻址方式
指令寻址
- 指令寻址分为顺序寻址和跳跃寻址。
- 顺序寻址通过程序计数器PC+1,自动形成下一条指令的地址。
- 跳跃寻址通过转移类指令实现。
对于图7.6,第1,2,3号指令地址都是由PC自动形成(顺序寻址)。
第3号指令为“JMP 7”,所以跳过4,5,6,直接执行第7条指令(跳跃寻址)。
数据寻址
操作码 | 寻址特征 | 形式地址 |
---|
1. 立即寻址
立即寻址的形式地址A不是操作数的地址,而是操作数本身。
A的位数限制指令表述的立即数范围。
2. 直接寻址 EA=A
优点:寻找操作数比较简单,在指令执行阶段对主存只访问一次
缺点:A的位数限制了操作数的寻址范围
3. 隐含寻址
隐含寻址是指指令字中不明显给出操作数地址,其操作数地址隐含在操作码或某个寄存器中。图7.10 表示一地址格式的加法指令,另一个操作数隐含在ACC中。
4. 间接寻址 EA=(A)
指令字中的形式地址不直接给出操作数的地址,而是指出操作数有效地址所在的存储单元地址。优点是扩大了操作数的寻址范围,缺点是在指令执行阶段需要多次访存。
- 一次间接寻址:A地址单元的内容EA是操作数的有效地址。如果指令字长16位,A是8位,直接寻址范围,间接寻址的范围是,扩大了操作数的寻址范围。
- 多次间接寻址:用存储字的首位来标志间接寻址是否结束,例如上图(b),当存储字首位为1时需要继续访存寻址,为0时表示该存储字为EA,所以多次间接寻址的寻址范围是\(2^{15}\)(有1位标记位)。
5. 寄存器寻址 EA=R
寄存器寻址:在执行执行阶段无须访存,减少执行时间。
6. 寄存器间接寻址 EA=(R)
寄存器间接寻址:Ri的内容不是操作数,而是操作数所在主存单元的地址号,与寄存器寻址相比,指令的执行阶段还需访存主存一次,比间接寻址少访存一次。
7. 基址寻址 EA=A+(BR)
基址寻址设有基址寄存器BR,其操作数的有效地址EA等于指令字中的形式地址与基址寄存器中的内容相加。
基址寻址优点:扩大操作数的寻址范围,基址寄存器位数可以大于A的位数,将每段首地址存放于基址寄存器中,段内的位移量由A指出。
8. 变址寻址 EA=A+(IX)
变址寻址主要用于处理数组问题,设定A为数组的首地址,不断改变变址寄存器IX的内容,可以形成数组中任一数据的地址。
9. 相对寻址 EA=(PC)+A
- 相对寻址的有效地址是将程序计数器PC的内容(即当前指令的地址)与指令字中的形式地址A相加而成。
- 相对寻址的相对位移由形式地址A来提供,所以A又称位移量。位移量A可正可负,通常用补码表示。如果位移量为8位,那么寻址范围就在(PC)+127~(PC)-128之间。
- 相对寻址的特点:转移地址不固定,可随PC值变化而变。
10. 堆栈寻址
-
堆栈指针SP指出栈顶地址。操作数只能从栈顶地址指示的存储单元存或取,操作数的地址被隐含在SP中。
-
堆栈寻址也可视为寄存器间接寻址,将SP视为寄存器,存放操作数的有效地址。
-
图7.18中,进栈操作PUSH A,首先将 (SP)-\(\Delta \rightarrow\) SP,将ACC的内容放在栈顶。出栈P\(OP\) A,首先把栈顶元素给ACC,然后让(SP)+\(\Delta \rightarrow\) SP。
-
\(\Delta的\)值取决于主存编址方式,按字编址,1字=2Byte=16bit,图7.18的\(\Delta=1\);按字节编址,1字节=8bit,如果字长为16位,则\(\Delta=2\)。
例题:7.2
设相对寻址的转移指令占3个字节,第一个字节为操作码,第二、第三字节为相对转移量(补码表示),而且数据在存储器中采用低字节地址位字地址的存放方式。每当CPU从存储器取出一个字节时,即自动完成(PC)+1—>PC
(1)若PC当前值位240(十进制),要求转移到290,则转移指令的第二第三字节的机器代码是什么?
(2)若PC当前值位240(十进制),要求转移到200,则转移指令的第二第三字节的机器代码是什么?
答案:
例题:7.3
一条双字长直接寻址的子程序调用指令,其第一个字位操作码和寻址特征,第二个字为地址码5000H,假设PC当前值为2000H,SP的内容为0100H,栈顶内容是2746H,存储器按字节编址,而且进栈操作是先执行 (SP)-▲ ——> SP,后存入数据,回答下列几种情况下,PC、SP及栈顶内容各为多少?
(1)CALL指令被读取前。
(2)CALL指令被执行后。
(3)子程序返回后。
答案:
题目:
分析:形式地址A的内容是存储器201单元的内容,也就是300,所以A=300
寻址方式 | 有效地址 EA | 累加器AC的内容 |
---|---|---|
立即寻址 | 300 | 300 |
直接寻址 | 300 | 400 |
间接寻址 | 400 | 700 |
相对寻址 | 500 | 600 |
变址寻址 | 400 | 700 |
基址寻址 | 500 | 600 |
先变址后间址 | 401 | 501 |
先间址后变址 | 500 | 600 |
7.4、指令格式设计
例7.4:
某机字长16位,存储器直接寻址空间为128字,变址时位移量为-64~+63,16个通用寄存器均可作为变址寄存器。设计一套指令系统格式,满足下列寻址类型的要求。
(1)直接寻址的二地址指令3条
(2)变址寻址的一地址指令6条
(3)寄存器寻址的二地址指令8条
(4)直接寻址的一地址指令12条
(5)零地址指令32条
解:
例7.5
设某机配有基址寄存器和变址寄存器,采用一地址格式的指令系统,允许直接和间接寻址,
且指令字长,机器字长和存储字长均为16位。
(1)若采用单字长指令,共能完成105种操作,则指令可直接寻址的范围是多少?一次间接寻址的寻址范围是多少?画出其指令格式并说明各字段的含义。
(2)若存储字长不变,可采用什么方法直接访问容量为16MB的主存?
解:
7.5、RISC技术
RISC主要特点总结
-
选取使用频率较高的一些简单指令以及一些很有用但又不复杂的指令,让复杂指令的功能由使用频率高的简单指令的组合来实现。
-
指令长度固定,指令格式种类少,寻址方式种类少。
-
只有取数/存数指令访问存储器,其余指令的操作都在寄存器内完成。
-
CPU中有多个通用寄存器(比 CISC的多)。
-
采用流水线技术(注意:RISC一定是采用流水线),大部分指令在一个时钟周期内完成。采用超标量和超流水线技术,可使每条指令的平均执行时间小于一个时钟周期
-
控制器采用组合逻辑控制,不用微程序控制。
-
采用优化的编译程序。
CISC主要特点总结
-
指令系统复杂庞大,指令数目一般多达200~300条。
-
指令长度不固定,指令格式种类多,寻址方式种类多。
-
可以访存的指令不受限制(RISC只有取数/存数指令访问存储器)。
-
由于80%的程序使用其20%的指令,因此CISC各指令的使用频率差距太大。
-
各种指令执行时间相差很大,大多数指令需多个时钟周期才能完成。
-
控制器大多数采用微程序控制。
-
难以用优化编译生成高效的目标代码程序。