数电第七章 指令系统
数字逻辑第七章 指令系统
概述与指令系统设计
指令执行周期:
(1)取指令(IF):指令地址、指令长度(定长/变长)
(2)指令译码(ID),确定做何操作:指令格式、操作数编码、操作数类型
(3)取数,计算操作数地址并取操作数:地址码、寻址方式、操作数格式与存放
(4)执行(EX),进行相应计算、并得到标志位:操作类型、标志或条件码
(5)存数(RS),将计算结果保存到目的地:结果数据位置(目的操作数地址)
(6)下一步,计算下一条指令地址(与取指令同时进行):下条指令地址(顺序/转移)
一条指令必须明显或隐含包含:
(1)操作码(指定操作类型,操作码长度固定/可变)
(2)源操作数参照(一个或多个源操作数所在的地址)(操作数来源:主(虚)存/寄存器/I/O端口/指令本身)
(3)结果值参照:产生结果(目的操作数)存于何处
(4)下一条指令地址:下条指令存于何处?(改变顺序由指令给出)
寻址方式
| 方式 | 操作数 | 优点 | 缺点 | 操作数位置 |
|---|---|---|---|---|
| 立即数 | imm | 指令执行快 | 操作数值域有限 | 指令 |
| 直接 | addr | 地址计算简单 | 地址范围有限 | 内存 |
| 间接 | (addr) | 地址范围大 | 多次存储器访问 | 内存 |
| 寄存器直接 | Reg | 指令执行快,指令短 | 地址范围有限 | 寄存器 |
| 寄存器间接 | (Reg) | 地址范围大 | 额外存储器访问 | 内存 |
| 偏移 | A+(Reg) | 灵活 | 复杂 | 内存 |
| 栈 | 栈顶 | 指令短 | 应用有限 | 内存 |
操作码的两种编码方式:定长操作码法,\(n\)位可表\(2^n\)种指令(性能更重要时,便于快速访问和译码)、扩展操作码法(代码长度更重要时,使机器代码更紧凑)
扩展操作数编码示例:
某指令系统指令字16位,每个地址码6位。若二地址指令\(k_2\)条,一地址指令\(k_1\)条,则剩下零地址指令最多有多少条?
\(((16-k_2)\cdot 2^6-k_1)\cdot 2^6\)
CISC与RISC:CISC(指令编码较为灵活)、RISC(指令简化,除Load、Store可访问存储器外、其余指令只访问寄存器)
异常与中断
内部异常包括:
(1)硬故障中断:如电源掉电、硬件线路故障。
(2)程序性中断:执行某指令时发生的例外事件:溢出、缺页、越界、越权、越级、非法指令、除数为0、堆/栈溢出、访问超时、断点设置、单步、系统调用。
发现立刻处理
外部中断包括:
在CPU外部发生的特殊事件,通过“中断请求”信号向CPU请求处理。如实时钟、控制台、打印机缺纸、外设准备好、采样计时到、DMA传输结束等。
每个指令执行结束,CPU查询有无中断请求,有则响应中断
软件识别:设置异常原因寄存器记录异常原因,操作系统使用一个统一的异常处理程序,该程序按优先级顺序查询异常状态寄存器,识别出异常事件。
硬件识别:每个异常和中断都有一个异常/中断号,根据此号,到中断向量表(中断描述符表)中读取对应的具体的中断服务程序的入口地址。