大连理工大学软件学院 软件工程系 赖晓晨 far.away@tom.com 计算机组成与结构 大连理工大学软件学院 软件工程系 赖晓晨 far.away@tom.com.

Slides:



Advertisements
Similar presentations
第五章 中央处理器 5.1 CPU的组成和功能 5.2 指令周期 5.3 时序产生器和控制方式 5.4 微程序控制器 5.5 微程序设计技术
Advertisements

微型计算机技术及应用 王 健 主讲 授课学时:40学时 大连理工大学计算机系.
建構 Beta電腦 – Fall /29/0.
第2章 微处理器 2.1 概述 /8086微处理器 微处理器 X86/Pentium微处理器
输入输出程序设计 输入输出的基本概念 无条件方式输入输出 查询方式输入输出 中断方式输入输出.
计算机组成原理 北京理工大学计算机科学工程系 赵清杰 北京理工大学计算机科学工程系.
微型计算机技术 教 学 指 导(七) 太原广播电视大学 郭建勇.
第10章 DOS功能调用与BIOS中断调用.
王晓峰 合肥学院计算机科学与技术系 合肥 计算机科学与技术 导 论 王晓峰 合肥学院计算机科学与技术系 合肥
第七章 控制器 7.1 控制器的组成及指令的执行 7.2 控制方式和时序的产生 7.3 微程序控制器 7.4 微程序控制器及其微程序设计举例
8051 指令.
微处理器设计1 刘鹏 College of ISEE Zhejiang University
第3章 80x86汇编语言程序设计(中) 时间不够的情况下只讲16位汇编.
4.1 汇编语言 4.2 顺序结构程序 4.3 分支程序设计 4.4 循环程序设计 4.5 子程序设计
第3章 80x86汇编语言程序设计(上) 16位汇编版本 时间不够的情况下只讲16位汇编.
3.3.5 程序控制指令 控制转移指令分为: 转移指令 循环控制指令 调用和返回指令 中断指令.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月26日.
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
第三章 寻址方式与指令系统 3.1 寻址方式 一条指令通常由两大部分构成: 操作码 操作数
第6章 DMA传输 6.1 DMA传输原理 6.2 DMA控制器8237A A的编程使用 欢迎辞.
第7章 并行接口 7.1 简单并行接口 7.2 可编程并行接口8255A 7.3 键盘接口 7.4 LED显示器接口.
计算机系统结构 第一章 基本概念 第二章 指令系统 第三章 存储系统 第四章 输入输出系统** 第五章 标量处理机 第六章 向量处理机
第2章 MCS-51单片机指令系统与汇编语言程序设计
第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第四节 Intel 8253在IBM PC机上的应用.
Assembly Language Programming
复 习 一. 计算机中的数和编码 1. 2,10,16进制数及其之间的转换(整数) 按权展开,除x取余 2
指令集架構 計算機也跟人類一樣,需要提供一套完整的語言讓人們跟它充分溝通,以完成正確的計算工作。
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年12月10日.
单片机原理及应用 MCS-51系列单片机的基本硬件结构 MCS-51指令系统 MCS-51单片机的系统扩展与应用.
第八章 输入输出程序设计 总线 CPU MEM I/O接口 I/O设备.
第2章 计算机指令集结构 曲冠南
第3章 IA-32指令系统 3.1 基本数据类型 3.2 IA-32的指令格式 3.3 IA-32指令的操作数寻址方式
第8章 寻址方式与指令系统.
嵌入式微处理器系统 第二章 处理器技术(1) 北京大学软件与微电子学院.
微机原理及应用 主讲:郑海春.
第一章 8086程序设计 第二章 MCS-51程序设计 第三章 微机基本系统的设计 第四章 存贮器与接口 第五章 并行接口
汇编语言程序设计课程设计 第二次实验 DEBUG基本命令与算术运算指令
单片机原理 单 片 机 单片机接口技术 单片机应用技术.
计算机原理及系统结构 第十八讲 主讲教师:赵宏伟                 学时:64.
微型计算机原理及应用.
第3章 微型计算机输入输出接口 3.1 输入/输出接口 3.2 输入输出数据传输的控制方式 3.3 开关量输入输出接口 欢迎辞.
1.3 微型计算机的结构和工作原理.
嵌入式系统教案 武汉创维特信息技术有限公司 2019/1/18.
(第2版).
第5章 循环与分支程序设计 学习目标: 了解并掌握循环程序的构造方法,尤其是对循环控制条件的设置以及可能出现的边界情况的考虑。掌握起泡排序算法这种多重循环程序设计中的常用方法。交换标志位的设置在此算法中更能提高效率。学会在数组排序算法中采用折半查找法来提高查找效率。学会使用跳跃表法实现CASE结构。
第四章 指令系统及汇编语言程序设计.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月19日.
CISC vs. RISC 複雜指令集電腦(Complex Instruction Set Computer: CISC)
微机原理及接口技术 主讲人 钱晓捷.
习题3 1、 分别说明下列指令的原操作数和目的操作数各采用什么寻址方式。 设定如下: ①立即寻址 ② ① ②寄存器寻址
第3章 MCS-51指令系统 介绍MCS—51系列单片机的寻址方式 介绍MCS—51系列单片机的指令系统
第4章 80C51系列指令系统 教学目的:熟悉80C51系列单片机的寻址方式及 每一种寻址方式对应的寻址空间;掌 握每一条指令功能。
本章内容 MCS-51单片机指令系统的格式 MCS-51单片机寻址方式 指令系统的分析
第3章 ARM微處理器的指令集.
第九章 BIOS和DOS中断 在存储器系统中,从地址0FE000H开始的8K ROM(只读存储器)中装有BIOS(Basic Iuput /output System)例行程序。驻留在ROM中的BIOS给PC系列的不同微处理器提供了兼容的系统加电自检,引导装入,主要I/O设备的处理程序以及接口控制等功能模块来处理所有的系统中断。使用BIOS功能调用,给程序员编程带来很大方便,程序员不必了解硬件操作的具体细节,直接用指令设置参数,然后中断调用BIOS中的子功能,所以利用BIOS功能编写的程序简洁,可读性好,
第2章 80x86计算机组织  计算机系统  存储器  中央处理机  外部设备.
2019/4/29 计算机组成原理 辅导教师:陆明强.
《微型计算机原理与接口技术》 第4版 王良 宁德师范学院 吴宁 乔亚男 编著 清华大学出版社 出版
機器語言, 組合語言, 與編譯器 參考: β 文件; 實驗 #5B; C 語言講議 當我在我的程式碼中發現一堆 麻煩時, 朋友和同事跟我說了
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
開放電腦計劃 報告人:陳鍾誠 2011 年 8 月 20 日 台灣開源人年會 COSCUP 2011 – 中研院
作业3、4、6、7 俞天灿.
本节内容 计算机不会做加法 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
清华大学计算机科学与技术系高性能计算研究所 郑纬民 教授 2005年5月
第二章 8086系统结构 /8086的存储器组织 的系统配置及引脚功能 CPU时序
微机原理与接口技术 第5章 汇编语言程序设计 西安邮电大学计算机学院 王 钰.
下列哪些是不等式 的解? 10, 9 , , –1,  全部皆是 你認為不等式 有多少個解? 5 個 無限多個
第4章 MCS-51汇编语言程序设计 教学基本要求: (1)、了解MCS-51汇编语言程序设计的特点;
第三章 8086的指令系统 8086指令特点 8086的寻址方式 8086的指令格式及数据类型 8086的指令集.
第5章 中 央 处 理 器 5.1 CPU的功能和组成 5.2 指令周期 5.3 时序产生器和控制方式 5.4 微程序控制器
Presentation transcript:

大连理工大学软件学院 软件工程系 赖晓晨 far.away@tom.com 计算机组成与结构 大连理工大学软件学院 软件工程系 赖晓晨 far.away@tom.com

第五章 指令系统 5.1 指令系统概述 5.2 指令格式 5.3 寻址方式 5.4 指令类型 5.5 精简指令系统计算机 5.1 指令系统概述 5.2 指令格式 5.3 寻址方式 5.4 指令类型 5.5 精简指令系统计算机 指令系统决定了计算机的基本功能,因此指令系统的设计是计算机系统设计的一个核心问题。它不仅与计算机的硬件设计紧密相关,而且直接影响到系统软件设计的难易程度。 计算机的指令是程序人员和计算机交往的最基本的界面,是机器指令的简称。机器指令是人们指示计算机执行各种基本操作的命令。一般来说,指令包括操作码及地址码两部分,用二进制编码表示。操作码用来表示各种不同的操作。地址码指出被运算数据在存储器中存放的位置。 因为指令字的位数有限,通常不直接给出要访问的主存单元地址,而是通过地址变换技术,扩充可以访问的主存容量。寻址方式不但扩大了可以访问的存储器容量,而且还可以为满足用户提出的各种方便编写程序的需要。 指令系统是一台机器所能执行的全部指令。 计算机升级换代的系列化问题,特别是指令系统兼容问题,值得特别重视。

