指令系统 吴非 2012-10. 本章主要内容 指令系统 指令格式 寻址方式 典型指令系统 MIPS指令系统 RISC 与 CISC -2-

Slides:



Advertisements
Similar presentations
程序的执行 程序执行和指令执行概述 数据通路基本结构和工作原理 流水线方式下指令的执行
Advertisements

第 2 章 中央處理單元.
第五章 中央处理器 5.1 CPU的组成和功能 5.2 指令周期 5.3 时序产生器和控制方式 5.4 微程序控制器 5.5 微程序设计技术
信息技术:硬件、软件、网络、数据库 计算机技术、多媒体技术、压缩技术...
2017年3月5日 单片机原理与应用 背景知识调查.
第三章 计算机核心部件及其 工作原理.
第5章 指令系统 5.1 指令系统的发展 5.2 指令格式与数据表示 5.3寻址方式(编址方式) 5.4 指令类型与指令系统的兼容性
第二章 指令系统.
大连理工大学软件学院 软件工程系 赖晓晨 计算机组成与结构 大连理工大学软件学院 软件工程系 赖晓晨
1.1 计算机系统简介 1.2 计算机的基本组成 1.3 计算机硬件的主要技术指标 1.4 本书结构.
第七章 控制器 7.1 控制器的组成及指令的执行 7.2 控制方式和时序的产生 7.3 微程序控制器 7.4 微程序控制器及其微程序设计举例
8051 指令.
第 2 章 中央處理單元.
微处理器设计1 刘鹏 College of ISEE Zhejiang University
Ch5: Instruction Set 指令系统
第三章 CPU子系统 西南石油大学计算机科学学院 主讲教师 杨 梅 联系电话:
第4章 处理器(CPU) 4.1 引言 4.2 逻辑设计的一般方法 4.3 建立数据通路 4.4 一个简单的实现机制 4.5 多周期实现机制.
逆向工程-汇编语言
第四章 典型CPU及指令系统举例.
第2章 汇编语言与汇编程序 ——8086/8088指令系统 mov ax,12h call display Jmp 1234h.
指令集架構 計算機也跟人類一樣,需要提供一套完整的語言讓人們跟它充分溝通,以完成正確的計算工作。
5 Computer Organization (計算機組織).
第2章 计算机指令集结构 曲冠南
第3章 寻址方式 罗文坚 中国科大 计算机学院
嵌入式微处理器系统 第二章 处理器技术(1) 北京大学软件与微电子学院.
第3章 8086/8088指令系统 mov ax,12h call display Jmp 1234h.
走进编程 程序的顺序结构(二).
7.1 机器指令 7.2 操作数类型和操作类型 7.3 寻址方式 7.4 指令格式举例 7.5 RISC 技术.
微机原理与接口技术 ——80x86微处理器 西安邮电大学 计算机学院 范琳.
第一章 8086程序设计 第二章 MCS-51程序设计 第三章 微机基本系统的设计 第四章 存贮器与接口 第五章 并行接口
汇编语言程序设计课程设计 第二次实验 DEBUG基本命令与算术运算指令
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
计算机原理及系统结构 第十八讲 主讲教师:赵宏伟                 学时:64.
8086 指令系统特点 可变长指令:指令格式比较复杂。
第3章 微型计算机输入输出接口 3.1 输入/输出接口 3.2 输入输出数据传输的控制方式 3.3 开关量输入输出接口 欢迎辞.
computer organization principle
1.3 微型计算机的结构和工作原理.
第二章 Java语言基础.
逆向工程-汇编语言
CPU结构和功能.
第3章 MCS-51单片机指令系统 3.1 指令概述 3.2 寻址方式 3.3 MCS-51系列单片机的指令系统.
Instructions: Language of the Machine
第二章 80x86计算机组织 x86微处理器 2.2 基于微处理器的计算机系统构成 2.3 中央处理机 2.4 存储器
教师:王晓甜 8086CPU 指令系统 教师:王晓甜
CISC vs. RISC 複雜指令集電腦(Complex Instruction Set Computer: CISC)
C语言程序设计 主讲教师:陆幼利.
得技通电子 问题 1.0 、选择题:本大题共15个小题,每小题1分,共15分,在每小题给出的四个选项中,只有一项符合题目要求,把所选项前的字母填在括号内。
第3章 指令系统和寻址方式 3.1指令系统概述 /8086CPU的寻址方式 3.3 指令的机器码表示方法(略)
第九章 BIOS和DOS中断 在存储器系统中,从地址0FE000H开始的8K ROM(只读存储器)中装有BIOS(Basic Iuput /output System)例行程序。驻留在ROM中的BIOS给PC系列的不同微处理器提供了兼容的系统加电自检,引导装入,主要I/O设备的处理程序以及接口控制等功能模块来处理所有的系统中断。使用BIOS功能调用,给程序员编程带来很大方便,程序员不必了解硬件操作的具体细节,直接用指令设置参数,然后中断调用BIOS中的子功能,所以利用BIOS功能编写的程序简洁,可读性好,
CPU中的专用寄存器(SFR) 一、累加器Acc 二、通用寄存器B 三、程序计数器PC 四、堆栈指针SP 五、数据指针DPTR
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月13日.
第二章 补充知识 2.1 总线和三态门 一、总线(BUS) 三总线结构 数据总线DB(Data Bus)
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
開放電腦計劃 報告人:陳鍾誠 2011 年 8 月 20 日 台灣開源人年會 COSCUP 2011 – 中研院
第4章 Excel电子表格制作软件 4.4 函数(一).
实验三 16位算术逻辑运算实验 不带进位控制的算术运算 置AR=1: 设置开关CN 1 不带进位 0 带进位运算;
本节内容 内存复制指令 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
任务五 学习、应用控制转移类指令 单片机应用技术 认知1 掌握无条件转移指令格式及应用
College of Computer Science & Technology
微机原理与接口技术 ——8086微处理器 西安邮电大学 计算机学院 范琳.
单片机应用技术 项目一 循环彩灯装置 第5讲 MCS-51单片机指令系统及指令格式 《单片机应用技术》精品课程组 湖北职业技术学院机电工程系.
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
3. 逻辑运算指令 A、简单逻辑操作指令 CLR A. (不影响CY、AC、 OV标志) CPL A
微机原理与接口技术 西安邮电大学计算机学院 宁晓菊.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
第二章 8086系统结构 /8086的存储器组织 的系统配置及引脚功能 CPU时序
第4章 指 令 系 统 4.1 指令系统的发展与性能要求 4.2 指令格式 4.3 指令和数据的寻址方式 4.4 典型指令
第三章 CPU子系统 西南石油大学计算机科学学院 主讲教师 杨 梅 联系电话:
第三章 8086的指令系统 8086指令特点 8086的寻址方式 8086的指令格式及数据类型 8086的指令集.
第5章 中 央 处 理 器 5.1 CPU的功能和组成 5.2 指令周期 5.3 时序产生器和控制方式 5.4 微程序控制器
Presentation transcript:

