7.1 机器指令 7.2 操作数类型和操作类型 7.3 寻址方式 7.4 指令格式举例 7.5 RISC 技术
7.1 机 器 指 令 一、指令的一般格式 操作码字段 地址码字段 1. 操作码 反映机器做什么操作 (1) 长度固定 7.1 机 器 指 令 一、指令的一般格式 操作码字段 地址码字段 1. 操作码 反映机器做什么操作 (1) 长度固定 用于指令字长较长的情况 ,RISC 如 IBM 370 操作码 8 位 (2) 长度可变 操作码分散在指令字的不同字段中
(3) 扩展操作码技术 操作码的位数随地址数的减少而增加 OP A1 A2 A3 0000 0001 1110 … A1 A2 A3 4 位操作码 15条三地址指令 A2 … A3 1111 0000 0001 1110 8 位操作码 15条二地址指令 1111 … A3 0000 0001 1110 12 位操作码 15条一地址指令 1111 … 0000 0001 16 位操作码 16条零地址指令
若 A3 用 A1 或 A2 代替 2. 地址码 OP A1 A2 A3 A4 设指令字长为 32 位 操作码固定为 8 位 4 次访存 8 6 6 6 6 (1) 四地址 OP A1 A2 A3 A4 设指令字长为 32 位 操作码固定为 8 位 A1 第一操作数地址 A2 第二操作数地址 4 次访存 A3 结果的地址 寻址范围 26 = 64 A4 下一条指令地址 (A1) OP (A2) A3 若 PC 代替 A4 (2) 三地址 8 8 8 8 OP A1 A2 A3 4 次访存 寻址范围 28 = 256 (A1) OP (A2) A3 若 A3 用 A1 或 A2 代替
(A1) OP (A2) A1 或 (A1) OP (A2) A2 若结果存于 ACC 3次访存 (ACC) OP (A1) ACC (3) 二地址 8 12 12 OP A1 A2 (A1) OP (A2) A1 4 次访存 或 (A1) OP (A2) A2 寻址范围 212 = 4 K 若结果存于 ACC 3次访存 若ACC 代替 A1(或A2) (4) 一地址 8 24 OP A1 2 次访存 (ACC) OP (A1) ACC 寻址范围 224 = 16 M (5) 零地址 无地址码
二、指令字长 操作码的长度 操作数地址的长度 指令字长决定于 操作数地址的个数 1. 指令字长 固定 指令字长 = 存储字长 2. 指令字长 可变 按字节的倍数变化
小结 当用一些硬件资源代替指令字中的地址码字段后 可扩大指令的寻址范围 可缩短指令字长 可减少访存次数 当指令的地址字段为寄存器时 三地址 OP R1, R2, R3 二地址 OP R1, R2 一地址 OP R1 可缩短指令字长 指令执行阶段不访存
3 7 6 2 1 5 4 4 5 1 2 6 7 3 7.2 操作数类型和操作种类 一、操作数类型 地址 数字 字符 逻辑数 无符号整数 7.2 操作数类型和操作种类 一、操作数类型 地址 数字 字符 逻辑数 无符号整数 定点数、浮点数、十进制数 ASCII 逻辑运算 二、数据在存储器中的存放方式 3 7 6 2 1 5 4 字地址 低字节 4 5 1 2 6 7 3 字地址 低字节 字地址 为 低字节 地址 字地址 为 高字节 地址
存储器中的数据存放(存储字长为 32 位) 边界对准 4 8 12 16 20 24 28 32 36 边界未对准 4 8 地址(十进制) 4 8 12 16 20 24 28 32 36 双字 双字(地址32) 双字(地址24) 半字(地址20) 半字(地址22) 半字(地址16) 半字(地址18) 字节(地址8) 字节(地址9) 字节(地址10) 字节(地址11) 字(地址 4) 字(地址 0) 字节(地址14) 字节(地址15) 字节(地址13) 字节(地址12) 边界对准 ▲ ▲ 地址(十进制) 4 8 字节( 地址7) 字节( 地址6) 字( 地址2) 半字( 地址10) 半字( 地址8) 半字( 地址0) 字( 地址4) 边界未对准
三、操作类型 1. 数据传送 源 目的 寄存器 寄存器 存储器 存储器 寄存器 存储器 寄存器 存储器 例如 MOVE STORE LOAD MOVE MOVE MOVE 置“1”,清“0” PUSH POP 2. 算术逻辑操作 加、减、乘、除、增 1、减 1、求补、浮点运算、十进制运算 与、或、非、异或、位操作、位测试、位清除、位求反 如 8086 ADD SUB MUL DIV INC DEC CMP NEG AAA AAS AAM AAD AND OR NOT XOR TEST
300 … 305 306 307 SKP DZ D = 0 则跳 3. 移位操作 算术移位 逻辑移位 循环移位(带进位和不带进位) 4. 转移 (1) 无条件转移 JMP (2) 条件转移 结果为零转 (Z = 1) JZ 如 完成触发器 300 … 305 306 307 SKP DZ D = 0 则跳 结果溢出转 (O = 1)JO 结果有进位转(C = 1)JC 跳过一条指令 SKP
(3) 调用和返回 ... ... … ... … ... 主程序 地址 2000 2100 2101 子程序SUB1 2400 2500 2501 2560 2561 2700 主存空间分配 程序执行流程 子程序SUB2 ... (3) 调用和返回 CALL SUB1 ... … CALL SUB2 ... CALL SUB2 … RETURN ... RETURN
入 端口地址 CPU 的寄存器 如 IN AL, n IN AX, n IN AL, DX IN AX, DX (4) 陷阱(Trap)与陷阱指令 意外事故的中断 一般不提供给用户直接使用 在出现事故时,由 CPU 自动产生并执行(隐指令) 设置供用户使用的陷阱指令 如 8086 INT TYPE 软中断 提供给用户使用的陷阱指令,完成系统调用 5. 输入输出 入 端口地址 CPU 的寄存器 如 IN AL, n IN AX, n IN AL, DX IN AX, DX 出 CPU 的寄存器 端口地址 如 OUT n, AL OUT n, AX OUT DX, AL OUT DX, AX
7.3 寻 址 方 式 寻址方式 确定 本条指令 的 操作数地址 下一条 欲执行 指令 的 指令地址 指令寻址 数据寻址 寻址方式
( PC ) + 1 PC 7.3 寻 址 方 式 1 2 3 7 8 一、指令寻址 顺序 由转移指令指出 跳跃 LDA 1000 7.3 寻 址 方 式 一、指令寻址 ( PC ) + 1 PC 顺序 由转移指令指出 跳跃 LDA 1000 ADD 1001 DEC 1200 JMP 7 LDA 2000 SUB 2001 INC STA 2500 LDA 1100 ... 1 2 3 4 5 6 7 8 9 PC +1 指令地址寻址方式 指令地址 指令 顺序寻址 1 顺序寻址 2 顺序寻址 3 跳跃寻址 7 顺序寻址 8
二、数据寻址 形式地址 A 操作码 寻址特征 指令字中的地址 形式地址 有效地址 操作数的真实地址 约定 指令字长 = 存储字长 = 机器字长 1. 立即寻址 形式地址 A 就是操作数 OP # A 立即寻址特征 立即数 可正可负 补码 指令执行阶段不访存 A 的位数限制了立即数的范围
2. 直接寻址 EA = A 有效地址由形式地址直接给出 寻址特征 操作数 主存 LDA A A ACC 执行阶段访问一次存储器 A 的位数决定了该指令操作数的寻址范围 操作数的地址不易修改(必须修改A)
操作数地址隐含在操作码中 3. 隐含寻址 寻址特征 操作数 主存 ADD A ACC A 另一个操作数 隐含在 ACC 中 ALU 暂存 如 8086 MUL 指令 被乘数隐含在 AX(16位)或 AL(8位)中 MOVS 指令 源操作数的地址隐含在 SI 中 目的操作数的地址隐含在 DI 中 指令字中少了一个地址字段,可缩短指令字长
4. 间接寻址 EA =(A) 有效地址由形式地址间接提供 寻址特征 寻址特征 EA 主存 A1 主存 EA 1 OP A OP A A A EA 操作数 一次间址 多次间址 A1 操作数 EA 执行指令阶段 2 次访存 可扩大寻址范围 多次访存 便于编制程序
… … … …… … … …… … …… … JMP @ A (A) = 81 (A) = 202 80 转 子程序 81 201 间接寻址编程举例 子程序 主程序 … … … …… … … …… 80 81 201 202 转 子程序 … …… 转 子程序 @ 间址特征 … JMP @ A (A) = 81 (A) = 202
EA = Ri 有效地址即为寄存器编号 5. 寄存器寻址 寻址特征 OP Ri 操作数 … R0 Ri Rn 寄存器 执行阶段不访存,只访问寄存器,执行速度快 寄存器个数有限,可缩短指令字长
EA = ( Ri ) 有效地址在寄存器中 6. 寄存器间接寻址 寻址特征 操作数 主存 OP Ri 地址 … R0 Ri Rn 寄存器 有效地址在寄存器中, 操作数在存储器中,执行阶段访存 便于编制循环程序
7. 基址寻址 (1) 采用专用寄存器作基址寄存器 EA = ( BR ) + A BR 为基址寄存器 寻址特征 OP A 操作数 主存 ALU BR 可扩大寻址范围 便于程序搬家 BR 内容由操作系统或管理程序确定 在程序的执行过程中 BR 内容不变,形式地址 A 可变
… (2) 采用通用寄存器作基址寄存器 寻址特征 OP R0 A R0 作基址寄存器 操作数 主存 通用寄存器 R0 Rn-1 R1 ALU 由用户指定哪个通用寄存器作为基址寄存器 基址寄存器的内容由操作系统确定 在程序的执行过程中 R0 内容不变,形式地址 A 可变
8. 变址寻址 EA = ( IX ) +A IX 为变址寄存器(专用) 通用寄存器也可以作为变址寄存器 寻址特征 OP A 操作数 主存 ALU IX 可扩大寻址范围 IX 的内容由用户给定 在程序的执行过程中 IX 内容可变,形式地址 A 不变 便于处理数组问题
…… 例 设数据块首地址为 D,求 N 个数的平均值 直接寻址 变址寻址 LDA D LDA # 0 ADD D + 1 LDX # 0 ADD X, D M ADD D + 2 (X) +1 X INX …… CPX # N (X) 和 #N 比较 ADD D + ( N -1 ) BNE M 结果不为零则转 DIV # N DIV # N STA ANS STA ANS 共 N + 2 条指令 共 8 条指令
EA = ( PC ) + A A 是相对于当前指令的位移量(可正可负,补码) 9. 相对寻址 寻址特征 OP A …… 主存 1000 A OP 1000 PC ALU 相对距离 A 操作数 A 的位数决定操作数的寻址范围 程序浮动 广泛用于转移指令
* – 3 * * (1) 相对寻址举例 LDA # 0 LDX # 0 ADD X, D INX CPX # N BNE M DIV # N STA ANS M M+1 M+2 M+3 相对寻址特征 * – 3 * M 随程序所在存储空间的位置不同而不同 而指令 BNE 与指令 ADD X, D 相对位移量不变 – 3 * 指令 BNE 操作数的有效地址为 – 3 * EA = ( M+3 ) – 3 = M
(2) 按字节寻址的相对寻址举例 OP 位移量 2000 H 2008 H 8 OP 06 H 2000 H 2008 H 8 JMP * + 8 二字节指令 设 当前指令地址 PC = 2000H 转移后的目的地址为 2008H 因为 取出 JMP * + 8 后 PC = 2002H 故 JMP * + 8 指令 的第二字节为 2008H - 2002H = 6H
10. 堆栈寻址 … … (1) 堆栈的特点 多个寄存器 硬堆栈 软堆栈 堆栈 指定的存储空间 栈顶地址 由 SP 指出 先进后出(一个入出口) 进栈 (SP)– 1 SP 出栈 (SP)+ 1 SP – 1 +1 栈顶 栈底 2000 H SP … 1FFF H … 1FFF H SP 1FFFH 栈顶 栈底 2000 H 进栈 出栈 1FFFH 栈顶 2000 H 栈顶
(2) 堆栈寻址举例 PUSH A 后 PUSH A 前 POP A 前 POP A 后 15 200H ACC SP X 栈顶 栈底 主存 1FFH ACC SP 栈顶 200H 栈底 主存 X PUSH A 后 PUSH A 前 Y 1FFH ACC SP X 栈顶 200H 栈底 主存 15 15 200H ACC SP 栈顶 栈底 主存 X POP A 前 POP A 后
① 按 字 编址 进栈 (SP)– 1 SP 出栈 (SP)+ 1 SP ② 按 字节 编址 存储字长 16 位 进栈 (SP)– 2 SP 存储字长 32 位 进栈 (SP)– 4 SP 出栈 (SP)+ 4 SP
7.4 指令格式举例 一、设计指令格式时应考虑的各种因素 1. 指令系统的 兼容性 (向上兼容) 2. 其他因素 操作类型 7.4 指令格式举例 一、设计指令格式时应考虑的各种因素 1. 指令系统的 兼容性 (向上兼容) 2. 其他因素 操作类型 包括指令个数及操作的难易程度 数据类型 指令字长、操作码位数 指令格式 寻址方式、是否采用扩展操作码 地址码位数、地址个数 寻址方式 寄存器个数
1. PDP – 8 指令字长固定 12 位 二、指令格式举例 操作码 间 页 地址码 访存类指令 2 3 5 4 11 I/O 类指令 操作码 间 页 地址码 访存类指令 2 3 5 4 11 I/O 类指令 1 1 0 设备 操作码 2 3 11 9 8 寄存器类指令 1 1 1 辅助操作码 2 3 11
零地址 (16 位) 一地址 (16 位) 二地址 R R (16 位) 二地址 R M (32 位) 二地址 M M (48 位) 2. PDP – 11 指令字长有 16 位、32 位、48 位三种 16 OP – CODE 零地址 (16 位) 扩展操作码技术 10 6 目的地址 OP – CODE 一地址 (16 位) 目的地址 4 6 6 源地址 OP 二地址 R R (16 位) OP 10 6 16 目的地址 存储器地址 二地址 R M (32 位) 源地址 OP 4 6 6 16 16 目的地址 存储器地址1 存储器地址2 二地址 M M (48 位)
二地址 R R 基址加变址寻址 二地址 R M 三地址 R M 基址寻址 基址寻址 立即数 M 二地址 M M 基址寻址 3. IBM 360 OP R1 R2 RR 格式 8 4 4 二地址 R R OP R1 X B D RX 格式 8 4 4 4 12 基址加变址寻址 二地址 R M OP R1 R3 B D RS 格式 8 4 4 4 12 三地址 R M 基址寻址 OP B D I SI 格式 8 8 4 12 基址寻址 立即数 M OP B1 D1 L B2 D2 SS 格式 8 8 4 12 4 12 二地址 M M 基址寻址
4. Intel 8086 (1) 指令字长 1 ~ 6 个字节 INC AX 1 字节 MOV WORD PTR[0204], 0138H 6 字节 (2) 地址格式 零地址 NOP 1 字节 一地址 CALL 5 字节 段间调用 CALL 段内调用 3 字节 二地址 ADD AX,BX 2 字节 寄存器 — 寄存器 ADD AX,3048H 3 字节 寄存器 — 立即数 ADD AX,[3048H] 4 字节 寄存器 — 存储器
7.5 RISC 技 术 一、RISC 的产生和发展 RISC(Reduced Instruction Set Computer) CISC(Complex Instruction Set Computer) —— RISC技术 80 — 20 规律 典型程序中 80% 的语句仅仅使 用处理机中 20% 的指令 执行频度高的简单指令,因复杂指令 的存在,执行速度无法提高 能否用 20% 的简单指令组合不常用的 80% 的指令功能 ?
二、RISC 的主要特征 选用使用频率较高的一些 简单指令 复杂指令的功能由简单指令来组合 指令 长度固定 只有 LOAD / STORE 指令访存 流水技术 一个时钟周期 内完成一条指令 组合逻辑 实现控制器 多个 通用 寄存器 采用 优化 的 编译 程序