《第二章计算机原理.pdf》由会员分享,可在线阅读,更多相关《第二章计算机原理.pdf(63页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 COMPUTER PRINCIPLE Introduction to Instruction Set 2.1 什么是计算机的语言?什么是计算机的语言? COMPUTER PRINCIPLE 2.1.1 指令系统概述 25482+426858=? a=25482; b=426858; c=a+b; STORE a 25482; STORE b 25482; ADD c,a,b; 010100101001 011100101010 100110000010 . 自然语言 高级程序语言 汇编语言 机器语言 COMPUTER PRINCIPLE 2.1.1 指令系统概述 010100101001 0
2、11100101010 100110000010 . 机器“语言” 二进制:0和1 硬件:逻辑电路 “指令” 计算机实现某个基本操作的命令 “指令系统” 一台计算机的 所有指令 集合 指令:指令:0101110010101010 基本操作:基本操作:load r1 1382 COMPUTER PRINCIPLE 2.1.1 指令系统概述 指令系统 Applications OS Compiler Instruction Processing Input/ Output Datapath & Control Digital Design Circuit Design 计算机硬件和软 件的接口及界
3、面 软件层 抽象 硬件层 抽象 COMPUTER PRINCIPLE 2.1.1 指令系统概述 010100101001 011100101010 100110000010 . 指令系统哪来的? 3问:那是哪来的?莫非? 答:答:不是。不是。你以为是孙悟空啊你以为是孙悟空啊 1问:你是?怎么不认识! 答答: 叫我约翰吧叫我约翰吧(约翰约翰 冯冯.诺依曼诺依曼) 2问:哦,约翰兄,指令系统是不是计算 机自己产生的? 答:想想答:想想“存储程序存储程序”原理原理 存储程序原理 “存储程序”原理? 虽然我读书少,但在 第一章刚好学过 指令系统 010100101001 . 硬连线硬连线 / 微程序存
4、入微程序存入 把设计好的指令系统把设计好的指令系统 预先实现预先实现 / 存放在计存放在计 算机之中算机之中 现代计算机之父冯.诺依曼 COMPUTER PRINCIPLE 2.1.1 指令系统概述 指令系统放在哪儿很简单, 复杂的是如何设计指令系统 设计原则 完备性 有效性 规整性 兼容性 该有的都要有该有的都要有 简洁、加速常用操作、没有歧义简洁、加速常用操作、没有歧义 对称、匀齐、一致(简单源于规整)对称、匀齐、一致(简单源于规整) 之前之前/之后的都要能用之后的都要能用 COMPUTER PRINCIPLE 兼容性 “兼容性”? 不懂! 2.1.1 指令系统概述 向上(下)兼容:按某档
5、机器编制的 程序,不加修改的就能运行于比它高( 低)档的机器 向前(后)兼容:按某个时期投入市 场的某种型号机器编制的程序,不加修 改就能运行于在它之前(后)投入市场的 机器 时间 机器档次 高 低 向上兼容 向下兼容 向前兼容 向后兼容 当前机器 兼 容性 兼 容性 COMPUTER PRINCIPLE 2.1.1 指令系统概述 指令系统放在哪儿很简单, 复杂的是如何设计指令系统 设计原则 完备性 有效性 规整性 兼容性 一个较完善的指令系统应该包括 该有的都要有该有的都要有 简洁、加速常用操作、没有歧义简洁、加速常用操作、没有歧义 对称、匀齐、一致对称、匀齐、一致 之前之前/之后的都要能用
6、之后的都要能用 数据传送指令 算术运算指令 逻辑运算指令 系统控制指令 程序控制指令 Load/Save指令指令 Add等指令等指令 And等指令等指令 中断等指令中断等指令 Jump等指令等指令 输入输出指令 In/Out指令指令 COMPUTER PRINCIPLE 2.1 什么是计算机的语言? 2.1.1 指令系统概述 2.1.2 两种类型指令系统计算机:CISC与RISC COMPUTER PRINCIPLE 2.1.2 两种类型指令系统计算机CISC与RISC There are a thousand Hamlets in a thousand peoples eyes. 但是,指令
7、系统的设计大体上只有两种, 不是一千种 复杂指令集计算机 Complex Instruction Set Computer 精简指令集计算机 Reduce Instruction Set Computer CISC RISC COMPUTER PRINCIPLE 2.1.2 两种类型指令系统计算机CISC与RISC 大家好,我是 CISC (1) 指令系统复杂 (2) 指令周期长 (3) 各种指令都能访问存储器 (4) 有专用寄存器 (5) 采用微程序控制 (6) 难以进行编译优化生成高效目标代码 例:VAX-11/780小型机 16种寻址方式 9种数据格式 303条指令 一条指令包括12个字
8、节的操作码和下续N个操作数说明符 一个说明符的长度达1 10个字节 除专门的存储器读写指令外,运算指令也能访问存储器 出现较早,大而全 COMPUTER PRINCIPLE 2.1.2 两种类型指令系统计算机CISC与RISC (1) 采用微程序控制 (2) 有专用寄存器 (3) 各种指令都能访问存储器 (4) 指令系统复杂 (5) 指令周期长 (6) 难以进行编译优化生成高效目标代码 出现较早,大而全 研制周期长 难以保证设计的正确性,难以调试和维护 机器的时钟周期长,降低了系统性能 效率低下(IBM的测试发现) 指令系统中约占20的简单指令,在程序中的比例约为80% 在程序中比例20%的一
9、些复杂指令,占用了控制存储器容量的80% CISC存在的问题 大家好,我是 CISC COMPUTER PRINCIPLE Top 10 80 x86 Instructions Rank instructionInteger Average Percent total executed 1load22% 2conditional branch20% 3compare16% 4store12% 5add8% 6and6% 7sub5% 8move register-register4% 9call1% 10return1% Total96% Simple instructions dominat
10、e instruction frequency 简单指令占主要部分使 用频率高! COMPUTER PRINCIPLE 2.1.2 两种类型指令系统计算机CISC与RISC (1) 简化的指令系统 (2) 以寄存器-寄存器方式工作 (3) 指令周期短 (4) 采用大量通用寄存器,以减少访存次数 (5) 采用组合逻辑电路控制,不用或少用微程序控制 (6) 采用优化的编译系统,力求有效地支持高级语言程序 John cock & 小而精 Hi, 我是RISC COMPUTER PRINCIPLE 2.1.2 两种类型指令系统计算机CISC与RISC (1) 简化的指令系统 (2) 以寄存器-寄存器方
11、式工作 (3) 指令周期短 (4) 采用大量通用寄存器,以减少访存次数 (5) 采用组合逻辑电路控制,不用或少用微程序控制 (6) 采用优化的编译系统,力求有效地支持高级语言程序 John cock & 小而精 Hi, 我是RISC (1) 指令系统复杂 (2) 各种指令都能访问存储器 (3) 指令周期长 (4) 有专用寄存器 (5) 采用微程序控制 (6) 难以进行编译优化生成高效目标代码 出现较早,大而全 我是CISC COMPUTER PRINCIPLE 2.1.2 两种类型指令系统计算机CISC与RISC Eve, 么么哒!么么哒! ?#¥ #¥#%#& %&¥?# RISC CISC
12、 世上最远的距离 不是生与死 而是我是CISC, 你是RISC COMPUTER PRINCIPLE 2.1.2 两种类型指令系统计算机CISC与RISC 例:第一代RISC机 加州伯克利大学的RISC 斯坦福大学的MIPS IBM公司的IBM801 Hi, 我是RISC 现代处理器大多采用RISC体系结构 Intel x86为“兼容”需要,保留CISC风格,同时借鉴了RISC 思想 CISC与RISC之争 John cock & 小而精 COMPUTER PRINCIPLE 2.1.2 两种类型指令系统计算机CISC与RISC CISC与RISC的逐步融合 COMPUTER PRINCIPL
13、E 2.2 计算机的语言什么样?计算机的语言什么样? 指令格式 COMPUTER PRINCIPLE 如何找到操作对象? 操作的对象? 什么操作? 2.2.1 指令格式 操作码 地址码 指令是指挥计算机实现某个基本操作的命令 指令格式 指令含义 决决 定定 指令长度 操作码 操作数 寻址方式 COMPUTER PRINCIPLE 从指令执行过程看指令设计涉及的问题 取指令 指令译码 取操作数 执行 存结果 取下一条指令 Obtain instruction from program storage Determine required actions Locate and obtain ope
14、rand data Compute result value or status Deposit results in storage for later use Determine successor instruction 指令地址、指令长度(定长/变长) 指令格式、操作码编码、操作数类型 地址码格式、寻址方式、操作数格式和存放方式 操作类型、标志或条件码 结果数据位置 下条指令地址(顺序 / 转移) COMPUTER PRINCIPLE 2.2.1 指令格式 操作码 地址码 规整性 指令格式 指 令 长 度 的 设 计 1. 问:每条指令的长度可以是不一样的么?问:每条指令的长度可以是不
15、一样的么? 指令长度 一条指令包含的二进制代码位数。 取决于操作码长度、操作数地址长度和地址个数。 定长指令字:所有指令的长度相同。需向最长指令看 齐 变长指令字:不同指令的长度不同 设计原则之一 COMPUTER PRINCIPLE 2.2.1 指令格式 操作码 地址码 指令格式 操作码设计 1. 问:每条指令的操作码可以是几个?问:每条指令的操作码可以是几个? 设计原则之一 2. 答:用一定长度的不同编码表示不同的操作?答:用一定长度的不同编码表示不同的操作? 有效性 2. 问:具体的操作是怎么表示的?问:具体的操作是怎么表示的? 1. 答:只能是答:只能是一个。一个。 3. 答:不要着急
16、,等等下一节告诉你。答:不要着急,等等下一节告诉你。 3. 问:长度是一定的么?怎么编码?问:长度是一定的么?怎么编码? 完备性 设计原则之二 COMPUTER PRINCIPLE 2.2.1 指令格式 操作码 地址码 指令格式 地 址 码 设 计 问:每条指令的地址码可以是几个?问:每条指令的地址码可以是几个? 答:答:0到多个,看操作码的需要了到多个,看操作码的需要了 地址码个数与性能和实现难度密切相关 一条指令包含1个操作码和多个地址码 零地址指令 一地址指令 二地址指令(最常用) 三地址指令(RISC风格) 多地址指令 A2 A3 OP A1 A1 OP A2 OP OP A1 堆栈
17、累加器 通用寄 存器 COMPUTER PRINCIPLE 2.2.2 操作码设计 操作码的编码方式决定操作码的长度操作码的编码方式决定操作码的长度 定长操作码法 变长/扩展操作码法 操作码长度和指令长度什么关系?操作码长度和指令长度什么关系? 指令长度是否可变与操作码长度是否可变没有绝对联系 关注程序代码长度时:变长指令字、变长操作码 关注性能时:定长指令字、定长操作码 操作码 地址码 指令格式 操作码长度 操 作 码 长 度 问 题 COMPUTER PRINCIPLE 2.2.2 操作码设计 基本思想 :指令的操作码部分固定长度的编码。 例如:假设操作码固定为6位,则系统最多可表示26种
18、指令。 定长操作码 8 8 4 12 4 12 第1个半字 第2个半字 第3个半字 RR型 OP R1 R2 RX型 OP R1 X RS型 OP R1 R3 SI型 OP I SS型 OP B D B D B D L B1 D1 B2 D2 Ri:寄存器 X:变址器 Bi:基址器 Di:位移量 I:立即数 L:数的长度 译码简单,但有信息冗余。 特点 例:IBM360/370采用:8位定长 操作码,最多可有256条指令。 只提供了183条指令,有73种编 码为冗余信息。 IBM370指令格式 COMPUTER PRINCIPLE 2.2.2 操作码设计 基本思想 :指令的操作码部分采用可变长
19、度的编码 操作码的编码长度分成几种固定长的格式,操作码的位数随 地址数的减少而增加,被大多数指令集采用。 一个重要原则: 使用频度高的指令:短的操作码 使用频度低的指令:较长的操作码 缩短指令长度 减少程序总位数 增加指令字所能表示的操作信息 OP S D 存储地址1 存储地址2 4 6 6 16 16 OP R D 存储地址 7 3 6 16 OP FP D 8 2 6 16 OP X 8 8 OP D 10 6 16 OP R 13 3 OP 16 存储地址 存储地址 PDP-11中典型指令格式 优点 扩展操作码 COMPUTER PRINCIPLE 2.2.2 操作码设计 OP A1 A
20、2 A3 0000 0001 1110 A1 A1 A1 A2 A2 A2 A3 A3 A3 A2 A2 A2 A3 A3 A3 1111 1111 1111 0000 0001 1110 1111 1111 1111 1111 1111 1111 1111 1111 1111 0000 0001 1111 1111 1111 1111 1111 1111 1111 A3 A3 A3 0000 0001 1110 15条三地址指令 15条二地址指令 15条一地址指令 16条零地址指令 4 位操作码 8 位操作码 12 位操作码 16 位操作码 0 15 等长扩展操作码示例 (481216) 扩
21、展操作码 COMPUTER PRINCIPLE 例:某指令系统指令字长16位,每个地址码为6位。若二地址指令15 条,一地址指令34条,则剩下零地址指令最多有多少条? 解: 操作码按短到长进行扩展编码 二地址指令 (0000 1110) 一地址指令: 11110 (00000 11111);11111 (00000 00001) 零地址指令: 11111 (00010 11111) (000000 111111) 故零地址指令最多有: 3026=1527 种 2.2.2 操作码设计 扩展操作码分析题 COMPUTER PRINCIPLE 2.2.2 操作码设计 OP A1 A2 0000 00
22、01 1110 A1 A1 A1 A2 A2 A2 15条二地址指令 4 位操作码 0 15 1111 1111 1111 000000 000001 011111 A2 A2 A2 32条一地址指令 10 位操作码 1111 1111 100000 100001 A2 A2 2条一地址指令 10 位操作码 例:某指令系统指令字长16位,每个地址码为6位。若二地址指令15 条,一地址指令34条,则剩下零地址指令最多有多少条? COMPUTER PRINCIPLE 例:某指令系统指令字长16位,每个地址码为6位。若二地址指令15 条,一地址指令34条,则剩下零地址指令最多有多少条? 解: 操作码
23、按短到长进行扩展编码 二地址指令 (0000 1110) 一地址指令: 11110 (00000 11111);11111 (00000 00001) 零地址指令: 11111 (00010 11111) (000000 111111) 故零地址指令最多有: 3026=1527 种 2.2.2 操作码设计 操作码计算题 COMPUTER PRINCIPLE 2.2.2 操作码设计 OP A1 A2 0000 0001 1110 A1 A1 A1 A2 A2 A2 1111 1111 1111 000000 000001 111111 15条二地址指令 (25-2) 26条零地址指令 4 位操作
24、码 16 位操作码 0 15 1111 1111 1111 000000 000001 011111 A2 A2 A2 32条一地址指令 10 位操作码 1111 1111 100000 100001 A2 A2 2条一地址指令 10 位操作码 100010 100010 111111 COMPUTER PRINCIPLE 例:某指令系统指令字长16位,每个地址码为6位。若二地址指令15 条,一地址指令34条,则剩下零地址指令最多有多少条? 解: 操作码按短到长进行扩展编码 二地址指令 (0000 1110) 一地址指令: 11110 (00000 11111);11111 (00000 00
25、001) 零地址指令: 11111 (00010 11111) (000000 111111) 故零地址指令最多有: (25-2)26=1527 种 2.2.2 操作码设计 扩展操作码分析题 COMPUTER PRINCIPLE 2.2.2 操作码设计 回顾一下指令格式设计的基本原则 指令尽量短 指令编码必须具有唯一的解释 指令字长应是字节的整数倍 要有足够的操作码位数 均衡设计、指令尽量规整 合理选择地址字段的个数 COMPUTER PRINCIPLE 地址个数 地址的选择依赖于指令系统的结构 堆栈结构:零地址指令 累加器结构:一地址指令 通用寄存器结构:二、三地址指令 2.2.3 地址码结
26、构 地址个数越少地址个数越少指令长度越短指令长度越短指令功能越简单指令功能越简单 地址个数越少地址个数越少所需所需指令条数越多指令条数越多增加了程序复杂度和执行时间增加了程序复杂度和执行时间 指令中地址个 数03个 COMPUTER PRINCIPLE 一条指令包含1个操作码和多个地址码 零地址指令 (1) 无需操作数。如:空操作停机等 (2) 所需操作数为默认的。如:堆栈等 一地址指令 其地址既是源操作数地址,也是存放结果地址 (1) 单目运算:如:取反取负等 (2) 双目运算:另一操作数为默认的 如:累加器等 OP OP A1 2.2.3 地址码结构 COMPUTER PRINCIPLE
27、一条指令包含1个操作码和多个地址码 二地址指令二地址指令(最常用最常用) 分别存放双目运算中两个源操作数地址,并将其中一个地址作分别存放双目运算中两个源操作数地址,并将其中一个地址作 为存放结果地址为存放结果地址 三地址指令三地址指令(RISC风格风格) 分别为双目运算中两个源操作数地址和一个结果地址分别为双目运算中两个源操作数地址和一个结果地址 多地址指令多地址指令 用于成批数据处理的指令,如:向量指令用于成批数据处理的指令,如:向量指令 等等 A2 A3 OP A1 A1 OP A2 2.2.3 地址码结构 COMPUTER PRINCIPLE 例:Y =(AB)(CDE) 二地址指令二地
28、址指令 指令指令 操操 作作 MOVE SUB MOVE MUL ADD DIV Y,A Y,B T,D T,E T,C Y,T Y (A) Y(Y) (B) T (D) T(T)(E) T(T) + (C) Y(Y)(T) 一地址指令一地址指令 指令指令 操操 作作 D AC (D) E AC(AC)(E) C AC(AC) + (C) Y Y (AC) A AC (A) B AC(AC) (B) Y AC(AC)(Y) LOAD MUL ADD STOR LOAD SUB DIV STOR Y Y (AC) 2.2.3 地址码结构 COMPUTER PRINCIPLE 2.3 如何找到操作
29、数?如何找到操作数? 寻址方式寻址方式 COMPUTER PRINCIPLE 2.3 寻址方式 学习了操作码的编码之后,另一个问题就是地址码如何 编码。 地址码编码由操作数的寻址方式决定。 寻址方式 操作码 地址码 操作数操作数Data 存储器存储器 逻辑地址逻辑地址 物理地址物理地址 寻址方式:就是如何找到操作数存放位置的方法寻址方式:就是如何找到操作数存放位置的方法 COMPUTER PRINCIPLE 2.3.1 寻址方式的概念 你说的有道理你说的有道理,非常合理!非常合理! 但是但是地址码的位数有限地址码的位数有限,更大的操作数更大的操作数如何处理?如何处理? 操作码 地址码 操作数D
30、ata 为什么不能为什么不能直接把直接把操作数操作数放在地址码里面放在地址码里面, 这样就这样就不用寻址方式不用寻址方式了?了? 操作数只能这么多 位吗? 更大的数怎么办? COMPUTER PRINCIPLE 2.3.1 寻址方式的概念 你说的也有道理你说的也有道理 !但是,!但是,地址码的位数有限地址码的位数有限, 能放下多少个操作数地址?能放下多少个操作数地址? 而且,寄存器毕竟是非常少的而且,寄存器毕竟是非常少的啊!啊! 操作码 地址码 操作数物理地址 好吧,为什么不能好吧,为什么不能直接把直接把操作数地址操作数地址放在放在 地址码里面地址码里面,这样也就,这样也就不用寻址方式不用寻址
31、方式 了?了? 地址码太短,只能访问 2m个内存单元或寄存器 中的操作数? m COMPUTER PRINCIPLE 2.3.1 寻址方式的概念 你说的也有道理你说的也有道理 !但是,!但是,地址码的位数有限地址码的位数有限, 能放下多少个操作数地址?能放下多少个操作数地址? 而且,寄存器毕竟是非常少的而且,寄存器毕竟是非常少的啊!啊! 操作码 地址码 操作数物理地址 好吧,为什么不能好吧,为什么不能直接把直接把操作数地址操作数地址放在放在 地址码里面地址码里面,这样也就,这样也就不用寻址方式不用寻址方式 了?了? 寻址方式出现的目的 扩大访存范围 提高访问数据的灵活性和有效性 支持软件技术的
32、发展:多道程序设计 COMPUTER PRINCIPLE 通常寻址方式特指“操作数寻址” 指令系统中的寻址 寻找:指令 下一条指令在哪啊? 寻找:操作数 操作的对象放在哪了? 指令寻址 指令寻址简单 正常:PC增值 跳转 ( jump / branch / call / return ) :同操作数的寻址 操作数寻址 操作数寻址复杂 操作数的来源:寄存器 / 外设端口 / 主(虚)存 / 栈顶 操作数的数据结构:位 / 字节 / 半字 / 字 / 双字 / 一维表 / 2.3.1 寻址方式的概念 COMPUTER PRINCIPLE 2.3.2 基本寻址方式 立即数寻址 没错,就是之前讨论的不
33、 要寻址方式的方法 基本寻址方式(1) 操作码操作码 目的操作数目的操作数 Imme. Data Mod 源操作数 源操作数直接在指令中 指令地址字段直接给出操作数本身 立即数寻址只能作为双操作数指令的 源操作数 例:MOV AX,1000H 1.指令执行时间很短,无 需访存 2.操作数的大小受地址字 段长度的限制 3.广泛使用 特点 COMPUTER PRINCIPLE 存储器直接寻址 基本寻址方式(2) 操作数在存储器中,指令地址字段 直接给出操作数在存储器中的地址 EA = A,Operand = (A) 例:MOV AX,1000H 1.处理简单、直接 2.寻址空间受到指令的地址字段长
34、度限制 3.较少使用,8位计算机和一些16位计算机 操作码操作码 目的操作数目的操作数 A Mod 操作数操作数Data 存储器存储器 2.3.2 基本寻址方式 COMPUTER PRINCIPLE 寄存器直接寻址 基本寻址方式(3) 操作数在寄存器中,指令地址字段 直接给出存放操作数的寄存器编号 EA = R,Operand = (R) 例:MOV BX,AX 1. 只需要很短的地址字段 2. 无需访存,指令执行速度快 3. 地址范围有限,可以编程使用的通用寄存器不多 4. 使用最多,是提高性能的常用手段 操作码操作码 目的操作数目的操作数 Rn Mod 操作数操作数Data 通用寄存器组通
35、用寄存器组 2.3.2 基本寻址方式 COMPUTER PRINCIPLE 存储器间接寻址 基本寻址方式(4) 操作数和操作数地址都在存储器中 指令地址字段直接给出操作数地址在 存储器中的地址 EA = (A),Operand = (A) 例:MOV R1, (1000H) 寻址空间大,灵活,便于编程 至少需要两次访存才能取到操作数 执行速度慢 操作码操作码 目的操作数目的操作数 A1 Mod 操作数操作数Data 操作数地址操作数地址A2 存储器存储器 A2 A1 2.3.2 基本寻址方式 COMPUTER PRINCIPLE 寄存器间接寻址 基本寻址方式(5) 操作数在存储器中 操作数地址
36、在寄存器中 指令地址字段给出的寄存器的内容是操作 数在存储器中的地址 EA = (R),Operand = (R) 例:MOV AX,BX 比存储器间接寻址少访问存 储器一次 寻址空间大,使用比较普遍 操作码操作码 目的操作数目的操作数 Rn Mod 操作数Data 存储器存储器 Rn 2.3.2 基本寻址方式 操作数地址操作数地址A 通用寄存器组通用寄存器组 A COMPUTER PRINCIPLE 偏移寻址 基本寻址方式(6) 直接寻址+寄存器间接寻址 相对寻址: EA=(PC)+A 相对于当前指令处 位移量为A的单元 基址寻址: EA=(B)+A 相对于基址(B)处 位移量为A的单元 变
37、址寻址: EA=(I)+A 相对于形式地址A处位移量为(I)的单元 操作码 目的操作数 A Mod Rb 地址N 寄存器组 + N+A 存储器 N N+1 操作数Data EA = (R) + A 相对寻址 基址寻址 变址寻址 2.3.2 基本寻址方式 COMPUTER PRINCIPLE 基址寻址 变址寻址 对于一道程序,基址是不变的,程序中 的所有地址都是相对于基址变化 对于变址寻址,形式地址给出的是一个 存储器地址基准,变址寄存器存放的是 相对于该基准地址的偏移量 在基址寻址中,偏移量位数较短 而在变址寻址中,偏移量位数足以表示 整个存储空间 基址寻址立足于面向系统,主要是解决 程序逻辑
38、空间与存储器物理空间的无关 性 而变址寻址立足于用户,主要是为编写 高效访问一片存储空间的程序 2.3.2 基本寻址方式 COMPUTER PRINCIPLE 堆栈寻址 基本寻址方式(7) 零地址数 堆栈的结构:一段内存区域 栈底、栈顶 堆栈指针(SP):一个特殊寄存器,指 向栈顶 PUSH ( 从寄存器到堆栈) POP (从堆栈到寄存器) 栈 底 栈 顶 A SP 堆栈 2.3.2 基本寻址方式 COMPUTER PRINCIPLE 堆栈寻址 基本寻址方式(7) 堆栈操作示例 堆栈操作 出栈操作:POP Rn Rn (SP), SP (SP) + 2 A SP Rn A+2 堆栈堆栈 A D
39、ata Data A+2 SP 栈底栈底 2.3.2 基本寻址方式 COMPUTER PRINCIPLE MOV AX 500H Next Instruction 700H 800H 600H 300H 200H 250 251 252 400 500 752 800 900 例:累加器型指令例:累加器型指令 立即数寻址立即数寻址 MOV AX , 500HMOV AX , 500H 直接寻址直接寻址 MOV AX, 500HMOV AX, 500H 寄存器寻址寄存器寻址 MOV AX, BXMOV AX, BX 寄存器间接寻址寄存器间接寻址 MOV AX, BXMOV AX, BX 基址寻址
40、基址寻址 MOV AX, 500HBXMOV AX, 500HBX 基本寻址方式举例 PC=250 BX=400 AX=? 2.3.2 基本寻址方式 COMPUTER PRINCIPLE 方式 算法 立即 操作数=A 指令执行速度快 操作数幅值有限 直接 EA=A 有效地址计算简单 地址范围有限 间接 EA=(A) 有效地址范围大 多次存储器访问 寄存器 操作数=(R) 指令执行快,指令短 地址范围有限 寄间接 EA=(R) 地址范围大 一次存储器访问 偏移 EA=A+(R) 灵活 复杂 堆栈 EA=栈顶 指令短 应用有限 基本寻址方式的小结 主要优点 主要缺点 2.3.2 基本寻址方式 CO
41、MPUTER PRINCIPLE 方式 算法 立即 操作数=A 指令执行速度快 操作数幅值有限 直接 EA=A 有效地址计算简单 地址范围有限 间接 EA=(A) 有效地址范围大 多次存储器访问 寄存器 操作数=(R) 指令执行快,指令短 地址范围有限 寄间接 EA=(R) 地址范围大 一次存储器访问 偏移 EA=A+(R) 灵活 复杂 堆栈 EA=栈顶 指令短 应用有限 思考题:七种寻址方式中,哪些操作数在寄存器中?哪些操作数在存储器中? 基本寻址方式的小结 主要优点 主要缺点 2.3.2 基本寻址方式 COMPUTER PRINCIPLE (1)在操作码中给定寻址方式 如:MIPS指令中仅
42、有一个主(虚)存地址,且指令中仅有一、二种寻址方式 (2)专门的寻址方式位:如:X86指令 指令前缀指令前缀 段超越段超越 操作码操作码 寻址方式寻址方式 位移量位移量 立即数立即数 1/2字节字节 0/1字节字节 0/1字节字节 0/1/2字节字节 0/1/2字节字节 0/1字节字节 嗯嗯!问得非常好,让我来告诉你嗯嗯!问得非常好,让我来告诉你 那么多寻址方式,我怎么知道那么多寻址方式,我怎么知道具体的寻址具体的寻址 方式是怎么确定的啊?方式是怎么确定的啊? 寻址方式的确定 2.3.2 基本寻址方式 COMPUTER PRINCIPLE 在寻址的灵活性和硬件 的复杂性之间权衡 2.3.3 复
43、合寻址方式和寻址方式实例 间接寻址 复合寻址 相对寻址 间接寻址 变址寻址 间接相对式 EA =(PC)+ (A) 间接变址式 EA =(X)+ (A) 先间接 变址间接式 EA =(X)+ A) 相对间接式 EA =(PC)+ A) 后间接 COMPUTER PRINCIPLE 操作数的来源 立即数(立即寻址):直接来自指令 寄存器(寄存器寻址):来自32位 / 16位 / 8位通用寄存器 存储单元(其他寻址):需进行地址转换 逻辑地址线性LA (内存地址) 分段 分页 地址 (1) 8/16/32位偏移量A (显式给出) (2)段寄存器SR(段的起始地址;隐含或显式给出) (3) 基址寄存
44、器B (显式给出,任意通用寄存器皆可) (4) 变址寄存器I (显式给出,除ESP外任意通用寄存器皆可) 有比例变址和非比例变址。比例变址时要乘以比例因子S (1:8位 / 2:16位 / 4:32位 / 8:64位) 2.3.3 复合寻址方式和寻址方式实例 Pentium 处 理 器 寻 址 方 式 COMPUTER PRINCIPLE 段寄存器 SS CS 段选择符 段表项(段描述符) 存取权 段限 段基地址 基址寄存器 变址寄存器 比例因子S 1/2/4/8 偏移量 8/16/32位 x + + 线性地址 有效地址 段限 基址 存储器 线性地址空间 2.3.3 复合寻址方式和寻址方式实例 Pentium 处 理 器 寻 址 方 式 COMPUTER PRINCIPLE 立即(地址码A本身为操作数) 寄存器(通用寄存器的内容为操作数) 偏移量(地址码A给出8/16/32位偏移量) 基址(地址码B给出基址器编号) 基址带偏移量(一维表访问) 比例变址带偏移量(一维表访