5.1 指令系统概述 一、 基本概念 程 序: 使计算机执行某个特定任务的一系列指令。 指 令: 指示机器执行某种操作的命令。 程 序: 使计算机执行某个特定任务的一系列指令。 指 令: 指示机器执行某种操作的命令。 指令长度: 指令码中二进制码的位数。 指令格式: 指令码的编码规则称为指令格式。 指令系统: 一台计算机所能执行的全部指令的集合。 表征一台计算机性能的重要因素, 机器的硬件结构和指令系统有直接关系, 指令系统还影响系统软件和机器的适用范围。

二、指令系统的发展 50年代: 分立元件,硬件简单。只有定点加减、逻辑运算、数据传送、转移等十几至几十条指令。 60年代: 增加了乘除运算、浮点运算、十进制运算、字符串处理等指令,指令数目多达一二百条,寻址方式也趋多样化。 后期开始出现系列计算机(指基本指令系统相同、基本体系结构相同的一系列计算机),软件兼容性。 70年代: VLSI技术快速发展,指令系统趋近高级语言,指令数目增长 CISC和RISC 50年代:分立元件,硬件简单,指令系统只有定点加减、逻辑运算、数据传送、转移等十几至几十条指令。 60年代后期:增加了乘除运算、浮点运算、十进制运算、字符串处理等指令,指令数目多达一二百条,寻址方式也趋多样化。    60年代后期开始出现系列计算机(指基本指令系统相同、基本体系结构相同的一系列计算机)一个系列往往有多种型号,它们在结构和性能上有所差异。同一系列的各机种有共同的指令级而且新推出的机种指令系统一定包含所有旧机种的全部指令,旧机种上运行的各种软件可以不加任何修改便可在新机种上运行,大大减少了软件开发费用。 70年代末期:大多数计算机的指令系统多达几百条。我们称这些计算机为复杂指令系统计算机(CISC)。       但是如此庞大的指令系统难以保证正确性,不易调试维护,造成硬件资源浪费。为此人们又提出了便于VLSI技术实现的精简指令系统计算机(RISC)。

三、完善的计算机的指令系统的要求: 1、完备性 2、有效性 3、规整性 4、兼容性 一台计算机中最基本的、必不可少的指令构成了指令系统的完备性。 2、有效性 该指令系统所提供的指令编制的程序能够产生高效率 主要体现在空间和时间方面。 3、规整性 对称性:指在指令系统中,所有的寄存器和存储单元都可同等对待,这对简化程序设计,提高程序的可读性非常有用。 匀齐性:是指一种操作性质的指令可以支持各种数据类型。 4、兼容性 计算机的体系结构设计基本相同,机器之间具有相同的基本结构、数据表示和共同的基本指令集合。 二、完善的计算机的指令系统应具备的要求: 发展方向:多用途,强功能,高效率,便优化,方便高级语言的编程。 1、完备性 一台计算机中最基本的、必不可少的指令构成了指令系统的完备性。 2、有效性 有效性是指利用该指令系统所提供的指令编制的程序能够产生高效率。高效率主要表现在空间和时间方面,即占用存储空间小、执行速度快。 3、规整性 规整性是指指令操作的对称性和匀齐性,指令格式与数据格式的一致性。 (1)对称性:指在指令系统中,所有的寄存器和存储单元都可同等对待,这对简化程序设计,提高程序的可读性非常有用。 (2)匀齐性:是指一种操作性质的指令可以支持各种数据类型。 (3)指令的格式与数据格式的一致性:是指指令长度与数据长度有一定关系,以方便存取和处理。 4、兼容性 兼容性一般是指计算机的体系结构设计基本相同,机器之间具有相同的基本结构、数据表示和共同的基本指令集合。

四、低级语言与高级语言 high level language assembly language machine language 比 较 内 容 高 级 语 言   低 级 语 言 对程序员的训练要求  (1)通用算法 (2)语言规则 (3)硬件知识   有  较多 不要 较少 有 要 对机器独立的程度   独立  不独立 程序执行时间 较长 短 编译过程中 对计算机资源的要求 多 少 Compiler assembly language Assembler  计算机能够直接识别和执行的唯一语言是二进制语言,但人们采用符号语言或高级语言编写程序。为 此,必须借助汇编程序或编译程序,把符号语言或高级语言翻译成二进制码组成的机器语言。   汇编语言依赖于计算机的硬件结构和指令系统。不同的机器有不同的指令,所以用汇编语言编写的程 序不能在其他类型的机器上运行。   高级语言与计算机的硬件结构及指令系统无关,在编写程序方面比汇编语言优越。但是高级语言程序 “看不见”机器的硬件结构,不能用于编写直接访问机器硬件资源的系统软件或设备控制软件。为此,一 些高级语言提供了与汇编语言之间的调用接口。用汇编语言编写的程序,可作为高级语言的一个外部过程 或函数,利用堆栈来传递参数或参数的地址。 machine language

5.2 指令格式 一、指令的组成 一般指令中应包括以下信息: 操作的种类和性质; 操作数的存放地址; 操作结果存放地址; 下条指令存放地址。 指令格式 — 指令中用不同的代码段表示上述不同信息,这 种代码段的划分和含义是指令的编码方式。 指令 instruction operation code An 一般指令中应包括以下信息: (1) 操作的种类和性质,我们称之为操作码。 (2) 操作数的存放地址,在双操作数运算中,如加、减、乘、除、逻辑乘、逻辑加的运算中都需要指定两个操作数,给出二个操作数地址。 (3) 操作结果存放地址。 (4) 下条指令存放地址。这样可以保证程序能连续不断地执行下去,直到程序结束。 指令中用不同的代码段表示上述不同信息,这种代码段的划分和含义,就是指令的编码方式,又叫指令格式,通常一条指令中包括操作码字段和若干个地址码字段。 操作码字段OC 地址码字段AC

操作码 要求 (1)每条指令都要求它的操作码必须是唯一的位组合。 (2)指令系统中指令的个数N与操作码的位数n, 指令系统的每一条指令都有一个操作码,它表示该指令应进行什么性质的操作。 不同的指令用操作码字段的不同编码来表示。 操作码字段的位数一般取决于计算机指令系统的规模。 要求 (1)每条指令都要求它的操作码必须是唯一的位组合。 (2)指令系统中指令的个数N与操作码的位数n, 须满足关系式: N≤2n 指令系统的每一条指令都有一个操作码,它表示该指令应进行什么性质的操作。   不同的指令用操作码字段的不同编码来表示,每一种编码代表一种指令。    组成操作码字段的位数一般取决于计算机指令系统的规模。例如,一个指令系统只有8条指令,则有3 位操作码就够;如果有32条指令,那么就需要5位操作码。    对于一个机器的指令系统,在指令字中操作码字段和地址码字段长度通常是固定的。    在单片机中,由于指令字较短,为了充分利用指令字长度,指令字的操作码字段和地址码字段是不固 定的,即不同类型的指令有不同的划分,以便尽可能用较短的指令字长来表示越来越多的操作种类,并在越 来越大的存储空间中寻址。

地址码 根据一条指令中有几个操作数地址,可将该指令称为几操作数指令或几地址指令。 三地址指令 二地址指令 一地址指令 零地址指令  三地址指令  二地址指令  一地址指令  零地址指令   OPCODE  A1 A2 A3 OPCODE A1 A2 根据一条指令中有几个操作数地址,可将该指令称为几操作数指令或几地址指令。   一般的操作数有被操作数、操作数及操作结果这三种数,因而就形成了三地址指令格式。在此基础上, 后来又发展成二地址格式、一地址格式和零地址格式  操作码 A1 A2 A3    三地址指令  操作码 A1 A2    二地址指令  操作码  A1    一地址指令  操作码    零地址指令   OPCODE A1 OPCODE

