7.1 机器指令
一、指令的一般格式
这只是一种逻辑的表达方式,实际上位置不是这么严格区分的。
操作码字段 | 地址码字段 |
1.操作码:反映机器做什么操作、对什么数据做操作等
(1)长度固定
用于指令字长较长的情况:RISC
(2)长度可变
操作码分散在指令字的不同字段中。
(3)扩展操作码技术
操作码的位数随地址数的减少而增加。可以采用保留码点来指明扩展操作码技术。
除非地址为零,否则操作码不可以全为1!扩展原则:短操作码一定不是长操作码的前缀。
三地址指令操作码每减少一种最多可多构成24种二地址指令。
二地址指令指令操作码每减少一种操作码最多可构成24种一地址指令。
一般来说,高频指令用短操作码表示,不常出现的用长操作码表示。
2.地址码
(1)四地址
OP | A1 | A2 | A3 | A4 |
说明:
A1是第一操作数地址;A2是第二操作数地址;A3是结果的地址;A4是下一条指令的地址。
假设当前操作是(A1)OP(A2)àA3,取指令访存1次,然后根据地址取出两个操作数访存2次,最后将结果存入A3的地址访存1次,一共访存4次。假设指令字长为32位,操作码为8位,每个地址码长度就为6位,那么每个地址码寻址范围为64,可访问内存空间非常小,这样的地址几乎是不可用的。
实际上,我们可以用PC代替A4,那么就变成了3地址了。
(2)三地址
OP | A1 | A2 | A3 |
同样执行上述操作,还是4次访存,但是寻址范围变为了256。
(3)二地址
OP | A1 | A2 |
若结果存于ACC,则只需要3次访存,若结果存于A1或者A2则依旧是4次访存。寻址范围变为了212=4K。
(4)一地址
OP | A1 |
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.数据传送
源 | 寄存器 | 寄存器 | 存储器 | 存储器 |
目的 | 寄存器 | 存储器 | 寄存器 | 存储器 |
例子 | MOVE | STORE/MOVE/PUSH | LOAD/MOVE/POP | MOVE |
还有一种是置“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。