指令系统 吴非

本章主要内容 指令系统 指令格式 寻址方式 典型指令系统 MIPS指令系统 RISC 与 CISC -2-

计算机指令系统特性 完备性:指令丰富,功能齐全,使用方便。 有效性:程序占空间小,执行速度快。 规整性:  对称性、匀齐性:  指令格式和数据格式的一 致性: 兼容性:系列机软件向上兼容 -3-

指令格式 表示一条指令的机器字,称为指令字,简称指令。 指令格式:用二进制代码表示指令的结构形式。  指令要求计算机处理什么数据?  指令要求计算机对数据做什么处理?  计算机怎样才能得到要处理的数据? 操作码字段地址码字段 指令的寻址方式需 要解决的问题 指令的操作数需要 解决的问题 指令的操作码需要解 决的问题 -4-

操作码(OP)与地址码(AC) 指令系统中每一条指令对应一个操作码 操作码的长度取决于指令系统的规模  L OP =〔log 2 n〕 定长指令、变长指令 地址码包括被操作数,操作数,操作结果 操作码字段地址码字段 -5-

指令分类方法 按计算机系统的层次结构分类 按操作数物理位置分类 按操作数个数分类 -6-

计算机系统层次结构对指令分类 微指令:  微程序级的指令,属于硬件层面 机器指令:  每一条机器指令可以完成一个独立的运算。 宏指令:  若干机器指令组成的软件指令,属于软件 -7-