二、指令格式 1.零地址指令格式 格式: eg. NOP , HLT 只有操作码,而没有操作数地址部分的指令格式。 操作码OC 这种指令有两种可能: (1)无需任何操作数。如空操作指令,停机指令等。 (2)所需的操作数是默认的:堆栈。 堆栈的概念 a.若干个存储单元(或寄存器)的有序集合,它顺序地存放一组元素。 b. 数据的存取都只能在栈顶单元内进行,即数据的进栈与出栈都只 能 经过栈顶单元这个“出入口”。 c. 堆栈中的数据采用“先进后出”或“后进先出”的存取工作方式。 操作码OC

堆栈型计算机举例: 逆波兰式:ab*c+d-ef+/ PUSH A PUSH B SUB MUL PUSH E PUSH C PUSH F ADD PUSH D SUB PUSH E PUSH F ADD DIV POP X

2.一地址指令格式 格式: 单操作数指令: 指令中给出的地址即是操作数的地址, 又是操作结果的存储地址。 eg: INC BX; (BX)+1  BX DEC AX; (AX) -1  AX MUL AL; (AL)×(A)  A 指令中的地址提供一个操作数,另一个操作数是由机内硬件寄存器“隐含”地自动提供的。即指此操作数在指令中不出现,而是按照事先约定由寄存器默认提供,运算结果仍送到寄存器中。 如累加器(A): (A) OP (B) A    A 操作码OC 在某些计算机中,指令中提供的一个地址提供一个操作数,另一个操作数是由机内硬件寄存器“隐含”地自动提供的。所谓“隐含”是指此操作数在指令中不出现,而是按照事先约定由寄存器默认提供,运算结果仍送到寄存器中。因为这个寄存器在连续运算时,保存着多条指令连续操作的累计结果,故称为累加器(AC)。 一地址指令常称为单操作数指令。通常这种指令以运算器中累加寄存器AC中的数据为被操作数, 指令字的地址码字段所指明的数为操作数,操作结果又放回累加寄存器AC中。         (AC) OP (A) -> AC       OP表示操作性质;(AC)表示累加寄存器AC中的数;(A)表示内存中地址为A的存储单元中的数或 运算器中地址为A的通用寄存器中的数; →表示把操作(运算)结果传送到指定的地方。

一地址汇编举例: LOAD E ;E->A ADD F ;A+F->A STORE X ;A->X LOAD A ;数据A->A MUL B ;A*B->A ADD C ;A+C->A SUB D ;A-D->A DIV X ;A/X->A

3.二地址指令格式 双操作数指令格式 : 两个地址码字段分别指明参与操作的两个数在内存中的地址或通用寄存器名称,A1作存放操作结果的地址。 双操作数指令格式 : 两个地址码字段分别指明参与操作的两个数在内存中的地址或通用寄存器名称,A1作存放操作结果的地址。 操作:(A1) OP (A2)  A1 eg ADD R0,R1 ; (R0) + (R1)  R0 SUB AX,[BX]; (AX) - ((BX))  AX A1 操作码OC A2 这种指令操作的含义是:内存地址A1单元中的数据与内存地址A2单元中的数据,执行OP规定的操作,运算结果放到内存地址A3的单元中。 (1)   把保存操作前原来操作数的地址称为源点地址(SS),把保存指令执行结果的地址称为终点地址或目的地址(DD)。 (2)   将源点与终点操作数进行操作码规定的操作后,将结果存入终点地址。 例如,双操作数加法指令: ADD R0,R1表示将R0寄存器的内容和R1寄存器的内容相加以后,将结果存入R1寄存器中。 又如ADD (R0),R1表示将R0寄存器的内容作为地址,到内存中取出该地址所指向的单元内容作为源点操作数,和作为终点操作数的R1寄存器的内容相加以后,将结果存入R1寄存器中。

二地址汇编举例: MOVE R1, A MUL R1, B ADD R1, C SUB R1, D MOVE R2, E ADD R2, F DIV R1, R2 MOVE X, R1

4.三地址指令格式 5.多地址指令格式 格式: 操作: (A1) OP (A2) A3 A1-第一个源操作数的存储器或寄存器地址 eg: ADD Z,X,Y; (X)+(Y) Z 5.多地址指令格式 OPCODE  A1 A2 A3 .多地址指令格式 例如四地址指令格式。 (2)特点: A、直观明了; B、程序执行的流向明确; C、操作数和结果可以分散在内存各处。 D、但是指令字长度太长。

三地址汇编举例: MUL X, A, B ADD X, X, C SUB X, X, D ADD Y, E, F DIV X, X, Y

不同地址数指令的特点和适用场合 地址数量 程序长度 使用场合 三地址 短 很常用,如ARM等RISC机器 二地址 一般 最常用,如x86体系结构 一地址 较长 早期的微机,如z80 零地址 最长 堆栈型计算机。

讨论: 零地址、一地址指令执行速度快,硬件实现简单; 二地址、多地址功能强,便于编程 指令和数据都存放在存储器中 指令的地址由PC确定、数据的地址由指令确定 指令一般不能在程序执行时修改 .多地址指令格式 例如四地址指令格式。 (2)特点: A、直观明了; B、程序执行的流向明确; C、操作数和结果可以分散在内存各处。 D、但是指令字长度太长。

三、指令格式设计准则 1、指令字长要短,以得到时间和空间上的优势。 2、指令字长一般应是机器字符长度的整数倍以便存储系统管理 3、指令的长度,与指令中操作数地址 的位数有关。 例如,对同一容量(如64KB)的存储器 (1) 若取存储单元为一字节长,则需要16位地址码, (2) 若存储单元长度为32位,则只需14位地址码。 方案 (1) 对字符操作方便,但地址码位数多, 方案 (2) 地址码位数少有利,但字符操作困难,分辩率低。 (存储器分辩率:指存储器能被区分、识别与操作的精细程度) 指令格式

四、指令长度与字长 机器字长: 计算机能直接处理的二进制数据的位数, 决定了计算机的运算精度。 地址码的长度决定了指令的直接寻址能力 机器字长: 计算机能直接处理的二进制数据的位数, 决定了计算机的运算精度。 地址码的长度决定了指令的直接寻址能力 指令字长度:一个指令字中包含二进制代码的位数。 取决于操作码、操作数地址的长度和 操作数地址个数。 短格式指令:指令字长小于机器字长 长格式指令:指令字长大于机器字长 等长指令字结构、变长指令字结构 使用多字长指令,目的在于提供足够的地址位来解决访问内存任何单元的寻址问题。其主要缺点是必须 两次或多次访问内存以取出一整条指令,降低了CPU的运算速度,又占用了更多的存储空间。 等长指令字结构:各种指令字长度是相等的。这种指令字结构简单,且指令字长度是不变的。 变长指令字结构:各种指令字长度随指令功能而异。结构灵活,能充分利用指令长度,但指令的控制较复杂。

五、 指令操作码及其扩展技术 假设一台计算机指令字长16位,操作码与地址码都为4位, 1、操作码编码格式 2、扩展操作码   固定格式:译码简单,可以简化硬件设计 可变格式:减少操作码平均长度,硬件复杂,指令不规整 2、扩展操作码 操作码位数随地址码个数变化采取可变长度的类型;  各指令间指令码一定不重复; 根据需要灵活变通。 假设一台计算机指令字长16位,操作码与地址码都为4位, 方法1:固定格式,则最多可以设计16条三地址指令 一、操作码和地址码间的权衡(操作码有两种编码格式) 1、 固定格式:操作码长度固定,且集中放在指令字的一个字段中。 2、 可变格式:即操作码长度可变,且分散地放在指令字的不同字段中。 二、扩展操作码 1、要点: (1)   操作码位数随地址码个数变化采取可变长度的类型; (2)   各指令间指令码一定不重复; (3)   根据需要灵活变通。 指令操作码有两种编码格式,常用的是固定格式,操作码长度固定不变,放在一个字段中。这种格式译码方便,控制简单,在大中型计算机中采用。缺点是扩充性差、不灵活。 另一种格式为可变长度操作码格式,各种指令的操作码位数不同,能够在不长的指令字中灵活设置很多种指令,满足不同类型指令的需要,因此能够有效缩短操作码的平均长度,增加新的指令也比较方便。但这种操作码译码不方便,而且指令格式也不规整。 A1 操作码OC A3 A2

