7.1 机器指令

一、指令的一般格式

这只是一种逻辑的表达方式,实际上位置不是这么严格区分的。

操作码字段地址码字段

1.操作码:反映机器做什么操作、对什么数据做操作等

(1)长度固定

用于指令字长较长的情况:RISC

(2)长度可变

操作码分散在指令字不同字段中。

(3)扩展操作码技术

操作码的位数随地址数的减少而增加。可以采用保留码点来指明扩展操作码技术

除非地址为零,否则操作码不可以全为1!扩展原则:短操作码一定不是长操作码的前缀

三地址指令操作码每减少一种最多可多构成24种二地址指令。

二地址指令指令操作码每减少一种操作码最多可构成24种一地址指令。

一般来说,高频指令用短操作码表示,不常出现的用长操作码表示。

2.地址码

(1)四地址

OPA1A2A3A4

说明:

A1是第一操作数地址;A2是第二操作数地址;A3是结果的地址;A4是下一条指令的地址。

假设当前操作是(A1)OP(A2)àA3,取指令访存1次,然后根据地址取出两个操作数访存2次,最后将结果存入A3的地址访存1次,一共访存4。假设指令字长为32位,操作码为8位,每个地址码长度就为6位,那么每个地址码寻址范围为64,可访问内存空间非常小,这样的地址几乎是不可用的。

实际上,我们可以用PC代替A4,那么就变成了3地址了。

(2)三地址

OPA1A2A3

同样执行上述操作,还是4次访存,但是寻址范围变为了256

(3)二地址

OPA1A2

若结果存于ACC,则只需要3次访存,若结果存于A1或者A2则依旧是4次访存。寻址范围变为了212=4K

(4)一地址

OPA1

2次访存,寻址范围为224=16M

(5)零地址。无地址码

二、指令字长

指令字长决定于:操作码的长度操作数地址的长度操作数地址的个数

1.指令字长固定:指令字长=存储字长。

2.指令字长可变:按字节的倍数变化。

小结

当用一些硬件资源代替指令字长中的地址码字段后:

(1)可扩大指令的寻址范围;

(2)可缩短指令字长;

(3)可减少访存次数。

当指令的地址字段为寄存器时:

(1)三地址:OP R1 R2 R3;

(2)二地址:OP R1 R2;

(3)一地址:OP R1。

这种方式可缩短指令字长,指令执行阶段不访存

7.2 操作数类型和操作类型

 一、操作数类型

(1)地址:无符号整数(绝对寻址)、有符号数(相对寻址)

(2)数字:定点数、浮点数、十进制数

(3)字符:ASCII

(4)逻辑数:逻辑运算

二、数据在存储器中的存储方式

1.字节编址:数据在存储器中的存储方式(存储字长64位,机器字长32位)

a.从任意位置开始存储

图2.1 任意位置存储

优点:不浪费存储资源;缺点:除了访问一个字节之外,访问其它任何类型的数据都可能话费两个存储周期的时间。读写控制比较复杂。

b.从一个存储字的起始位置开始访问

图2.2 从一个存储字的起始位置开始访问

优点:无论访问何种类型的数据,在一个周期均可完成,读写控制简单。但是缺点是浪费了宝贵的存储资源。

c.边界对准方式:从地址的整数倍位置开始访问

图2.3 边界对准方式

数据存储的起始地址是数据长度(按照编址单位进行计算)的整数倍。本方案是前两个方案的折中,在一个周期内可以完成存储访问,空间浪费也不太严重。

三、操作类型

1.数据传送

寄存器寄存器存储器存储器
目的寄存器存储器寄存器存储器
例子MOVESTORE/MOVE/PUSHLOAD/MOVE/POPMOVE

还有一种是置“1”,清“0”。

2.算术逻辑操作

加、减、乘、除、增1、减1、求补、浮点运算、十进制运算、与、或、非、异或。位操作、位测试、位清除、位求反。

3.移位操作

算术移位、逻辑移位、循环移位(带进位和不带进位)

4.转移

(1)无条件转移:JMP;

(2)条件转移:结果为0转:JZ,结果为溢出转:JO,结果又进位转:JC,跳过一条指令:SKP;

(3)调用和返回:CALL/RETURN;

(4)陷阱(Trap)与陷阱指令

意外事故的中断:

①一般不提供给用户直接使用。在出现事故时,由CPU自动产生并执行(指令)。

②设置供用户使用的陷阱指令。

如8086的INT TYPE 软中断。提供给用户使用的陷阱指令,完成系统调试。

5.输入输出

入:端口中的内容àCPU的寄存器。如:IN AL, n。

出:CPU的寄存器à端口中的内容。如:OUT n, AL。