传统机器级 计算机系统的层次结构 5. 高级语言级 4. 汇编语言级 3. 操作系统级 2. 一般机器级 1. 微程序设计级 -8-

按操作数的物理位置分类 访问内存  存储器-存储器( SS )型 访问寄存器  寄存器-寄存器( RR )型 访问内存和寄存器型  寄存器-存储器( RS )型 -9-

按操作数个数分类 OP A1 A2 A3 三地址指令 OP A1 A2 二地址指令 OP A1 一地址指令 OP 零地址指令 (A1)OP(A2) → (A3) (A1)OP(A2) → (A1) (AC)OP(A1) → AC 如停机,空操作,堆栈指令 -10-

指令字长度 指令中包含二进制代码的位数 与机器字的长度有关 : 单字长, 双字长, 半字长。 多字长指令  解决寻址较大存储空间的问题  取指令要多次访内, 影响速度,占用存储空间较大。 等长指令 : 结构简单,控制线路简单。 变长指令 : 结构灵活,充分利用指令长度,控制复杂 -11-

扩展指令 双操作数指令操作码不能和单操作数,无操作数指令相同,否则无 法区分,此题变成排列组合题 假设双操作数指令数为k, 显然k< K为多余状态,可以用于表示单操作数或者无操作数指令 可用于单操作数指令的条数=(2 8 -k)*2 12 , 2 12 是多余12位组合 812 双操作数 2012 单操作数 32 无操作数

指令字助记符 ADD SUB MOV JMP STR LDA -13-

PDP-11 指令格式举例 -14- OP(10bit)MODE(3)Rn(3) OP(10bit)MODE(3)Rn(3)MODE(3)Rn(3) 源操作数被操作数 寻址模式 操作数地址 单字长指令 双字长指令

寻址方式 寻找指令或操作数有效地址的方式  指令寻址  顺序寻址  跳跃寻址  操作数寻址 -15-

顺序寻址 程序的指令序列在主存顺序存放。执行时从第一条指令 开始,逐条取出并逐条执行,这种程序的顺序执行过程, 称为顺序寻址方式。 CPU中设置一个程序计数器 ( PC ) 对指令的顺序号进行 计数。 PC 中开始时存放程序的首地址,每执行一条指令, PC 加 1 ,以指出下条指令的地址,直到程序结束。  PC++ 准确应该是加上当前指令的长度 PC存放下一条指令的地址 -16-

顺序寻址过程 100 Inc AX add ax,bx PC 内存 OP MSMS MSMS RSRS RSRS MdMd MdMd RdRd RdRd -17-

跳跃寻址 当程序中出现分支或循环时,就会改变程序的执行顺 序。此时对指令寻址就要采取跳跃寻址方式。 所谓跳跃,就是指下条指令的地址不是通过程序计数 器 PC 当前值获得的,而是由指令本身给出。 跳跃的处理方式是重新修改 PC 的内容。然后进入取指 令阶段。 -18-

跳跃寻址过程 IR 100 JMP 103 MOV AX,BX PC 内存 JMP 103 指令寄存器 IR MOV AX,BX

操作数的寻址方式 形成操作数有效地址的方法。  单地址指令地址码的构成: X, I,D  实际有效地址为 E, 实际操作数 S  S= (E) -20- OP X X I I D D 操作码变址位 形式地址 间址位

寻址方式分类 立即寻址 直接寻址 间接寻址 寄存器寻址 寄存器间接寻址 相对寻址 变址寻址 复合寻址 -21-

立即寻址 地址码字段是操作数本身  S=D  例: MOV AX,2038H (2038H→AX)  Little-Endian 内存 AX MOV H

寄存器寻址(Register Addressing) 操作数在 CPU 的内部寄存器中.  AX,BX,CX,DX  MOV AX, BX E=R x2000 0x4FFF BX AX 0x2000 MOV

