指令集结构.ppt_第1页
指令集结构.ppt_第2页
指令集结构.ppt_第3页
指令集结构.ppt_第4页
指令集结构.ppt_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一讲指令集结构 指令集结构 InstructionSetArchitecture 即ISA 是微处理器的接口 包含了与该微处理器进行交互所需要的信息 但并不涉及微处理器自身如何设计和实现的细节 什么是指令集结构 ISA包括 微处理器的指令集 程序员可直接访问的寄存器的细节 访问内存所需的信息 微处理器如何响应中断 一 汇编语言指令 1 指令类型 1 数据传送指令 将数据从源地址传送到目的地址 而源地址中的数据保持不变 如Intel8086的MOV指令 从内存取数据到微处理器 将微处理器中的数据存到内存中 在微处理器内移动数据 输入数据到微处理器 从微处理器输出数据 2 数据运算指令 它是对一个或两个数据值 操作数 进行运算并存储结果 算术运算指令 加 减 乘 除 加1 减1 清除等指令 定点 浮点运算 逻辑指令 与 或 异或 非等运算 移位指令 算术 逻辑 循环等移位运算 运算类指令通常会影响状态位 例如Z 结果为0 N 结果为负 V 结果溢出 C 产生进位或借位 等 3 程序控制指令 控制程序执行顺序的指令 无条件转移与条件转移如Intel8086的JMP JZ JNZ JC JNC JN JNE JG JNG JL JNL等指令 调用指令和返回指令如Intel8086的CALL和RETURN指令 中断指令如Intel8086的INT指令 停机指令如Intel8085的HLT指令 2 数据类型 数值数据 无符号整型数 有符号整型数 浮点数据布尔数值 数据值常以0表示FALSE 以非0表示TRUE字符数据 字符编码标准 ASCII EBCDIC UNICODE等 3 寻址方式 寻址方式 addressingmodes 确定操作数地址的方法 形式地址 指令中直接给出的地址 有效地址 形式地址经一定的计算而得到的能直接访问主存的地址 常用寻址方式有如下几种 1 直接寻址方式 指令中直接给出操作所在主存单元的地址 即有效地址 AC 5 8简单 快速 主要用于超高速机 巨型机中 5 LDAC5 2 间接寻址方式 指令中给出的是存放操作数地址的主存单元地址 操作数地址的地址 AC 5 17 至少需访问二次主存才能取得操作数 慢 但灵活 便于编程 10 操作数17 操作数的地址10 5 M LDAC 5 3 寄存器直接寻址和寄存器间接寻址 寄存器直接寻址 指令中地址码部分给出某一通用寄存器名 所指定的寄存器中存放着操作数 寄存器间接寻址 指令中地址码部分给出某一通用寄存器名 所指定的寄存器中存放着操作数地址 AC R 较间址方式指令短 速度快 4 立即值寻址方式 指令中直接给出操作数 例如 LDAC 5 AC 5快 常用于提供常数 5 隐含寻址方式 该寻址方式并不明确地指出操作数 而是隐含了特定的寄存器 例如 CLAC该模式常用于用堆栈存储数据的CPU中 它们并不需要指定操作数 因为它暗示操作数一定来自堆栈 6 相对寻址方式 操作数的有效地址是指令中形式地址与程序计数器PC内容之和 例如 LDAC 5若 PC 12 则AC 17 12 10 PC M 操作数S 指令 5 LDAC 5 转移类指令常采用相对寻址方式 此方式为程序浮动提供了支持 7 变址寻址方式和基址寻址方式 变址寻址是指令中指定一变址寄存器 并在地址码部分给出一形式地址 变址寄存器的内容 称为变址值 与形式地址相加得操作数的有效地址 OP Rx IR D N 变址值 Rx M 操作数S D D 1 D 加法器 基址寻址中操作数的有效地址等于指令中形式地址与基址寄存器内容之和 除了用基址寄存器替换变址寄存器外 基址寻址方式和变址寻址方式完全一样 S Rb D 基址寻址原是大型机中用来将用户程序的地址 逻辑地址 转换成主存的实际地址 物理地址 的一种技术 图3使用如下寻址方式产生地址 a 直接 b 间接 c 寄存器直接 d 寄存器间接 e 立即数 f 隐含 g 相对 h 变址 4 指令格式 指令代码 instructioncode 汇编语言指令转换成对应的机器代码 以二进制数值的形式表现 位的不同分组代表着指令的不同部分 某一组可能代表要执行的操作 操作码 而其它的组则选取操作的操作数 考虑一个简单的例子A B C 该指令有一个操作 加法 两个源操作数 B和C 和一个目的操作数 A 如果微处理器可以执行16种不同的操作 加法是其中的一种 那么它需要4位来代表其中的操作 因为24 16 这里 假设位模式1010代表加法 而且假定对于这种操作仅有4种可能的操作数 A B C和D 微处理器需要两位来表示每一种操作数 如 00代表A 01代表B 10代表C 11代表D 图4采用 a 三操作数 b 二操作数 c 单操作数 d 0操作数的指令格式和计算A B C的汇编语言程序以及机器代码 微处理器可以设计成能运行具有3 2 1或0个操作数的指令 查看图4的代码 能发现较少的操作数通常转化为较多的指令来完成同样的任务 本例子简单地说明了三 二 一和零操作数指令的不同 实际上 这些指令需要比本例更多的位数 一个操作数字段可以指定一个任意的内存地址 而不只是四个寄存器中的一个 每个操作数可能需要16 32甚至更多的位数 另外还需要一些位用于指定每个操作数的寻址方式 二 指令集结构设计 设计指令集结构并没有魔术公式可言 相同的需求会产生不同的ISA设计 但每一种都是正确的 与许多的工程设计一样 在设计ISA规范时 必须在性能与大小和成本限制间有个评估折衷 完整性问题 就是说 该指令集是否有足够的指令可以让程序完成它必须的任务 正交性问题 如果指令不重叠或者不执行同样的操作 那么它们就是正交的 在最小的指令集中为程序员提供必需的操作 设计者可以优化ISA的另一个地方就是寄存器组 要考虑的其它问题 处理器必须向下兼容其它的微处理器吗 微处理器将处理何种类型和大小的数据 浮点数据 需要中断吗 需要条件指令吗 标志 flags 三 相对简单的指令集结构 存储器模型 该微处理器可以访问64K 216 字节的存储器 每字节8位 即64K 8的存储器 从外部设备输入或输出数据 都可以看作是访问内存 有三个寄存器 累加器 AC 寄存器R 1位零标志Z 包含16条指令 每一条都是8位指令代码 见表1 表1相对简单CPU的指令集 LDAC STAC JUMP JMPZ和JPNZ指令都需要16位的存储地址 此处用 表示 由于存储器的每一个字节都是8位宽 所以这些指令在存储器中每个都需要3字节 第一个字节包含指令的操作码 另外两字节对应地址 例如 25 JUMP1234H该指令以如下形式存储在存储器中 25 00000101 JUMP 26 00110100 34H 27 00010010 12H 注意 第二字节低8位 第三字节高8位 3字节格式1字节格式 下图显示了相对简单CPU的指令格式 图5相对简单CPU的指令格式 全部16条指令 数据传送指令 NOP LDAC STAC MVAC和MOVR 程序控制指令 JUMP JMPZ和JPNZ 数据运算指令 算术指令 ADD SUB INAC和CLAC逻辑指令 AND OR和XOR NOT 指令集结构的用法举例 用相对简单CPU编程计算1 2 n 或者 则其高级语言的代码片断如下 可以把数值n存储在标明为n的存储单元中 结果存在标明为total的内存单元处 内存单元i用于存储求和的次数 确定运算步骤如下 total 0 FORi 1TOnDO total total i 1 total 0 i 02 i i 13 total total i4 IFi nTHENGOTO2 实现这一算法的相对简单CPU的代码如下 CLACSTACtotalSTACiLoop LDACiINACSTACiMVACLDACtotalADDSTACtotalLDACnSUBJPNZLoop total 0 i 0 i i 1 total total i IFi nTHENGOTOLoop 下表显示了当n 5时代码的运行过程 怎样看待这个指令集结构 它满足了以教学为目的的设计目标 当我们在第6和7章中设计这种CPU时我们就会看到 其复杂度足以阐明很多CPU的设计原则 却又没有掉进自身复杂度的陷阱中 对于简单的应用程序来说 指令集完整 如果一个应用程序需要使用浮点型数据 它就不是十分完整 对于通用计算机 例如个人计算机 该指令集显然是不够的 该指令集是相当正交的 只是多了OR指令 但有时CPU的指令集不是完全正交更好一些 寄存器组是它最大的弱点 寄存器的缺乏导致执行任务较慢 并且降低了性能 四 实例 8085微处理器指令集结构 分析Intel8085微处理器的ISA 1 8085微处理器的寄存器组 通用数据寄存器 累加寄存器A 总是接收一个8位的算术或逻辑指令的结果 也为所有采用二操作数的指令提供一个操作数 六个通用寄存器 命名为B C D E H和L 可成对访问 B和C D和E H和L 寄存器对HL常用来指向内存单元 16位的堆栈指针寄存器SP 包含堆栈顶部的地址 5个标志 共同称为标志寄存器 符号标志S 表明算术或逻辑指令计算出的结果的符号 其中 值1表示负数 值0表示正数 或零 零标志Z 如果算术或逻辑运算指令产生的结果为0 则将Z置为1 否则Z为0 奇偶标志P 如果算术或逻辑运算结果中有偶数个1 则将P置为1 否则P为0 进位标志CY 当算术运算产生进位时才去设置它 例如 加法11110000 10000000 101110000 对两个8位值相加但产生了9位结果 最左边的1被存储在CY中 如果加法不产生进位1 则CY中会存储0 辅助进位标志AC 与进位标志类似 它不指明进位值 但指出从结果的低四位向高四位传递了进位 中断标志寄存器IM 用于允许和禁止中断而且检查待处理的中断 程序员可以读取并且设置该寄存器中的值来处理中断 2 8085微处理器指令集 8085指令集总共包含了74条指令 可分为三个部分 数据传送指令 数据运算指令和程序控制指令 采用如下记号描述 r r1 r2 表示任何一个8位寄存器A B C D E H 或者L M 表示内存单元 M HL 表明该内存单元的地址存在寄存器对HL中 rp 表示寄存器对BC DE HL 或者堆栈指针SP 一个16位地址或者数据 n 是一个存储在内存中且紧跟操作码后的8位地址或者数据值 cond 条件指令的一个条件 值为 NZ Z P N PO PE NC C 数据传送指令以及它们的功能 除了POPPSW指令外 其它指令都不会修改标志的值 表38085微处理器的数据传送指令 指令的通用格式 一些指令有指定寄存器的字段 而另一些指令这些部分却是固定的 图68085的指令格式 一字节 二字节 三字节 数据运算指令 大多数会影响表中的标志 表48085微处理器的数据运算指令 13条程序控制指令 DI EI RIM和SIM包含在此因为它们可以处理中断 而中断最终又会影响程序控制 这些指令都不修改标志 表58085微处理器的程序控制指令 3 一个简单的8085程序 计算和1 2 n 并且把结果存储于内存单元total中 n值最初存于标志为n的内存单元中 当设计此程序时 我们计算如n n 1 1形式的总和 算法如下 与相对简单CPU中的程序不同 8085程序把它的运行值存储在CPU寄存器中 寄存器B包含数值i 总和存储在寄存器A中 1 i n sum 02 sum sum i i i 13 IFi 0THENGOTO24 total sum 执行该算法的8085代码如下 LDAnMOVB AXRAA sum A A 0Loop ADDB sum sum iDCRB i i 1JNZLoop IFi 0THENGOTOLoopSTAtotal total sum i n 运行值存储在CPU寄存器 减少了内存访问次数 程序更短 运行速度更快 该程序仅需要七条指令 而相对简单CPU的程序则需要13条指令 它的循环段 执行了n次 仅需要三条指令 而相对简单CPU同样的循环则需要10条指令 当n 5时 它的运算过程 表68085循环求和程序执行步骤 4 分析8085指令集结构 完备性 8085微处理器的指令集要比相对简单CPU的更完备 但是 对于像个人计算机这样更复杂的应用 它就不能够满足需要了 与相对简单CPU相比 8085微处理器一个最明显的优势就是其调用子程序的能力 还结合了中断 但不能很容易地处理浮点数据 正交性 指令集也是相当正交的 例如它没有清空累加器指令 而使用XRAA将A值清为0 寄存器组 8085的寄存器组比较充足 有更多的标志位 五 RISC和CISC 所有的微处理器和CPU都可以划分为两类 复杂指令集计算机 ComplexInstructionSetComputer 和精简指令集计算机 ReducedInstructionSetComputer 顾名思义 CISC和RISC的不同在于它们指令集的复杂度 CISC处理器有着更大的指令集 它包含一些特别复杂的指令 这些指令通常对应高级语言中专门的语句 如Intel的Pen

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论