编码1111作为扩展标志与下一个4位组成一个8位操作 码, 引出二地址指令,则: B、   方法2——5:扩展操作码 A、4位OC中用0000-1110定义15条三地址指令, 编码1111作为扩展标志与下一个4位组成一个8位操作 码, 引出二地址指令,则: B、 1. 若将A1全部用作2地址指令OC,再定义16条2地址指令; 2. 8位OC中用11110000-11111110定义15条2地址指令,剩 下一个编码11111111与下一个4位组成12位的操作码,引出16条一地址指令,或者15条1地址指令和16条零地址指令; 3. 选11110000—11111101共14条2地址指令, 留11111110,11111111为扩展标志,再分别扩展1地址指令。 C、若选B(3),则可定义31条1地址指令,留一个编码111111111111为扩展标志,与下一个4位组成16位操作码,引出16条零地址指令; A1 操作码OC A3 A2

固定指令操作码举例1: 0000 XXXX YYYY ZZZZ 1111 XXXX YYYY ZZZZ … 16条三地址指令 OP A1 4位 OP A1 OP A1 A2 OP … 16条三地址指令 0000 XXXX YYYY ZZZZ 1111 XXXX YYYY ZZZZ

指令操作码扩展举例2: … 15条三地址指令 0000 XXXX YYYY ZZZZ 1110 XXXX YYYY ZZZZ 1111 … OP A1 A2 A3 4位 OP A1 A2 OP A1 OP … 15条三地址指令 0000 XXXX YYYY ZZZZ 1110 XXXX YYYY ZZZZ 扩展标志 1111 … 16条二地址指令 1111 0000 XXXX YYYY 1111 1111 XXXX YYYY

指令操作码扩展举例3: … 15条三地址指令 0000 XXXX YYYY ZZZZ 1110 XXXX YYYY ZZZZ 1111 … OP A1 A2 A3 4位 OP A1 OP A1 A2 OP … 15条三地址指令 0000 XXXX YYYY ZZZZ 1110 XXXX YYYY ZZZZ 扩展标志 1111 … 15条二地址指令 1111 0000 XXXX YYYY 1111 1110 XXXX YYYY 扩展标志 1111 1111 … 16条一地址指令 1111 1111 0000 XXXX 1111 1111 1111 XXXX

指令操作码扩展举例4: … 15条三地址指令 0000 XXXX YYYY ZZZZ 1110 XXXX YYYY ZZZZ 1111 … OP A1 A2 A3 4位 OP A1 OP A1 A2 OP … 15条三地址指令 0000 XXXX YYYY ZZZZ 1110 XXXX YYYY ZZZZ 扩展标志 1111 … 15条二地址指令 1111 0000 XXXX YYYY 1111 1110 XXXX YYYY 扩展标志 扩展标志 1111 1111 … 15条一地址指令 1111 1111 0000 XXXX 1111 1111 1110 XXXX 1111 1111 1111 … 16条零地址指令 1111 1111 1111 0000 1111 1111 1111 1111

指令操作码扩展举例5: 0000 XXXX YYYY ZZZZ 1110 XXXX YYYY ZZZZ 1111 1110 0000 XXXX 1111 1110 1111 XXXX 1111 1111 1111 0000 1111 1111 1111 1111 16条零地址指令 1111 0000 XXXX YYYY 1111 1101 XXXX YYYY 1111 1111 0000 XXXX 1111 1111 1110 XXXX 15条三地址指令 14条二地址指令 16条一地址指令 15条一地址指令 31

原则: 使用频度最高的指令操作码应该最短 P142 表5.1

六、 数据的表示 数据的类型 32位计算机 数据边界对齐 逻辑数、定点数、浮点数、十进制数、字符串、数组 可以设置专门的指令,或者不设置,各有利弊 32位计算机 支持字节、半字、 字、双字运算 数据边界对齐 浪费空间 减少访问次数 提高效率 大小端 单字长数据由4个字节组成,共32位。双字长数据由8个字节组成,共64位。 这种多字节数据地址编排格式称为数据边界对齐,其基本要求是一个数据字存放在一个完整的数据单元中,一次访存操作能够读出一个完整的数据字。如图4-4所示。 当一个数据字或一个双字长数据字在主存单元中存放时,可以把低位字节数据放在字节地址小的字节内;也可按照相反次序存放,低位字节数据放在字节地址大的字节内,高位字节放在字节地址小的字节内。前者称小数端数据存储方式,后者称大数端数据存储方式。 存储器中的数据存放

5.3 寻址方式 存储器地址: 寻址方式: 形成操作数或指令地址的方式。和计算机的硬件关系密切。 指令寻址方式 数据寻址方式 某个操作数或某条指令存放在某个存储单元时其存储单元的编号。 寻址方式:   形成操作数或指令地址的方式。和计算机的硬件关系密切。 指令寻址方式 数据寻址方式 顺序寻址方式 跳跃寻址方式 在指令中,由于指令字长有限,且主存地址位数太多,通常在指令的地址码中不直接给出被运算数在主存中存放的地址,而是给出寻找操作数有效地址的编码方法和位移量,位移量有时又叫形式地址。寻找操作数有效地址的方式叫寻址方式。 设置不同寻址方式的目的,除了扩展可以访问的主存容量外,也是为了在程序中更加灵活地指定操作数的存放位置,特别是在重复执行的程序段中以及对某些数据结构类型进行操作时,可以不修改程序就完成对不同数据的操作。 直接寻址 寄存器寻址 基址寻址 变址寻址 间接寻址 相对寻址 立即数寻址 堆栈寻址

一、 指令寻址方式 1. 顺序寻址方式 2. 跳跃寻址方式 指令地址在内存中按顺序安排和执行; 使用程序计数器/指令指针寄存器PC来计数指令的顺序号,即指令在内存中的地址。 2. 跳跃寻址方式 当程序转移执行的顺序时,采取跳跃寻址方式; 即下条指令的地址码是由本条指令给出; 可以实现程序转移或构成循环程序; 如各种条件转移或无条件转移指令。 1. 顺序寻址方式    指令地址在内存中按顺序安排,当执行一段程序时,通常是一条指令接一条指令的顺序执行。    从存储器取出第一条指令,然后执行这条指令;接着从存储器取出第二条指令,在执行第二条指令; 接着再取出第三条指令……这种程序顺序执行的过程,我们称为指令的顺序寻址方式。    为此,必须使用程序计数器(又称指令指针寄存器)PC来计数指令的顺序号,该顺序号就是指令在内 存中的地址。 2. 跳跃寻址方式   当程序转移执行的顺序时,指令的寻址就采取跳跃寻址方式。所谓跳跃,是指下条指令的地址码不是 由程序计数器给出,而是由本条指令给出。程序跳跃后,按新的指令地址开始顺序执行。指令计数器的 内容也必须相应改变,以便及时跟踪新的指令地址。采用指令跳跃寻址方式,可以实现程序转移或构成循 环程序,从而能缩短程序长度,或将某些程序作为公共程序引用。指令系统中的各种条件转移或无条件转 移指令,就是为了实现指令的跳跃寻址而设置的。

二、数据寻址方式 1. 立即数寻址方式 含义:地址字段给出的是可以立即使用的操作数实际值,称立即寻址。 特点:省去读操作数时访存时间,加快指令执行速度; 精度较低,而且立即数不能再修改。 格式: 适合于访问一些固定不变的常数。 例如:在IBM-PC指令系统中 MOV AX,05FFH 操作码OP 方式字M 立即数n 1. 立即数寻址方式 在指令中直接给出操作数, 节省读操作数时访存时间,加快了指令执行速度。操作数放在指令中原来的地址码字段中。由于程序运行中,指令是不能改变的,因而立即数寻址方式中的操作数是不能改变的。这种方式适合于访问一些固定不变的常数。 立即数寻址方式由操作码或寻址方式字段指定。

2. 直接寻址方式 含义:指令地址码中直接给出操作数存放的有效地址。 特点:指令字长限制了一条指令所能够访问的最大主存空 间,可以使用可变字长指令格式来解决此局限性。 有效地址是EA=A,A单元的内容是操作数 例如: MOV AX,[3000H]; 操作码直接表示寻址方式 单独字段M表示寻址方式