直接寻址 ( Direct Addressing) 地址码字段直接给出操作数在内存的地址. E=D MOV AX, [200] OP X X D D 内存 MOV

间接寻址(Indirect Addressing) D单元的内容是操作数地址, D是操作数地址的地址  E=(D) 需要访问两次内存, 速度慢 已被淘汰 OPXD 内存 MOV

寄存器间接寻址 (Register Indirect Addressing) D单元的内容是操作数的地址,D是操作数地址的地址  E=(R) MOV AX, [BX] R OPXR 内存 MOV

相对寻址 (Relative Addressing) 指令中的D加上PC的内容作为操作数的地址. E=D+(PC) PC 2200 程序指令计数器 OPX200 XXX 2200 内存 JMP

变址寻址 (Index Addressing)---数组访问 指定一个寄存器R,其存放基址,R被称为变址寄存器。它与本指令的 地址无关, R的内容可以随要求填入。 指定一个寄存器R,其存放基址,R被称为变址寄存器。它与本指令的 地址无关, R的内容可以随要求填入。 E=D+(R) E=D+(R) MOV AX, 32[SI] SI,DI 都称为变址寄存器 MOV AX, 32[SI] SI,DI 都称为变址寄存器 操作数 R RR R 3032 OPX32 内存 MOV

复合寻址 (Composite Addressing) 将间址,相对,变址,基值等寻址方式组合. 变址间址 先变址,后间址. E=((R)+D) 操作数 OPXD =

MOV H MOV MOV MOV JMP MOV MOV 立即寻址 寄存器寻址 直接寻址 间接寻址 寄存器间接 相对寻址 变址寻址 0~ ~127 0~255# Reg 0~255 RAM Cell 0~ RAM Cell PC-128~PC+127 0~ RAM Cell 操作码5bit 寻址模式 形式地址D 8bit 寻址范围 不同寻址方式对比 S=D E=R E=D E=(D) E=(R) E=PC+D E=R+D 实地址E -30-

堆栈寻址方式 堆栈 一组能存取数据的暂时存储单元。 串联堆栈  一组专门的寄存器  数据的传送在栈顶和通用寄存器之间进行。  快速:在CPU内部实现  串行:进栈和出栈涉及到栈内所有其它数据的移动;  栈容量有限:取决于CPU内堆栈专用寄存器的数量;  栈顶不动,数据移动。 内存堆栈 -31-

堆栈寻址方式 AX BX AX CX BX AX PUSH AX PUSH BX PUSH CX CX BX AX POP CX 堆栈顶 -32-

存储器堆栈 用一部分主存空间作堆栈称为存储器堆栈。  堆栈的数目、长度可随意指定  SP---堆栈指示器(栈指针), CPU中一个专门寄存器,SP内容是 栈顶单元地址。改变SP内容即可移动栈顶的位置。  堆栈操作期间,堆栈中数据不动,栈顶移动  非破坏性读出 -33-

进栈 进栈 累加器中的数送堆栈保存. (AC) →堆栈 MSP 堆栈指针 (sp) -1 →sp -34- a PUSH a PUSH b PUSH c SP a b b AC

出栈  出栈 将堆栈中的数取出送累加器  堆栈指针(sp) +1 → sp (堆栈MSP)→ AC SP a b b AC a

8088/8086典型指令 数据传送类  取数 MOV AX , TEMP  存数 MOV TEMP , AX  传送 MOV AX , CX 算术运算类  定点+,-, × , ÷  ADD , ADC , INC , SUB , DEC MUL , DIV 等  浮点+,-, × , ÷ ,求反,求补 NEG ,比较 逻辑运算类  NOT , AND , OR , XOR , TEST -36-

8088/8086典型指令 程序控制类  无条件转移 JMP 条件转移 C,Z,N,P,V  转子程序 JSR 子程序返回 RET 中断返回 IRET 输入/输出类  IN AX,n OUT n, AX 字符串处理 字符串传送、转换、比较、查找 特权指令: 系统资源的分配和管理 其他类  标志操作:CLC(clear carry flag)  CLI (clear interrupt elable flag)  HLT,WAIT,ESC,LOCK -37-

