第七章 指令系统
7.1.1 指令
操作码
扩展操作码 指令字长16位 15位三地址、15位二地址、15位一地址、16位零地址 61条 尽量安排指令使用频度低的占用较长的操作码,可缩短经常使用的指令的译码时间
地址码
四地址指令
A1 第一操作数地址 A2 第二操作数地址 A3 结果地址 A4 下一条指令的地址 (A1)OP(A2)->A3 如果指令字长32位,操作码8位,4个地址字段各占6位,(8+6+6+6+6=32),指令的直接寻址范围是2^6=64 如果地址字段均只是主存地址,完成一次四地址指令,访存4次。取指令x1,取两个操作数x2,存结果x1
三地址指令
去掉A4,后续指令地址可以隐含在程序计数器PC中 如果字长32位,OP8位,三地址各占8位,指令的直接寻址范围2\^8=256(比四地址的直接寻址范围大) 访存4次
二地址指令
中间结果存在CPU寄存器中如ACC,去掉A3 (A1)OP(A2)->A1或(A1)OP(A2)->A2 一条指令3次访存,指令的直接寻址范围是2^12=4K
二地址码根据操作数的物理位置,分为: SS(存储器 - 存储器类型) RS(寄存器 - 存储器类型) RR(寄存器 - 寄存器类型) 存取速度自上往下越来越快。
一地址访存
(ACC)OP(A1)->ACC ACC即存放操作数,也存放中间结果,一条指令2次访存,指令的直接寻址范围是2^24 = 16M
不设地址字段 零地址指令
PUSH、POP操作,操作数地址隐含在堆栈指针SP中
7.1.2 指令字长
Intel8086指令字长可以8、16、24、32、40、48六种
7.2 操作数类型和操作类型
操作类型
- 转移
- 无条件转移 JMP X
- 条件转移 零标志位Z、负标志位N、溢出标志位V、进位标志位C、奇偶标志位P BRO X 表示结果(有符号数)溢出 V=1,则跳转到X BRC Y 表示结果最高位有进位 C=1,则跳转到Y SKP 跳过 205 SKP DZ 206 207 DZ表示若设备的完成触发器D为零,则执行完205后跳到207
- 调用与返回 包括过程调用、系统调用和子程序调用 CALL、RETURN notes 允许子程序嵌套 每个CALL对应一个RETURN CPU记住返回地址 寄存器内 子程序的入口地址内 栈顶内(RETURN后从栈顶取出地址)
- Trap和陷阱指令 Trap指令一般不提供给用户直接使用,作为隐指令,CPU自动产生并执行 也有供用户使用的Trap指令或访管指令,Intel8086的软中断INT TYPE(TYPE是8位常数,表示中断类型)
7.3 寻址方式
指令寻址
- 顺序寻址
- 程序计数器PC+1
- 跳跃寻址
- 7.3.2
数据寻址
- 指令的地址码,不代表操作数的真实地址,称为形式地址,记A,寻址特征为…
- 操作数的真实地址为有效地址,记EA
- 分类(10种)
- 立即寻址
- 操作数设在指令字内,A即操作数本身,称立即数
- 访存一次:取指令1次访存+执行指令0次访存
- 数据补码形式存放
- 取出指令就可获得操作数,减少访存次数,但A的位数限制了立即数
- 寻址特征位:#
- 例:mov R0,#10H
- 把二进制数10直接取出到R0中
- 直接寻址
- 形式地址A就是操作数的真实地址EA,EA=A
- 只一次访存,但A位数限制,且必须修改A的值,才能修改操作数的地址
- 寻址特征位:无
- 例:mov R0,10H
- 把内存编号为 10 里的内容取出到R0中
- 隐含寻址
- 操作数地址隐含在操作码或某个寄存器中
- 少了一个地址,有利于缩短指令字长
- Intel8086的乘法指令,被乘数存在AX(16位)或AL(8位)中
- 字符串传送指令MOVS,源操作数存在SI寄存器中,目的操作数存在DI寄存器中
- 间接寻址
- A指出操作数有效地址所在的存储单元,EA=(A)
- 一次寻址和两次寻址
- 优点
- 扩大了寻址范围
- 存储字长可与指令字长相等,若均为16位,A为8位,直接寻址范围就是2\^8,一次间址的寻址范围2\^16,多次寻址时,需要存储字的首位来标志间接寻址是否结束,1继续0结束,0时该存储字即为EA,寻址范围2\^15
- 方便完成子程序的返回
- 寄存器寻址
- EA=Ri
- 访存1次:取指令1次+执行指令0次(执行阶段不访问主存,只访问寄存器)
- 寄存器间接寻址
- 寄存器Ri中给的不是一个操作数,是操作数所在主存单元的地址,EA=(Ri)
- 两次访存:取指令1次+执行指令1次
- 基址寻址(-偏移寻址)
- 以程序的起始存放地址作为“起点”,EA=(BR)+A
- os中的重定位寄存器就是基址寄存器
- 面向操作系统
- 变址寻址(-偏移寻址)
- 程序自己决定从哪里作为起点,EA=(IX)+A
- IX为变址寄存器,也可用通用寄存器作为变址寄存器
- 面向用户
- 相对寻址(-偏移寻址)
- 以程序计数器PC所指地址作为“起点”,EA=(PC)+A
- 堆栈寻址
- 操作数存放在堆栈中,隐含使用堆栈指针(SP)作为操作数地址。
- 立即寻址
7.5 RISC
- RISC精简指令系统计算机
- 选取使用频率较高的简单指令,并能组合成复杂的指令
- 指令长度固定,指令格式种类少,寻址方式种类少
- 只有load/store(存/取数操作)。其余指令的操作都在寄存器之间完成。
- CPU有多个通用寄存器(比CISC多很多)
- 采用流水线技术,一般在一个时钟周期内完成。
- 功耗小,成本低
- 代表:ARM指令构架,MIP指令构架
- CISC复杂指令系统计算机
- 指令系统复杂庞大
- 指令长度不固定,指令格式多,寻址方式多
- 控制器大多采用微程序控制
- 代表:Intel公司的x86系列CPU是典型的CISC体系结构
7.5.2 RISC的主要特征
执行程序所需时间P=I*C*T
I是机器指令数,C是执行每条机器指令的平均机器周期,T是每个机器周期的执行时间 RISC指令简单,所以I比CISC多 但RISC大多指令一个机器周期就能完成,所以C比CISC小 RISC简单,所以完成一个操作所经过的数据通路较短,T值大大下降
RISC II指令
39条指令 寄存器-寄存器操作 12条 取/存数指令 16条 控制转移指令 6条 其他 5条 约定R0寄存器内容恒为0,加法指令可以替代寄存器间的传送指令 (Rs)+(R0) -> Rd 替代了 Rs -> Rd 加法指令替代清楚寄存器指令 (R0)+(R0) -> Rd 替代了 0 -> Rd 减法指令可替代取负数指令 (R0)-(Rs) -> Rd 替代了Rd寄存器内容取负
(Rs)+1 -> Rd 替代寄存器加一减一 (Rs)异或(1) -> Rd 替代 Rs求反码存到Rd 异或指令可替代求反码指令 1还是-1???
指令格式
RISC II指令格式有两种,短立即数格式和长立即数格式 指令字长固定为32位,指令中每个字段都有固定位置 31-25位 操作码OP 18-14位 rs1,存一个操作数 13位为0,另一个操作数在寄存器中(0-4位) 13位为1,另一个操作数是13位的立即数imm13(0-12位) 运算结果存在DEST寄存器中(23-19位) DEST字段在 条件转移指令 中,22-19位作为转移条件,第23位无用 第24位,S表示是否根据运算结果置状态位,S=1表示置状态位 RISC II机有4个状态位,零标志位Z,负标志位N,溢出标志位V,进位标志位C
长立即数指令格式主要用于 相对转移指令
RISC指令系统的扩充
浮点指令 特权指令 读后置数指令 读-修改-写,用于寄存器与存储单元交换数据等 一些简单的专用指令
7.5.3 RISC和CISC的比较
RISC的优点
充分利用VLSI芯片的面积 RISC采用组合逻辑控制,其硬布线扩及只占CPU芯片面积的10%,用于增加大量的通用寄存器 提高计算机运算速度 RISC的指令数、寻址方式和指令格式种类较少,指令编码有规律 RISC的通用寄存器多,减少了访存次数 RISC采用组合逻辑控制,比微程序控制的CISC延迟小,缩短了CPU的周期 RISC精简指令系统,适合于流水线工作,大多数指令在一个时钟周期内完成 便于设计、降低成本、提高可靠性 有效支持高级语言程序