3.寄存器寻址方式 CPU内部设置有一定数量的通用寄存器,用以存放操作数、操作数地址或中间结果。 寄存器寻址 操作数在寄存器中存放,指令的地址码只需给出寄存器号; 指令字长较短,取操作数不需访问主存,指令执行速度较快。 如在PDP-11机中: ADD R0,R1; (R0) + (R1) → R1 IBM PC中: MOV AX, BX 优点:有效压缩指令字长, 加快存取速度, 编程灵活。 当操作数不放在内存中,而是放在CPU的通用寄存器中时,可采用寄存器寻址方式。此时指令中给出的 操作数地址不是内存的地址单元号,而是通用寄存器的编号。    寄存器间接寻址方式与寄存器寻址方式的区别在于:指令格式中的寄存器内容不是操作数,而是操作 数的地址,该地址指明的操作数在内存中。 在计算机中,运算器中的数据寄存器数目越多,运算越方便,还可以减少访存次数。 运算器中的数据寄存器称为通用寄存器,各个寄存器的作用,地位都是一样的。 计算机执行程序时,操作数在通用寄存器中存放,取数时不必访问存储器,这样可以加快程序的执行速度。 在相应的指令地址码中,只要给出寄存器号即可。例如:有4个通用寄存器,则用00、01、10、11分别表示4个通用寄存器的编号,4个寄存器也可分别用R0、R1、R2、R3表示,称为寄存器地址。 寄存器地址位数少,指令字长较短,一条指令中可以设置多个寄存器地址。在寄存器寻址的指令中,一般给出两个寄存器地址,相当于二地址指令,指令格式中,除了操作码外,还给出源寄存器编号和目的寄存器编号,分别称为RS、RD,为使用通用寄存器存放操作数的指令带来很多方便。

寄存器寻址方式 在一地址指令中若使用寄存器寻址,指令中给出一个源寄存器号Ri,另一个操作数隐含指定放在累加寄存器AC中,且AC还用来存放运算结果。寄存器直接寻址指令格式如图4-10所示。

4. 间接寻址方式 含义: 指令字中地址码字段给出的是操作数地址的地址。 存放操作数的有效地址是EA=(A), 格式: 指令中必须给出间接寻址的标志; 存放操作数地址的寄存器或主存单元又叫地址指针 / 指示器; 特点:需多次访问内存,且占用主存储器单元多; 操作码OP 。。。 地址A 指令地址码中给出的既不是操作数,也不是操作数地址,而是存放操作数地址的主存单元地址,访问一次主存后,才可得到操作数有效地址,这种方式称为一次间接寻址方式。存放操作数地址的寄存器或主存单元又叫地址指针。 指令中必须给出间接寻址的标志,以便与直接寻址等方式相区分。 存放操作数的有效地址是EA=(D)=A,即指令地址码指定单元D的内容是EA,而EA单元的内容(主存A单元的内容)是操作数。   间接寻址方式是早期计算机中经常采用的方式,但由于两次访存,影响指令执行速度,现在已不大使用。 (2)优缺点: B、缺点:(a)多次访问内存,增加了指令的执行时间; (b)占用主存储器单元多。 A、优点:实现简便,对编程带来较大的灵活性,对程序编制能带来较大的灵活性表现在: (I)间接寻址方式的指令可以访问大的存储空间,扩大了指令的寻址能力。 (II)当操作数地址改变时,只需修改间接地址指示器的单元内容,而不必修改指令,原指令的功能照样实现。这给程序编制带来很大方便。

寄存器间接寻址: 寄存器间接寻址方式, 操作数有效地址 EA=(Ri) IBM PC中: MOV AX, [BX] 寄存器寻址时,指令中指定的寄存器中存放的不是操作数而是操作数的地址时,称为寄存器间接寻址。 此种方式,要读操作数必须访问主存,但找操作数有效地址,不访问主存。这种指令的字长也较短,其指令格式如图4-11所示。 寄存器间接寻址方式操作数有效地址EA=(Ri)=E 特别强调,Ri的内容不是操作数,而是操作数的地址。要找到操作数,还需访主存。操作数在存储器中存放,从寻找操作数的角度看,应属于存储器型寻址。但指令格式属于寄存器型寻址,指令中给出的是寄存器编号。 该类指令是寄存器直接寻址,还是寄存器间接寻址,一般由操作码指定,或是由地址码字段的寻址方式位来决定。 有些计算机的指令是二地址指令,一个地址是寄存器号,另一个地址是存储器地址。 IBM PC中: MOV AX, [BX]

存储器间接寻址: 直接地址 A A EA EA (3)间接寻址可分为一级间接寻址和多级间接寻址。 例如:在IBM-PC指令系统中 MOV AX,[BX]

5. 基址寻址方式 含义:将CPU中基址寄存器的内容加上指令格式中的形式地址而形成操作数的有效地址。 有效地址: EA=( R b )+A= E 其中R b为基址寄存器, A为位移量(disp) 指令格式: 下页图。 特点: 实现多道程序的定位 扩容:可以扩大寻址能力。 5. 基址寻址方式 在多用户的计算机中,为每一个用户分配一个存储空间,每个用户按自己的逻辑地址编程。在程序装入机器中运行时,为每个用户指定一个基地址,用户程序实际存放的地址为基地址与其逻辑地址之和,不同用户使用不同的基地址,占用不同的存储空间。这种寻址方式称为基址寻址方式。在计算机中需设置专门的基址寄存器,其内容由系统指定。 基址寻址指令格式如图4-9所示。 存放操作数的有效地址是EA=(Rb)+D=E,其中Rb为基址寄存器。 基址寻址方式是将CPU中基址寄存器的内容加上指令格式中的形式地址而形成操作数的有效地址。 它的优点是可以扩大寻址能力。同形式地址相比,基址寄存器的位数可以设置得很长,从而可以在较大的 存储空间中寻址。 MOV AX, [BX+4];

A (Rb)+A=E 基址寄存器 / 通用寄存器 基址寻址