38 例 3 某计算机采用双字节长指令, 内存基于字节寻址, 指令中的数据采用补 码表示, 且 PC 的值在取指阶段完成修改. 完成下列相对寻址的问题. 1) 若某采用相对寻址指令的当前地址为 2003H, 且要求转移后的目标地址 为 200AH, 则该相对寻址指令的形式地址字段的值为多少 ? 2) 若某采用相对寻址的指令的当前地址为 2008H, 且要求转移后的目标地 址为 2001H, 则该相对寻址指令的形式地址字段的值为多少 ? 解:解: 1)200AH – (2003H +2) = 5H ( ) 2)2001H – (2008H +2) = -9 ( 即 F7H) 若计算机字长 32 位, 且 PC 的值在取指阶段修改, 情况如何 ?

MIPS 指令系统 -39-

汇编语言 CPU主要工作:执行指令 指令是CPU执行最主要的操作 不同类型的CPU执行不同指令集  Instruction Set Architecture (ISA).  Intel 80x86 (Pentium 4), IBM/Motorola PowerPC (Macintosh), MIPS, Intel IA64,

MIPS体系结构 MIPS公司发布了第一个商用RISC结构 本课程将讨论MIPS的一些细节 为什么选择MIPS而不是Intel 80x86?  MIPS简洁雅致,不会陷入繁琐的细节.  MIPS广泛应用于嵌入式应用  X86平台主要应用于PC领域 -41-

汇编语言的变量---寄存器 汇编语言不能使用变量(C、JAVA可以)  Int a; float b;  寄存器变量没有数据类型 汇编语言的操作对象是寄存器 好处:寄存器是最快的数据单元 缺陷:寄存器数量有限  编程必须小心,仔细的高效使用各寄存器 MIPS寄存器字长---32bits= 1 Word MIPS指令集包括32个通用寄存器 32 registers in MIPS $0, $1, $2, … $30, $

32个MIPS寄存器 寄存器编号MIPS助记符释义备注 0$Zero固定值为0硬件置位 2~3$v0~$v1函数调用返回值 4~7$a0~$a3函数调用参数4个参数 8~15$t0~$t7暂存寄存器8个参数 16~23$s0~$s7通用寄存器调用之前需保存 24~25$t8~$t9暂存寄存器2个2个 28$gp全局指针 29$sp堆栈指针 30$fp帧指针 31$ra函数返回地址 1$at汇编器保留 26~27$k0~$k1操作系统保留 -43-

加减指令 加法  a = b + c (in C)  add $s0,$s1,$s2 (in MIPS)  C语言变量a, b, c编译后对应寄存器 $s0,$s1,$s2 减法  d = e – f (in C)  sub $s3,$s4,$s5 (in MIPS)  C语言变量d, e, f编译后对应寄存器 $s3,$s4,$s5 -44-

加减指令 如何编译下面的C语言表达式? a = b + c + d - e; 编译成多行汇编指令 add $t0, $s1, $s2 # temp = b + c add $t0, $t0, $s3 # temp = temp + d sub $s0, $t0, $s4 # a = temp - e 一个简单的C语言表达式变成多行汇编语句 #号后面是注释 -45-

内存数据访问指令lw sw lb sb lh sh 读内存指令  g = h + A[8] ; (in C)  lw $t0,32($s3) # $s3 为A[0]地址 (in MIPS)  add $s1,$s2,$t0 # g=h+A[8] 变址寻址  偏移量+基址寄存器 写内存指令  A[12] = h + A[8] ;  lw $t0,32($t3) # get A[8] (in MIPS)  add $t0,$s2,$t0 # A[12]=h+A[8]  sw $t0,48($s3) #store A[12] -46-

加立即数 常数相加指令  g = g + 4 ; (in C)  Lw $t0, 0($s3) # $t0=4 $s3=Address(4)  add $s1,$s1,$t0 # g=g+4 立即数相加指令  addi $s3,$s3,4 # $s3=$s3+4 (in MIPS) 指令实例语义注释 加 add $s1,$s2,$s3$s1=$s2+$s3 寄存器寻址 减 sub $s1,$s2,$s3$s1=$s2-$s3 寄存器寻址 加立即数 addi $s1,$s2,100$s1=$s2+100 寄存器寻址+立即数寻址 取字 lw $s1,100($s2)$s1=Mem[$s2+100] 寄存器寻址+变址寻址 存字 sw $s1,100($s2)Mem[$s2+100]=$s1 寄存器寻址+变址寻址 -47-

条件判断指令 beq reg 1,reg 2,label C语言条件判断指令 If (a==b) { i=1; } else { i=2; } 等效C指令 If (a==b) goto L1; i=2; goto L2; L1:i=1; L2: 等效MIPS指令 beq $s0,$s1,L1 addi $s3,$Zero,2 j L2; L1:addi $s3,$Zero,1 L2: MIPS数据传送指令 addi $s3,$Zero,1 # $s3=1 add $s3,$s2,$Zero # $s3=$s2 -48-

MIPS 条件判断指令 条件跳转  If (reg 1 ==reg 2 ) goto Label 1 (C 语言 )  beq reg 1,reg 2,Label 1 (MIPS 指令 )  bne reg 1,reg 2,Label 2 无条件跳转指令  goto Label ; (C 语言 )  J label (MIPS 指令 )  beq $Zero,$Zero,label (MIPS 指令 ) -49-

逻辑运算 移位指令  a=b<<2; C 语言  sll $s1,$s2,2 # shift left  srl $s1,$s2,2 # shift right 逻辑运算  and $t0,$t1,$t2 # t0=t1&t2  or $t0,$t1,$t2 # t0=t1|t2  andi $t0,$t1,100 # t0=t1&100  ori $t0,$t1,100 # t0=t1|

循环结构 C语言简单循环结构,A为int数组  do { g = g + A[i]; i = i + j; } while (i != h); 重写代码  Loop:g = g + A[i]; i = i + j; if (i != h) goto Loop; 编译后的变量映射: ghijA[0] $s1$s2$s3$s4$s5 -51-

循环结构 最后编译的MIPS代码: Loop: sll $t1,$s3,2 # $t1= 4*I addu $t1,$t1,$s5 # $t1=addr A+4i lw $t1,0($t1) # $t1=A[i] addu $s1,$s1,$t1 # g=g+A[i] addu $s3,$s3,$s4 # i=i+j bne $s3,$s2,Loop # goto Loop # if i!=h 原始C代码: Loop:g = g + A[i]; i = i + j; if (i != h) goto Loop; -52-

比较指令 slt slti MIPS比较指令(Set on Less Than) slt reg 1,reg 2,reg 3 if (reg 2 < reg 3 ) ( C 语言) reg 1 = 1; else reg 1 = 0; If (g<h) goto Less; (用slt,bne 两条指令实现) slt $t0,$s0,$s1 # $t0 = 1 if g<h bne $t0,$0,Less # goto Less # if $t0!=0 # (if (g<h)) Less: -53-

MIPS过程调用 C语言函数调用 int function(int a,int b) { return (a+b); } MIPS实现过程调用的机制  返回地址寄存器 $ra  参数寄存器 $a0, $a1, $a2, $a3  返回值寄存器 $v0 $v1  局部变量 $s0~$s7  堆栈指针 $sp -54-

过程调用实现机制 sum(a,b); /* a,b:$s0,$s1 */ } int sum(int x, int y) { return x+y; } 1000 add $a0,$s0,$zero # x = a 1004 add $a1,$s1,$zero # y = b 1008 addi $ra,$zero,1016 # $ra= j sum # 跳转,调用过程 sum 1016 … 2000 sum: add $v0,$a0,$a1 # 过程入口 2004 jr $ra # new # 返回主程序 instruction J jal sum jal sum

过程调用机制 JAL Label #link and jump 等效于如下指令 $ra=PC+4; #save next instruction address J Label 过程返回指令 Jr $ra #return to main program 问题:利用 $ra 做返回地址,如果过程嵌套如何返回?  $ra 会被多次覆盖  利用堆栈保存 $ra -56-