6. 变址寻址方式 LDR R0, [R1, #4]! 含义: 把CPU中某个变址寄存器的内容与偏移量A相加来形 成操作数有效地址。 有效地址: EA=(RX)+A ; 指令格式: 指令中应有变址寻址标志,指出有效地址码如何形成; 还有专门的变址寄存器RX ,其内容称为变址量; 特点: 实现程序块的规律性变化适合于对一组数据进行访问 与基址寻址的区别: 用户程序无权操作和修改基址R,由系统软件管理控制程序使用特权指令来管理的。 变址寻址方式与基址寻址方式计算有效地址的方法很相似,它把CPU中某个变址寄存器的内容与偏移 量D相加来形成操作数有效地址。 但使用变址寻址方式的目的不在于扩大寻址空间,而在于实现程序块的 规律性变化。 指令中的地址码位数有限,为了扩大访存容量,常常采用变址寻址方式。规定指令中的地址码与另外一个寄存器的内容相加,得到的结果才是操作数的有效地址。 变址寻址方式的指令中应有变址寻址标志,指出有效地址码如何形成,同时应该设有专门的变址寄存器,其内容称为变址量,其指令格式如图4-7所示,其中 变址寄存器XR中数据K称变址量; 操作数的有效地址:EA=(XR)+D=K+D=E;E单元的内容是操作数。 LDR R0, [R1, #4]!

A RX

相对寻址方式 含义: 把指令中地址码部分给出的偏移量与程序计数器PC的值之和作为操作数的地址或转移地址; PC的内容是当前执行指令的地址。 存放操作数有效地址 EA=(PC)+A=E 地址码部分A给出的叫位移量,一个固定的数值。 当前指令的地址是(PC)单元,而指令使用的操作数放在距本条指令地址间隔为D的那个单元中。 特点: 转移地址不固定,随pc值的变化而变化,相对位移量可正可负 (1)   含义:把程序计数器PC作为基本地址寄存器,指令字中的形式地址码作为位移量,则有效地址EA=(PC)+A。相对寻址主要用于转移指令。 JZ rel ;A=0,(PC)+ 2 + rel→(PC),累加器中的内容为0, 则转移到偏移量所指向的地址,否则程序往下执行

相对寻址方式 主存储器 OP IR 指令1 - ALU 指令2 + 指令3 PC 指令地址 A A A (2) 特点: (2)   特点: (A)位移量可正、可负,通常用补码表示。若位移量为n位,正向有2n-1-1个位置,负向有2n-1个位置,程序可以直接访问的实际存储空间是2n个位置的小块,或称为一页。 (B)位移量是操作数位置与本指令之间的相对距离。 + A 指令3 PC 指令地址

其他寻址方式 基址变址方式 段寻址方式 块寻址方式 堆栈寻址方式 Intel 8086/8088中基址变址寻址方式 (基址寄存器)+ (变址寄存器)+ 指令地址码A 段寻址方式 块寻址方式 堆栈寻址方式 微型机中采用了段寻址方式,例如它们可以给定一个20位的地址,从而有1M存储空间的直接寻址能力。 为此将整个1M空间存储器以64K为单位划分成若干段。在寻址一个内存具体单元时,由一个基地址再加上某 些寄存器提供的16位偏移量来形成实际的20位物理地址这个基地址就是CPU中的段寄存器。在形成20位物 理地址时,段寄存器中的16位数会自动左移4位,然后以16位偏移量相加,即可形成所需的内存地址。 块寻址方式   块寻址方式经常用在输入输出指令中,以实现外存储器或外围设备同内存之间的数据块传送。块寻址 方式在内存中还可用于数据块搬家。 块寻址时,通常在指令中指出数据块的起始地址(首地址)和数据 块的长度(字数或字节数)。   如果数据块是变长的,可用三种方法指出它的长度:   (1)指令中划出字段指出长度;   (2)指令格式中指出数据块的首地址与末地址;   (3)由块结束字符指出数据块长度。 8、复合寻址方式: (A) 变址间址寻址方式 其含义是先将变址寄存器的内容X和形式地址A相加得到A+X,然后再作间接寻址,得到操作数的有效地址。故操作数的有效地址为: EA=(A+X) (B)  间址变址寻址方式 含义是先将形式地址取间接变换(A)=N,然后把N和变址寄存器的内容X相加,得到操作数的有效地址。故操作数的有效地址为: EA=N+X=(A)+X (C)  Intel 8086/8088中基址变址寻址方式 基址寄存器可以采用BX或BP,变址寄存器可以用SI或DI,有效地址是通过将基址寄存器中的值、变址寄存器中的值和位移量三这相加而求得的

5.4 指令类型 指令系统决定了计算机的基本功能。 指令的替代性 直接影响到操作系统和编译程序的难易程度 并不是每条指令都是不可替代的 可以用程序段模拟某些指令的执行 1. 定点指令、浮点指令 为了使小型机、微型机结构简单,一般不设浮点指令。大、中型计算机和用于科学计算的机器均设浮点指令。小型机也有设浮点选件运算部件的,可供用户选择。 2. 字指令、字节指令、位处理指令 字节指令用于字符处理,在数据处理中非常有用。位处理指令对一个字中指定位进行运算,通常包括置“1”、置“0”及测试各种逻辑操作。 3. 字符串指令 字符串用于表示名称、数据、记录和文本等。一个字符串占据一个连续的字节存储序列,通常用字符串的第一个字符地址及字符串长度来表示。 4. 十进制运算指令及数字串指令 在商业及统计方面,输入输出的数据量很大,且多为十进制数,如果不设十进制指令,输入时要进行十进制转换二进制处理;输出结果时,又要进行二进制转换十进制换算。运算本身很简单,但转换花去很多时间。为了提高效率,专门设置十进制运算指令。 为了提高十进制数表示的精度和数据范围,又设置了数字串指令。 5. 向量指令 在多项式求解及气象数据处理中,广泛采用向量运算。大型机中对应设置了向量指令。对参加运算的每个向量需给出3个参数: 基地址,指向该向量的第1个元素。位移量,指出参加运算的元素与基地址的位移量,起始地址等于基地址与位移量之和。 向量长度,用于检查向量元素的地址是否越界,向量指令应当给出两个源向量及结果向量的9个参数,可直接对整个向量或矩阵进行求和、求积等运算。

指令分类 按操作数据类型分类 按指令功能分类 1. 定点指令、浮点指令 2. 字指令、字节指令、位处理指令 3. 字符串指令 4. 十进制运算指令及数字串指令 5. 向量指令 按指令功能分类 1. 数据传送类指令 2. 运算类指令 3. 程序控制类指令 4. 输入输出类指令 1. 定点指令、浮点指令 为了使小型机、微型机结构简单,一般不设浮点指令。大、中型计算机和用于科学计算的机器均设浮点指令。小型机也有设浮点选件运算部件的,可供用户选择。 2. 字指令、字节指令、位处理指令 字节指令用于字符处理,在数据处理中非常有用。位处理指令对一个字中指定位进行运算,通常包括置“1”、置“0”及测试各种逻辑操作。 3. 字符串指令 字符串用于表示名称、数据、记录和文本等。一个字符串占据一个连续的字节存储序列,通常用字符串的第一个字符地址及字符串长度来表示。 4. 十进制运算指令及数字串指令 在商业及统计方面,输入输出的数据量很大,且多为十进制数,如果不设十进制指令,输入时要进行十进制转换二进制处理;输出结果时,又要进行二进制转换十进制换算。运算本身很简单,但转换花去很多时间。为了提高效率,专门设置十进制运算指令。 为了提高十进制数表示的精度和数据范围,又设置了数字串指令。 5. 向量指令 在多项式求解及气象数据处理中,广泛采用向量运算。大型机中对应设置了向量指令。对参加运算的每个向量需给出3个参数: 基地址,指向该向量的第1个元素。位移量,指出参加运算的元素与基地址的位移量,起始地址等于基地址与位移量之和。 向量长度,用于检查向量元素的地址是否越界,向量指令应当给出两个源向量及结果向量的9个参数,可直接对整个向量或矩阵进行求和、求积等运算。

一、数据传送类指令 1.一般传送指令 2.数据交换指令 3.堆栈操作指令 数据复制的性质-- 数据从源地址传送到目的地址,而源地址中的内容保持不变。 常用助记符MOV表示,根据数据传送的源和目的的不同分: ⑴ 主存单元之间的传送。 ⑵ 从主存单元传送到寄存器。取数指令, 助记符LOAD。 ⑶ 从寄存器传送到主存单元。存数指令, 助记符STORE。 ⑷ 寄存器之间的传送。 ⑸ 批量数据传送 2.数据交换指令 数据传送也可以是双方向的,源操作数 目的操作数。 3.堆栈操作指令 进栈(PUSH)和出栈(POP)在程序中它们常成对出现。 1.一般传送指令 一般传送指令具有数据复制的性质,即数据从源地址传送到目的地址,而源地址中的内容保持不变。一般传送类指令常用助记符MOV表示,根据数据传送的源和目的的不同,又可分为: ⑴ 主存单元之间的传送。 ⑵ 从主存单元传送到寄存器。在有些计算机中,该指令用助记符LOAD表示。 ⑶ 从寄存器传送到主存单元。在有些计算机里,该指令用助记符STORE表示。 ⑷ 寄存器之间的传送。

堆栈与堆栈操作 (一)、堆栈的概念 这种特定顺 序可归结为“后进先出”(LIFO)或“先进后出”(FILO)。 堆栈是一种按特定顺序进行存取的存储区, 这种特定顺 序可归结为“后进先出”(LIFO)或“先进后出”(FILO)。 堆栈结构: 若干个存储单元(或寄存器)的有序集合,它顺序地存放一组元素。 操作/寻址: 数据的存取都只能在栈顶单元内进行。采用FILO或LIFO的存取方式。 主要作用: 暂存中断断点、子程序调用保护现场及传递参数。 在一般计算机中,堆栈主要用来暂存中断断点、子程序调用时的返回地址、状态标志及现场信息等,也可用于子程序调用时参数的传递,所以用于访问堆栈的指令只有进栈(压入)和出栈(弹出)两种。

(二) .堆栈的结构 1.寄存器堆栈 2.存储器堆栈 用一组专门的寄存器构成寄存器堆栈,又称为硬堆栈。 栈顶是固定的,寄存器组中各寄存器是相互连接的,它们之间具有对应位自动推移的功能,即可将一个寄存器的内容推移到相邻的另一个寄存器中去。 2.存储器堆栈 从主存中划出一段区域来作堆栈,又称为软堆栈。 堆栈的大小可变,栈底固定,栈顶浮动; 堆栈栈顶指针SP,简称栈指针; SP指定的主存单元为栈顶。 1.寄存器堆栈 用一组专门的寄存器构成寄存器堆栈,又称为硬堆栈。这种堆栈的栈顶是固定的,寄存器组中各寄存器是相互连接的,它们之间具有对应位自动推移的功能,即可将一个寄存器的内容推移到相邻的另一个寄存器中去。 从主存中划出一段区域来作堆栈,这种堆栈又称为软堆栈,堆栈的大小可变,栈底固定,栈顶浮动,故需要一个专门的硬件寄存器作为堆栈栈顶指针SP,简称栈指针。栈指针所指定的主存单元,就是堆栈的栈顶。 从主存中划出一段区域来作堆栈,这种堆栈又称为软堆栈,堆栈的大小可变,栈底固定,栈顶浮动,故需要一个专门的硬件寄存器作为堆栈栈顶指针SP,简称栈指针。栈指针所指定的主存单元,就是堆栈的栈顶 高地址 低地址 堆栈区

寄存器堆栈 寄存器堆栈结构

(三).堆栈的操作 1.进栈PUSH: 2. 出栈POP: POP X; ((SP))X 一个新的空栈顶单元,再把数据写入此栈顶单元; PUSH X;(SP)-1SP (X)(SP) 2. 出栈POP: 当数据弹出堆栈时,立即读出SP所指向的栈顶单元内容,把SP内容自动递增而指向新的栈顶位置。 POP X; ((SP))X (SP)+1SP

堆栈的栈底地址大于栈顶地址,通常栈指针始终指向栈顶的满单元。进栈时,SP的内容需要先自动减1,然后再将数据压入堆栈。 自底向上生成堆栈的进栈 堆栈的栈底地址大于栈顶地址,通常栈指针始终指向栈顶的满单元。进栈时,SP的内容需要先自动减1,然后再将数据压入堆栈。 (SP)-1→SP 修改栈指针 (A)→(SP) 将A中的数据压入堆栈 SP 2000 A 原栈顶 单元 现栈顶 单元 1FFF 1FFF 2000

出栈时,需要先将堆栈中的数据弹出,然后SP的内容再自动加1。 自底向上生成堆栈的出栈 出栈时,需要先将堆栈中的数据弹出,然后SP的内容再自动加1。 ((SP))→A 将栈顶内容弹出,送入A中 (SP)+1→SP 修改栈指针 SP 1FFF A 原栈顶 单元 现栈顶 单元 2000 2000 1FFF

(四)、 堆栈结构在计算机中的作用 1. 具有堆栈结构的机器使用零地址指令, 指令结构简单, 机器硬件简化。 2. 在中断技术中 (四)、 堆栈结构在计算机中的作用 1. 具有堆栈结构的机器使用零地址指令, 指令结构简单, 机器硬件简化。 2. 在中断技术中 保存“断点”和“现场”。 3. 实现程序调用 子程序嵌套调用、递归调用和传递参数。 设数据进栈方向为从高地址向低地址发展,当向堆栈压入数据时,SP的内容先自动递减而指向一个新的空栈顶单元,再把数据写入此栈顶单元;当数据弹出堆栈时,立即读出SP所指向的栈顶单元内容,再把SP内容自动递增而指向新的栈顶位置。即

二、运算类指令 1.算术运算类指令 2.逻辑运算指令 定点运算: ADD、SUB、MUL、DIV、INC、DEC 以及加进位、减借位,比较和求补。 状态标志位: 进位C、溢出V、全零Z、正负N和奇偶P等。 2.逻辑运算指令 基本操作:逻辑与,逻辑或与逻辑非3种基本操作; 逻辑加(OR); 逻辑乘(AND); 求反(NOT); 组合操作:异或 (XOR); 位操作: 位测试;位清除;位求反。 1.算术运算类指令 算术运算指令主要用于定点和浮点运算。这类运算包括定点(integer):加、减、乘、除指令,浮点(real)加、减、乘、除指令以及加1、减1、比较等,有些机器还有十进制算术运算指令。 算术运算指令要求根据运算结果特征置结果标记。 绝大多数算术运算指令都会影响到状态标志位,通常的标志位有进位、溢出、全零、正负和奇偶等。

3.移位类指令 ⑵逻辑移位 ⑶循环移位 乘除法 分为算术移位、逻辑移位和循环移位,左移和右移 ⑴算术移位 对无符号数移位,不必考虑符号问题。 对有符号数移位,必须保持操作数的符号不变。 ⑵逻辑移位 对无符号数移位,不必考虑符号问题。 ⑶循环移位 小循环(不带进位循环) 大循环(带进位循环) 移位指令分为算术移位、逻辑移位和循环移位三类,它们又可分为左移和右移两种。 ⑴算术移位 算术移位的对象是带符号数,在移位过程中必须保持操作数的符号不变。当左移一位时,如不产生溢出,则数值×2;而右移一位时,如不考虑因移出舍去的末位尾数,则数值÷2。 ⑵逻辑移位 逻辑移位的对象是无符号数,因此移位时不必考虑符号问题。 ⑶循环移位 循环移位按是否与进位位一起循环又分为两种: 小循环(不带进位循环) 大循环(带进位循环) 乘除法

SAL SAR SHL SHR ROL ROR RCL RCR 移位操作

三、程序控制类指令 包括条件转移,转子程序与子程序返回,中断等 三、程序控制类指令 包括条件转移,转子程序与子程序返回,中断等 1.转移指令 无条件转移和条件转移 无条件转移jump,它在执行时将改变程序的常规执行顺序,直接把程序转向该指令指出的新的位置执行。 条件转移branch,若条件满足时才执行转移,否则程序仍顺序执行。测试条件:比较/状态NVCZP。 转移地址 若采用相对寻址方式: (PC)+A→PC; 若采用绝对寻址方式: A→PC。 1.转移指令 在程序执行过程中,通常采用转移指令来改变程序的执行顺序。转移指令又分无条件转移和条件转移两种: ⑴ 无条件转移又称必转,它在执行时将改变程序的常规执行顺序,不受任何条件的约束,直接把程序转向该指令指出的新的位置执行,其助记符一般为JMP。 ⑵ 条件转移必须受到条件的约束,若条件满足时才执行转移,否则程序仍顺序执行。条件转移指令主要用于程序的分支,当程序执行到某处时,要在两个分支中选择一支,这就需要根据某些测试条件作出判断。

2.子程序调用指令 3.返回指令 子程序调用指令CALL / 转子指令。 转子与转移指令的区别: 在不同的程序段间转移; 子程序执行后返回调用点继续执行原程序; 保留返回地址及部分数据至堆栈。 3.返回指令 从子程序转向主程序的指令称为返回指令RET/return. 与转子指令配对使用,子程序的最后一条指令是返回指令。 从堆栈中取返回地址。 子程序是一组可以公用的指令序列,只要知道子程序的入口地址就能调用它。通常把一些需要重复使用并能独立完成某种特定功能的程序单独编成子程序,在需要时由主程序调用它们,这样做既简化了程序设计,又节省了存储空间。 主程序和子程序是相对的概念,调用其他程序的程序是主程序;被其他程序调用的程序是子程序。子程序调用指令,简称转子指令,其助记符一般为CALL。转子指令安排在主程序中需要调用子程序的地方,转子指令是一地址指令。 转子指令和转移指令都可以改变程序的执行顺序,但事实上两者存在着很大的差别: ⑴ 转移指令使程序转移到新的地址后继续执行指令,不存在返回的问题,所以没有返回地址;而转子指令要考虑返回问题,所以必须以某种方式保存返回地址,以便返回时能找到原来的位置。 ⑵ 转移指令用于实现同一程序内的转移;而转子指令转去执行一段子程序,实现的是不同程序之间的转移。 从子程序转向主程序的指令称为返回指令,其助记符一般为RET,子程序的最后一条指令一定是返回指令。返回地址存放的位置决定了返回指令的格式,通常返回地址保存在堆栈中,所以返回指令常是零地址指令。 转子和返回指令也可以是带条件的,条件转子和条件返回与前述条件转移的条件是相同的。

三、其他指令 4.浮点运算指令 5.十进制运算指令 适用于输入输出频繁的机器 6.向量指令 7.多处理机指令 浮点运算: FADD、FSUB、FMUL、FDIV 5.十进制运算指令 适用于输入输出频繁的机器 6.向量指令 7.多处理机指令 测试与设定指令 TST C JC AA GO: …… AA: CLEAR C CALL PROC SET C JMP GO 五、输入/输出类指令 这是用来处理机与外部设备之间进行通信的一类指令。以处理机为基准,信息由外部设备传向处理机称为输入(Input),信息由处理机传给外部设备称为输出(Output)。 对于主存和外设不采用统一编址技术的计算机来说,则需要有专门的I/O指令,如IBM PC就是一个典型的例子。 六、字符串处理指令 非数值处理能力; 字符串处理指令一般包括字符串传送、比较、查询、转换等指令。 七、处理机控制类指令 包括停机指令、等待指令、空操作指令、开中断指令、关中断指令、设置条件码指令等。 中断一般是计算机系统出现异常情况或特殊请求时随机产生的。一般在计算机中,中断指令作为隐指令不提供用户使用。但在某些计算机中设置了可供用户使用的中断指令,以实现系统功能调用和程序请求。如IBM PC的中断指令,PDP-11的自陷指令等。 八、特权指令 这类指令只能用于操作系统或其它系统软件,而不提供给用户使用,称特权指令。 一般来说,在单用户、单任务的计算机中不一定需要特权指令,而在多用户、多任务的计算机系统中,特权指令却是必不可少的。它主要用于系统资源的分配和管理,包括改变系统的工作方式、检测用户的访问权限、修改虚拟存储器管理的段表、页表和完成任务的创建和切换等。

非数值数据处理,字符串处理指令一般包括字符串传送MOV、比较CMP、扫描SCAN、查询、转换等指令。 OP R A 7.输入/ 输出类指令 用来处理机与外部设备之间进行通信的一类指令。 主存和外设采用独立编址方式时需专门的I/O指令。 8.字符串处理指令 非数值数据处理,字符串处理指令一般包括字符串传送MOV、比较CMP、扫描SCAN、查询、转换等指令。 9.处理机控制类指令 包括停机指令、等待指令、空操作指令、设置条件码 陷井指令trap/中断指令INT 。 10.特权指令 这类指令只能用于操作系统或其它系统软件,而不提供给用户使用。常用于多任务、多用户的系统中。 五、输入/输出类指令 这是用来处理机与外部设备之间进行通信的一类指令。以处理机为基准,信息由外部设备传向处理机称为输入(Input),信息由处理机传给外部设备称为输出(Output)。 对于主存和外设不采用统一编址技术的计算机来说,则需要有专门的I/O指令,如IBM PC就是一个典型的例子。 六、字符串处理指令 非数值处理能力; 字符串处理指令一般包括字符串传送、比较、查询、转换等指令。 七、处理机控制类指令 包括停机指令、等待指令、空操作指令、开中断指令、关中断指令、设置条件码指令等。 中断一般是计算机系统出现异常情况或特殊请求时随机产生的。一般在计算机中,中断指令作为隐指令不提供用户使用。但在某些计算机中设置了可供用户使用的中断指令,以实现系统功能调用和程序请求。如IBM PC的中断指令,PDP-11的自陷指令等。 八、特权指令 这类指令只能用于操作系统或其它系统软件,而不提供给用户使用,称特权指令。 一般来说,在单用户、单任务的计算机中不一定需要特权指令,而在多用户、多任务的计算机系统中,特权指令却是必不可少的。它主要用于系统资源的分配和管理,包括改变系统的工作方式、检测用户的访问权限、修改虚拟存储器管理的段表、页表和完成任务的创建和切换等。

5.5 指令系统的兼容性 指令系统的兼容性 硬件发展与现有软件的兼容性问题 向上兼容 指令集增加指令不影响兼容性 1978年 确立x86地位创造商业奇迹的CPU——8086。这个处理器标志着x86王朝的开始,为什么要纪念英特尔x86架构25周年?主要原因是从8086开始,才有了目前应用最广泛的PC行业基础。 1982年,英特尔发布了80286处理器,也就是俗称的286。这是英特尔第一个可以运行所有为其撰写的处理器,在发布后的六年中,全球一共交付了一千五百万台基于286的个人电脑。 1985年 真带领我们进入32位时代的CPU——80386,让我们进入了32位元的世代。 1989年 首尝RISC性能提升4倍的CPU——80486 1993年 第一款与数字无关的CPU——Pentium     1995年 首款专为服务器设计的CPU——Pentium Pro 1997年 将多媒体技术摆上台面的CPU——Pentium II 1999年 多事之秋!赛扬/奔3/奔3至强齐聚首 2000年 空前强大经久不衰的系列CPU——Pentium 4 2000年 空前强大经久不衰的系列CPU——Pentium 4 2001年 里程碑似的64位时代到来——Itanium 2003年 移动、网络、节能的铁骑——Pentium M

X86体系结构发展 指令系统的兼容性 1978年 确立x86地位8086 1993年 Pentium 1982年,80286处理器 1995年 首款专为服务器设计的CPU—Pentium Pro 1985年 32位时代的80386 1997年 将多媒体技术摆上台面—Pentium II 1989年 首尝RISC的CPU—80486 1999年 赛扬/奔3至强齐聚首 2000年 Pentium 4 2003年 Pentium M 1978年 确立x86地位创造商业奇迹的CPU——8086。这个处理器标志着x86王朝的开始,为什么要纪念英特尔x86架构25周年?主要原因是从8086开始,才有了目前应用最广泛的PC行业基础。 1982年,英特尔发布了80286处理器,也就是俗称的286。这是英特尔第一个可以运行所有为其撰写的处理器,在发布后的六年中,全球一共交付了一千五百万台基于286的个人电脑。 1985年 真带领我们进入32位时代的CPU——80386,让我们进入了32位元的世代。 1989年 首尝RISC性能提升4倍的CPU——80486 1993年 第一款与数字无关的CPU——Pentium     1995年 首款专为服务器设计的CPU——Pentium Pro 1997年 将多媒体技术摆上台面的CPU——Pentium II 1999年 多事之秋!赛扬/奔3/奔3至强齐聚首 2000年 空前强大经久不衰的系列CPU——Pentium 4 2000年 空前强大经久不衰的系列CPU——Pentium 4 2001年 里程碑似的64位时代到来——Itanium 2003年 移动、网络、节能的铁骑——Pentium M

5.6 精简指令系统计算机RISC CISC的缺点:复杂易错,开发成本高,20-80,不利流水 RISC的产生与发展 RISC的特点 计算机执行程序所需时间P P= I ×CPI ×T I -- 编译后的指令数↑ CPI -- 执行每条指令的平均周期数↓ T-- 机器周期时间↓ 典型RISC机器: ARM、SPARC、DLX、MIPS、 power PC、龙芯

RISC的三个要素: RISC的主要特点 (1)一个有限的简单的指令集; (2)CPU配备大量的通用寄存器; (3)强调对指令流水线的优化。 优先选取使用频率最高的简单指令或常用的不复杂的指令; 指令长度固定,格式种类少,寻址方式少; 只有取数和存数指令访问存储器,其余指令访问寄存器; CPU中寄存器数量多; 大部分指令在一个或小于一个机器周期内完成; 硬布线控制逻辑为主; 一般用高级语言编程,编译优化减少时间.

主要特征对比 CISC RISC 指令系统 复杂,庞大 简单,精简 指令数目 一般大于200 一般小于100 指令格式寻址方式 一般大于4 一般小于4 指令字长 不固定 等长 可访存指令 不加限制 只有LOAD/STORE 各种指令 使用频率相差很大 相差不大 指令执行时间 相差很大 多数在一个周期内完成 优化编译实现 很难 较容易 程序源代码 长度较短 较长 控制器实现方式 大多数为微程序控制 大多数为硬布线控制 软件系统开发时间 较短

加法指令举例 假设R1, R2与R3,R4分别存放两个双字长数据,求其相加的和 1。指令集包含带进位加法指令 K: ADD R2, R4 K+1: ADC R1, R3

加法指令举例 假设R1, R2与R3,R4分别存放两个双字长数据,求其相加的和 2。指令集不包含带进位加法指令 K: ADD R2, R4 K+1: BCC K+3 ;C=0,无进位,则转移 K+2: ADD 1, R1 K+3: ADD R1, R3

减法指令举例 假设R1, R2与R3,R4分别存放两个双字长数据,求其差 K: SUB R2, R4 K+1: BCC K+3 ;C=0,无借位,转移 K+2: ADD #1, R3 K+3: SUB R1, R3

减法指令举例 0010 1100 +1110 0110 0001 0010 情况1:够减 被减数:R1 R2 减数:R3 R4 0010 1100 0001 1010 -Y的补码:1110 0110 0010 1100 +1110 0110 0001 0010 低位相减,若不够减, C为1,够减,C为0 2.高位相减,若上次 C=0,减数取补码, C=1,减数取反码。 无借位,C为0 加补码

减法指令举例 0010 1100 +1110 0010 0001 1110 情况2:不够减 被减数:R1 R2 减数:R3 R4 0010 1100 0001 1110 -Y的补码:1110 0010 0010 1100 +1110 0010 0001 1110 低位相减,若不够减, C为1,够减,C为0 2.高位相减,若上次 C=0,减数取补码, C=1,减数取反码。 有借位,C为1 加反码