多级过程调用 int sumSquare(int x, int y) {return mult (x,x)+ y; } 主程序调用 sumSquare(x , y), sumSquare 调用 mult(x,y). 调用 sumSquare(x , y) 时 $ra 保存一次,保证该过程执 行完毕后能返回主程序。 但调用 mult 时会覆盖 $ra 在调用 mult 时需要保存 sumSquare 的返回地址 -57-

堆栈操作 sumSquare: addi $sp,$sp,-8 # space on stack sw $ra, 4($sp) # save ret addr sw $a1, 0($sp) # save y add $a1,$a0,$zero # mult(x,x) jal mult # call mult lw $a1, 0($sp) # restore y add $v0,$v0,$a1 # mult()+y lw $ra, 4($sp) # get ret addr addi $sp,$sp,8 # restore stack jr $ra mult:... 注意:除了返回地址以外,函数参数等会覆盖的变量都需要入栈 “push” “pop” -58-

32位定长MIPS指令格式(R型指令) OP:指令的基本操作---操作码 Rs:第一个源操作数寄存器 Rt:第二个源操作寄存器 Rd:存放结果的目的操作寄存器 Shamt:偏移量,用于移位指令 Funct:函数,对操作码进行补充 OP RSRS RSRS RtRt RtRt shamt RdRd RdRd 6bits funct 5bits 6bits R 型指令 -59-

MIPS指令格式 (R型指令) 6bits5bits 6bits 指令格式OPrsrtrdshamtfunct addR0 Reg sub减R0 Reg andR0 Reg 36 orR0 Reg 37 nor R 0 Reg 39 sllR0 Reg 0 srlR0 Reg 2 jrR0 REG00 08 addR add $s1,$s2,$s3 # machine code 0x

MIPS指令格式 (I、J型指令) 6bits5bits 6bits 指令格式OPrsrtrdshamtfunct addR0 Reg addiI8 Reg 16bits 立即数 lwI35 Reg 16bits 立即数 swI43 Reg 16bits 立即数 andi I 12 Reg 16bits 立即数 oriI13 Reg 16bits 立即数 beqI4 Reg 16bits 立即数(相对寻址) bneI5 Reg 16bits 立即数(相对寻址) jJ2 26bit 立即数(伪直接寻址) jalJ3 26bit 立即数(伪直接寻址) -61-

MIPS指令格式 OP RSRS RSRS RtRt RtRt shamt RdRd RdRd 6bits funct 5bits 6bits OP RSRS RSRS RtRt RtRt 6bits 立即数 5bits 16bits OP 6bits 立即数 26bits R 型指令 I 型指令 J 型指令 -62-

MIPS寻址方式总结 寄存器寻址 基址寻址 立即数寻址 PC相对寻址 beq req1,req2,label  16位偏移地址左移两位+PC 伪直接寻址 J label  26位偏移地址+PC高4位  30位字地址 -63-

指令系统发展方向 CISC--- 复杂指令系统计算机  Complex Instruction System Computer  指令数量多,指令功能,复杂的计算机。 RISC--- 精简指令系统计算机  Reduced Instruction System Computer  指令数量少,指令功能单一的计算机。 -64-

高级语言中各种语句的动态出现频度 PascalC 赋值语句 4538 循环语句 53 程序调用语句 1512 判断语句 2943 直接转移语句 – 3 其它

精减指令系统(RISC) 选取使用频率最高的一些简单指令,指令条数少; 寻址方式简单 指令长度固定,指令格式简单 CPU设置大量寄存器 只有存/取数指令才能访问存储器, 其余指令的操作都在寄存器之间进行. 每一个机器周期完成一条机器指令。 -66-

CISC与RISC的比较 特 征 CISCRISC IBM 370/16 8 VAX 11/78 0 Intel SPARC MIPS R4000 开发年份 指令数量 / 条 指令长度 /B2~62~62~52~51 ~ 寻址方式 通用寄存器数 / 个 ~ 控制存储器大小 /Kb -- Cache 大小 /KB

典型 RISC 机指令系统 机器型号指令数寻址方式指令格式通用寄存器数 RISC-I RISC-II MIPS SPARC MIPSR i

例1. 字长16位,主存64K,指令单字长单地址,80条指令。寻址方 式有直接、间接、相对、变址。请设计指令格式。 解: 80条 log[80]=7 采用7位操作码 寻址方式4种 采用2位 PC为16位 变址寄存器16位 相对寻址 E=(PC)+D 变址寻址 E=(R)+D -69- OPD

-70- 答:指令格式及寻址方式的特点如下: 1)单字长二地址指令; 2)操作码可指定16条指令; 3)源和目的均有8种寻址方式; 4)源地址寄存器和目的地址寄存器均有8个; 5)可寻址范围为1~64K 2.分析以下指令格式及寻址方式特点? OP 寻址方式寄存器寻址方式寄存器 源地址 目标地址

OP X X D=100 PC=1000 R 基 =2000 寻址方式 X 操作数 立即 0100 直接 1200 间接 2500 相对 3100 变址 变址间址 5500 有效地址 E S=D E=D=100 E=(D)=200 E=PC+D=1100 E=(R)+D=2100 E=((R)+D)=200 3 .设某机的指令格式、有关寄存器和主存内容如下, X 为寻址方式, D 为形式地址,请在下表中填入有效地址 E 及操作数的值 。 ? -71-

OP MSMS MSMS RSRS RSRS MdMd MdMd RdRd RdRd 源操作数目的操作数 M s /M d 寻址方式助记符含义 000B 寄存器直接 RnRn 操作数 =(R n ) 001B 寄存器间接 (R n ) 操作数 =((R n )) 010B 寄存器间接,自增 (R n )+ 操作数 =((R n )),(R n )+1→(R n ) 011B 相对 D(R n ) 转移目标地址 =(PC)+(R n ) 注 (x) 表示存储器地址 x 或寄存器 x 的内容 (11 分 ) 某计算机字长为 16 位,主存地址空间大小为 128KB ,按字编址。采用单 字长指令格式,指令各字段定义如下: 10 年研究生统考 转移地址采用相对寻址方式,相对偏移量用补码表示。寻址方式定义如下: ( 1 )该指令系统最多可有多少条指令?该计算机最多有多少个通用寄存器? 存储器地址寄存器 MAR 和存储器数据寄存器 MDR 至少需要多少位?

OP MSMS MSMS RSRS RSRS MdMd MdMd RdRd RdRd 源操作数目的操作数 M s /M d 寻址方式助记符含义 000B 寄存器直接 RnRn 操作数 =(R n ) 001B 寄存器间接 (R n ) 操作数 =((R n )) 010B 寄存器间接,自增 (R n )+ 操作数 =((R n )),(R n )+1→(R n ) 011B 相对 D(R n ) 转移目标地址 =(PC)+(R n ) 注 (x) 表示存储器地址 x 或寄存器 x 的内容 (11 分 ) 某计算机字长为 16 位,主存地址空间大小为 128KB ,按字编址。采用单 字长指令格式,指令各字段定义如下: 转移地址采用相对寻址方式,相对偏移量用补码表示。寻址方式定义如下: ( 2 )转移指令的目标地址范围是多少?

M s /M d 寻址方式助记符含义 000B 寄存器直接 RnRn 操作数 =(R n ) 001B 寄存器间接 (R n ) 操作数 =((R n )) 010B 寄存器间接,自增 (R n )+ 操作数 =((R n )),(R n )+1→(R n ) 011B 相对 D(R n ) 转移目标地址 =(PC)+(R n ) (11 分 ) 某计算机字长为 16 位,主存地址空间大小为 128KB ,按字编址。采用单 字长指令格式,指令各字段定义如下: ( 3 )若操作码 0010B 表示加法操作,助记符为 add ,寄存器 R4 , R5 的编号 分别为 100B 和 101B , R4 的内容为 1234H , R5 的内容为 5678H ,地址 1234H 中 的内容为 5678H ,地址 5678H 中的内容为 1234H ,则汇编语句 add (R4),(R5)+ 逗号前为源操作数,逗号后为目的操作数,对应的机器码是多少?用十六 进制表示。该指令执行以后,哪些寄存器和存储单元的内容会发生改变? 改变后的内容是什么?

本章重点内容 指令系统基本概念 指令基本格式 指令系统寻址方式 -75-