1 / 56

第四章 指令系统

第四章 指令系统. §4.1 指令系统组成. ※ 术语: 机器指令 — 要求 硬件直接实现 某种运算或操作的 命令 指令系统 — 所有 机器指令 的 集合 ( Instruction Set ). ※ 指令系统与软硬件关系:. 必须 相 一致. 应用需求. 计算机软件. 计算机硬件. 应用结果. 形成. 执行. 实现. ( 按 约定 ). ( 按 约定 ). 指令系统. 按 一定格式 编写 操作命令. 按 一定格式 实现 操作功能. 指令格式: 操作功能 - 操作命令 间的 约定.

taylor
Télécharger la présentation

第四章 指令系统

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第四章 指令系统

  2. §4.1 指令系统组成 ※术语: 机器指令—要求硬件直接实现某种运算或操作的命令 指令系统—所有机器指令的集合 (Instruction Set) ※指令系统与软硬件关系: 必须相一致 应用需求 计算机软件 计算机硬件 应用结果 形成 执行 实现 (按约定) (按约定) 指令系统 按一定格式编写操作命令 按一定格式实现操作功能 指令格式:操作功能-操作命令间的约定 指令系统是软硬件间的一个约定!是软硬件交界面之一

  3. 软件映像方法(1-x%) 数据结构 数据表示 直接使用方法(x%) 一、指令功能 1、指令的操作数 (1)数据结构与数据表示 *数据结构:计算机软件能够直接识别和引用的数据类型 *数据表示:计算机硬件能够直接识别和引用的数据类型 *相互关系: (2)指令的操作数(Operand,OPD) 使用频率较高 *操作数类型:所有种类的数据表示, 通常有定点数、浮点数、逻辑数、字符、地址 *操作数长度:部分种类有几种长度, 如定点数、浮点数、逻辑数等 使用频率均较高 (节约空间) *操作数存放部件:存储器、I/O设备、寄存器

  4. 2、指令的操作(Operation,OP) *操作类型—硬件直接实现的基本操作 ←软件高频使用 如数据传送、算逻运算、转移控制等 ※指令功能表示的约定— 第A个寄存器的地址用RA表示、内容用(RA)表示; 第A个存储单元的地址用[A]表示、内容用[A]表示; 源操作数用内容表示、目标操作数用地址表示 (在“←”左边) (1)数据传送 *操作功能:REG、MEM、I/O设备间的数据传送(各部件均可为目标) 如— R0←(R1)、R0←[0100H]、[0100H]←(R2) *操作数:8b/16b/…的信息(数值/字符/地址等) *操作数个数:2个 ①1#REG的内容传送到0#REG中 ②0100H#存储单元的内容传送到0#REG中 ③2#REG的内容传送到0100H#存储单元中 无需区分数据类型(没有数据运算)

  5. (2)算术逻辑运算 *操作功能:算术运算—加、减、乘、除、+1、-1、求补等 如:R0←(R1)+[0100H]、R2←(R2)+1 逻辑运算—与、或、非等 如:R0←(R0)&(R1)、R0←~(R0) *操作数:算术运算—8b/16b/…的有符号/无符号定点数 逻辑运算—8b/16b/…逻辑数组合 要求—源OPD、目标OPD的数据类型须相同 *操作数个数:1~3个(如+1、A←A+B、C←A+B) ①1#REG的内容与0100H#存储单元的内容相加, 结果传送到0#REG中 ②2#REG的内容加常数1,结果传送到2#REG中 ③0#REG的内容与1#REG的内容按位“与”,结果 传送到0#REG中 ④0#REG的内容按位“非”,结果传送到0#REG中 *操作结果状态:ZF(是否为零)、SF(是否为负数)、 OF(是否溢出)、CF(是否进位/借位)等 设置原由—关系运算=算术运算+逻辑运算(结果状态) 状态保存—由ALU产生、用状态寄存器保存

  6. 逻辑地址 主程序 逻辑地址 子程序 逻辑地址 程序 逻辑地址 程序 2000 2010 2011 … … CALL 2200 A←A+1 … 2200 … 2280 … … CALL ** … RETURN … 2000 2010 … … C←C-1 JZ 2000 … 2000 2010 … 2019 … JMP 2019 … A←A+1 … 条件转移操作 无条件转移操作 调用操作 返回操作 (隐含方式)写入 堆栈 (存储部件) (隐含方式)读出 (3)转移操作 *操作功能:改变程序逻辑顺序,即下条指令地址←指定地址, 包含无条件转移、条件转移、调用、返回等 基本操作(不包含运算/比较操作) 注:①条件转移操作的条件由测试条件及转移条件组成 (如JZ/JNZ) ②调用操作的参数有目标指令地址及返回指令地址 ③返回操作的参数仅为返回指令地址 ④嵌套调用要求堆栈是按“后进先出”顺序(不按地址)访问的部件

  7. *操作数:地址 *操作数个数:1个或0个(隐含在堆栈顶部时) (4)移位操作 *操作功能:逻辑左/右移、算术左/右移、循环左/右移等 如:R0←(R0)<<2、R1←(R1)>>(R2) 逻辑 算术 *操作数:操作数据—8b/16b/…的有符号/无符号定点数 移动位数—8b/16b/…的无符号定点数 *操作数个数:2个 (5)其他类型操作 浮点运算、十进制运算、字符串处理等

  8. ③地址个数? ④A1/A2/X? ①操作类型? OP A1 A2 目标OPD←(A1) OPER (A2) ②OPD类型、长度? 操作码 地址码 OP1 A1 A2 第1种: 第2种: … 第n种: 注:①各种指令操作码须互不相同! ②操作数类型为硬件数据表示! OP2 A … OPn A1 A2 二、指令格式 *指令格式组成: *指令格式的相关参数:软硬件间需约定的内容 ⑥下条指令地址? ⑤OPD地址? *指令系统组成:由若干种机器指令格式组成 *编码性能:规整性、平均码长 ←影响译码复杂度及存储空间

  9. 8位 16位 0 0 0 0 0 0 0 0 0 0 定点数 0 0 0 0 0 0 0 1 0 1 加 法 单精度 双精度 0 0 0 0 0 0 1 1 0 0 或 浮点数 0 0 0 0 0 0 1 1 1 1 OPD类型:由当前操作类型隐含表示 0 0 1 0 0 1 8位 16位 0 0 0 移 位定点数 0 0 1 0 0 1 0 1 1 OPD长度:由当前操作类型隐含表示 0 1 0 0 1 0 逻辑非逻辑数8位 0 0 OPD类型: 按当前操作支持种类编码√ (显式表示) 按所有数据表示种类编码× 1、操作码字段 *功能:用编码指明(约定)操作的性质, 包括操作类型、操作数类型,及OPD长度3个方面 有模运算所需 例1—若约定:操作类型≤8种,其中3种操作的OPD类型如下图所示。操作码字段如何编码?

  10. 1.00 1 0 0.60 1 0 0.34 1 0 0.19 1 0 0.11 0.08 1 0 1 0 0.04 0.04 0.05 0.06 0.15 0.26 0.40 I7 I6 I5 I4 I3 I2 I1 8 *操作类型编码方法: 定长编码—按序编码,长度L= log2操作类型数 变长编码—按频率分布编码(如霍夫曼扩展编码) 例2—所有操作(7种)的使用频率分别为0.4、0.26、0.15、0.06、0.05、0.04、0.04,请进行操作码编码

  11. 减少方法: 源/目标重叠、隐含表示 8 2、地址码字段 *功能:用编码指明各个操作数的地址、源/目标属性, 用编码指明下条指令地址 *地址码个数的表示: ①指令系统—规定指令中最多的地址码个数 ②具体指令—用操作码隐含约定地址码个数 *地址码源/目标属性的表示:仅需表示目标属性 显式指明,或隐含约定首个/末个地址码 *操作数地址的表示:下小节讨论 *下条指令地址的表示: 下条指令地址的值—=(PC)+“1”,或=(地址码) 下条指令地址的表示—隐含或显式表示,下小节讨论

  12. 隐含:操作码为010000时为1个地址码, 否则为2个地址码 隐含:第一个为目标地址码 显式:D=0时目标为A1 D=1时目标为A2 A1 A2 A1 A2 8位 16位 0 0 0 0 0 A1 A2 定点数 0 0 0 0 1 A1 A2 加 法 单精度 双精度 0 0 0 1 0 A1 A2 浮点数 0 0 0 1 1 A1 A2 0 0 1 00 8位 16位 A 移 位定点数 0 0 1 01 应用:尽量隐含、需要时显式 0 1 0 0 0 逻辑非逻辑数8位 例3—续例1,若规定指令中地址码≤2个,加法、移位、逻辑非操作的地址码个数分别为2个、2个、1个,如何约定地址码个数及源/目标属性? D A1 A2 D A1 A2 D A1 A2 或 D A1 A2 A1 D A1 A2 A2 A1 D A1 A2 A2 * A A

  13. m为常数 零地址指令: 单地址指令: 双地址指令: 三地址指令: OP OP A OP A1 A2 OP A1 A2 A3 n为常数 11 3、指令字 *组成:操作码+地址码,操作码在指令字头部 指令字长=n×主存单元长度,机器字长=m×主存单元长度 *指令字类型: 按地址个数分— 按指令字长分—(相对于机器字长) 单字长指令、半字长指令、双字长指令等 *指令集结构: (指令系统特性) 定长指令字结构—所有指令的指令字长完全相同 变长指令字结构—不同指令的指令字长不尽相同

  14. 可用(24-Y)×26种 可用(24-Y)×26-M种 共X种 共M种 P种 空闲 Y种 Q种 空闲 A A ?种 A1 A1 A2 A2 例4—设指令字长为16位、各地址码均为6位,指令字有零地址、单地址、双地址3种格式; ⑴指令采用定长操作码时,若零地址、单地址指令分别为P种和Q种,双地址指令最多有多少种? ⑵指令采用扩展操作码(按地址个数扩展)时,若零地址、双地址指令分别为X种和Y种,单地址指令最多种类数M为多少? 解:⑴操作码长度=16-6-6=4,双地址指令种数=24-P-Q; ⑵零、单、双地址指令操作码长度=16、10、4, X=[(24-Y)×26-M]×26,则M=(24-Y)×26-X×2-6

  15. R0 地址码=001 地址码=000 ……… R3 地址码=111 地址码=110 R4 ……… R7 方案2—使用部分REG §4.2 数据存放与寻址方式 一、数据的存放方式 1、数据在REG中的存放方式 基础—REG长度=CPU字长=最长数据(定点)的长度 同时支持 OPD长度=REG长度时 OP 1 F2xxx *数据长度=REG长度时的存放:需使用REG全部位数存放 OPD长度<REG长度时 OP 0 F2xxx *数据长度<REG长度时的存放:可使用REG低端或部分REG 地址码=000 R0 ……… R3 地址码=011 R4 地址码=100 ……… R7 地址码=111 方案1—使用REG低端 √方案2— *地址码格式:

  16. N N+1 N+2 N+3 B0 B1 B2 B3 N N+1 N+2 N+3 B3 B2 B1 B0 地址码: F3 N OP n F3N n为同时支持的OPD长度种类编号 B3 B2 B1 B0 数据组成: N N+1 N+2 N+3 B B B B 数据长度 MSBLSB 大端方式 (N=MSB地址) 小端方式 (N=LSB地址) 2、数据在存储器中的存放方式 基础—存储单元长度=最短数据(定点)的长度 *存放方式:数据内容存放在连续存储单元中, 数据地址(N)用最小单元地址表示 *地址码格式: *存放方式属性:有次序(端序)和边界2个方面 次序—有大端和小端2种方式,可任选一种(硬件固定)

  17. 地址 3~ 0 7~ 4 11~ 8 15~12 多体存储器 多体存储器 B(N=2) A(N=0) C(N=3) B(N=1) A(N=0) C(N=4) D(N=7) C(续) E(N=10) D(N=8) 数F(N=10) E(N=9) D(续) F(N=12) 边界不对齐方式 自然边界对齐方式 边界—有不对齐和对齐2种方式,常选对齐方式(硬件固定) 自然边界对齐方式—数据(长度=2n个单元)存储时, 数据地址(N)的最低n位为零 如:长度为20、21、22个单元的N为XXXX、XXX0、XX00 3、数据(常数)在指令中的存放方式 *存放方式:边界—采用不对齐方式 (减少指令字长) 次序—同在MEM中的存放次序(方便CPU处理) *地址码格式: ←以x86为例 OP1 F1 D低D高 同时支持 OP0 F1 D低

  18. 需求简单、简化实现 只有一种数据长度(常为CPU字长) B A A A ①空堆栈 ②A入栈 ③B入栈 ④出栈(B) 6 4、堆栈存取方式 *堆栈:堆栈是一种按“后进先出”顺序存取的存储区 按“先进先出”顺序存取的存储区称为队列 *堆栈存取方式:类似于圆桶中放入/取出木板 操作类型—入栈(PUSH/压栈)、出栈(POP/弹出) 操作步骤—入栈:先移动栈顶,再在栈顶写入数据, 出栈:先从栈顶读出数据,再移动栈顶 存取特征—后进先出顺序、不按地址访问, 破坏性读出(只对栈顶操作)

  19. 栈顶 ①空堆栈 ②入栈 ③入栈 ④出栈 A B A A *寄存器堆栈:--用移位REG实现,面向硬件 组成特征—大小及栈顶固定, CPU用计数器表示“栈底” 栈底 0 1 移动的是数据 2 1 *存储器堆栈:--借用主存空间实现,面向软件 组成特征—大小及栈顶均可变, 堆栈存储空间 8000H …… 803FH 8040H CPU用堆栈指针REG指向栈顶, 用相关REG表示栈底或大小 SP 栈底 操作步骤—以入栈时SP递减移动方式为例 入栈:①SP←(SP)-X, ②[(SP)]←源数据 出栈:①目标地址←[(SP)],②SP←(SP)+X 对入栈时SP递增移动方式而言,入栈+X、出栈-X

  20. 堆栈存储空间 堆栈指针SP 堆栈存储空间 堆栈指针SP 堆栈指针SP …… 003CH 003DH 003EH 003FH 0040H …… 003CH 003DH 003EH 003FH 0040H 0040H 003EH 003EH 10H 00H 栈底 栈底 (a)空堆栈 (b)R0入栈 堆栈存储空间 堆栈指针SP 堆栈存储空间 …… 003CH 003DH 003EH 003FH 0040H 003CH …… 003CH 003DH 003EH 003FH 0040H 20H 00H 20H 00H 10H 00H 10H 00H 栈底 栈底 (c)R1入栈 (d)R2←出栈 16 例1—设主存按字节编址,指令系统约定数据在MEM中采用小端方式存放,MEM堆栈存取数据长度为2B、入栈时SP递减移动。若栈底指向003FH、(R0)=0010H、(R1)=0020H,请画出空堆栈、R0入栈、R1入栈、R2←出栈时,SP及栈顶内容的变化过程 作业一:P164—4、5、6

  21. 常采用独立编址(均从零开始)方式 按地址访问 不按地址访问 8 二、寻址方式 *寻址方式:形成指令OPD或OPD地址及下条指令地址的方式 *存放数据的部件:寄存器、主存、I/O设备, 堆栈、指令REG *存放指令的部件:主存 *数据/指令的MEM地址: 有效地址(EA)—程序可访问的MEM地址,如段内地址 物理地址(PA)—硬件可访问的MEM地址,如主存地址 两者关系—PA=EA进行存储管理后的地址

  22. 显式 6 1、指令寻址方式 *指令种类:顺序型指令、转移型指令 *指令寻址方式: 顺序寻址—适于顺序型指令的下条指令寻址(与当前Ins无关) 隐含寻址,下条指令EA=(PC)+“1” 跳跃寻址—适于转移型指令的下条指令寻址(与当前Ins有关) ①直接寻址,下条指令EA=(地址码) ②相对寻址,下条指令EA=(PC)+(地址码) ③隐含寻址,下条指令EA=(栈顶)或(特定部件) 顺序型指令格式 顺序型指令格式 操作码 操作码 操作数地址码 操作数地址码 下条指令地址码(隐含) 转移型指令格式 转移型指令格式 操作码 操作码 操作数地址码(无) 转移目标指令地址码 下条指令地址码 *指令地址的表示:在数据寻址方式中讨论

  23. 地址目标程序 下条指令地址及寻址 例2—C语言程序 Sort(); D=B/100; …… void Sort() { int B=0,C=100; do { B=B+A[C]; C--; if (C==0) goto AA; } while (1); AA: return; } EA=2010(直接)、栈顶←2001(隐含) 2000 2001 … 2010 2011 2012 2013 2014 2015 2016 CALL 2010 D←B/100 … B←0 C←100 B←B+A[C] C←C-1 JZ 2016 JMP -4 RETURN EA=2016(直接) 或 (PC)+“1”(隐含) EA=(栈顶) (隐含) 注①:CALL与RETURN指令常使用堆栈传递指令地址 注③:JZ指令是否转移与转移条件(ZF)有关 注④:JZ、JMP指令形成下条指令EA前,已实现(PC)+“1” 6 EA=(PC)+“1” (隐含) … EA=(PC)+“1” (隐含) EA=(PC)+“1” (隐含) EA=(PC)+“1” (隐含) EA=(PC)+“1” (隐含) EA=(PC)-“4” (相对) 取指令(含分析指令) 执行指令 任何指令:PC←(PC)+“1” 转移发生时:PC←新地址 注②:顺序寻址统一放在取指阶段实现

  24. 地址码 寻址方式位I 形式地址A 操作数或地址=函数(I,A) 操作码 F1 A 操作数=A 操作数 21 2、数据寻址方式 *目标:缩短指令中地址码长度,方便编译程序形成代码 *地址码:由地址形成方式(含部件类型)、地址形成参数组成 (1)立即寻址方式 常数操作数为形式地址本身,即操作数存放在指令中 为便于理解,均以单地址指令为例 (2)寄存器寻址方式 REG操作数为形式地址对应的数据REG内容 数据寄存器 操作码 F2 A … 操作数 … 数据REG号 操作数=(A)

  25. 存储器 操作码 F4 A 操作数 … A’ … 逻辑地址 操作数EA=[A]=A’ 21 (3)直接寻址方式 MEM操作数EA为形式地址本身,即程序段内的偏移地址 存储器 操作码 F3 A … 操作数 … 逻辑地址 程序段或数据段 操作数EA=A (4)间接寻址方式 MEM操作数EA为形式地址对应的MEM内容 因2次访存,很少使用(适用于**p) 操作码 F5 A 地址寄存器 存储器 … A’ … … 操作数 … 地址REG号 程序段 或数据段 操作数EA=(A) (5)寄存器间接寻址方式 MEM操作数EA为形式地址对应的地址REG内容

  26. 变址寄存器 存储器 操作码 F7 I A 起址A … 操作数 … … 地址A’ … 变址REG号 数据段 操作数EA=(I)+A 基址寄存器 存储器 F6 B A 操作码 基址A’ … 操作数 … … 地址A’ … 程序段 或数据段 基址REG号 操作数EA=(B)+A (6)基址寻址方式 MEM操作数EA为基址REG内容+形式地址(偏移地址offset) 注:基址寻址对存储管理特别有效(基址REG不变) (7)变址寻址方式 MEM操作数EA为变址REG内容+形式地址(偏移地址) 注:①变址寻址对程序的块处理很有效(形式地址A不变) ②基址REG/变址REG的数量=1时,均可隐含表示(无B/I)

  27. ※寄存器间关系: ①数据REG与地址REG常混用(通用REG) ←码长短/利用率高 ②基址REG与变址REG常为地址REG的子集 ←利用率高 可见REG 专用REG 0 … M 数据REG 所有寄存器 0 P 0 … N 地址REG 基址REG 0 Q 变址REG 可见REG的使用方法 (8)相对寻址方式 MEM中指令EA为PC内容+形式地址(偏移量displacement) 存储器 PC寄存器 操作码 F8 A … 下条指令 … 程序段 XX 指令EA=(PC)+A 注:偏移量为有符号数!而偏移地址常为无符号数

  28. 第一字节 第二字节 F8 A(补码表示) 操作码 例3—设计算机主存按字节编址, 相对寻址的转移指令格式如右图所示, CPU取指令时每取出一个字节自动完成PC←(PC)+1。若0100H及0101H两个存储单元中存放的是相对寻址的转移指令。 ① 若该转移指令的转移目标指令地址EA=0120H,则[0101H]=? ② 若[0101H]=92H,则该转移指令的转移目标指令地址EA=? 解—①下条指令EA=(PC)+DISP,(PC)为执行阶段的值, 指令取出后,(PC)=0100H+2=0102H, 指令执行时,DISP=0120H-0102H=+0011110B, [0101H]=A=[DISP]补=00011110=1EH ②指令取出后,(PC)=0102H, 因[DISP]补=92H=1001 0010B,故DISP=-6EH, 则EA=(PC)+DISP=0102H-6EH=0094H

  29. 9、隐含寻址方式 操作数/操作数地址由指令操作码隐含约定(与地址码无关) *隐含方式: ①OPD/OPD地址隐含在某REG中 如:(a)基于累加器CPU中,指令AC←(AC)+[M]隐含AC (b)顺序型指令的下条指令EA=(PC)+1隐含PC等 ②OPD/OPD地址隐含为堆栈中 如:(a)常用堆栈传递过程调用的参数 (b)调用/返回指令的下条指令地址 ◇寻址方式的应用: ☆不同计算机系统对寻址方式的命名可能不同!

  30. 15 10 9 8 7 0 OP F A F=00为立即寻址,01为相对寻址 10为基址寻址,11为变址寻址 26 27 例4—某计算机主存按字节编址、有符号定点数采用补码编码,有基址REG和变址REG各1个(分别记为RB和RI),单地址指令格式如右图所示,设(RB)=0037H、 (RI)=1122H、(PC)=1234H,请计算 MEM中指令内容为①4428H ②2244H ③1392H ④3592H的操作数或EA [操作数]补=A=28H 解—①指令字=0100010000101000B, ②指令字=0010001001000100B,基址寻址(A=44H), 操作数EA=(RB)+A=0037H+0044H=007BH ③指令字=0001001110010010B,变址寻址(A=92H), 操作数EA=(RI)+A=1122H+0092H=11B4H ④指令字=0011010100100001B,相对寻址(A=92H), A=[DISP]补=92H=10010010B,则DISP=-6EH, 转移目标指令EA=(PC)+DISP=(1234H+2)-6EH=11C8H

  31. §4.3 指令格式举例 一、指令格式目标 1、指令格式的目标 *目标1:对软件的支持较好,力争减少指令数及指令长度 减少指令数—指令功能强、地址码个数多, 地址范围大、寻址方式多、对称性好等 缩短指令长度—地址码个数少、范围小,冗余空间小等 *目标2:对硬件的支持较好,力争减少译码时间 减少译码时间—指令格式规整、地址码并行译码、 操作数地址形成简单等

  32. *指令格式目标分析:假设地址码≤2个,n条指令*指令格式目标分析:假设地址码≤2个,n条指令 面向软件的指令格式—按需要设置,≤n种格式 OPiDTiDLi DF1 A1 DF2A2 第i种格式 OPjDTjDLj DF1 A1 DF2 A2 第j种格式 OPkDTkDLk DF A 第k种格式 无空闲位/编码 面向硬件的指令格式—按极限设置,≥1种格式 共1种格式 OP DTDL DF1 A1 DF2 A2 *指令格式目标的矛盾: ①软件目标←→硬件目标 ←空间-时间矛盾 ②减少指令数←→缩短指令长度 ←数量-空间矛盾 注: ①各字段长均为最大值;②各指令均有空闲位

  33. 31 2、指令格式优化方法 ─指令格式目标实现方法 ※优化思路:空间-时间矛盾—用折中方法处理 数量-空间矛盾—用加权方法处理 *遵循大概率事件优先原则:利于减少指令数/指令长度, 利用减少译码时间 方法— ①机器指令仅支持高频率操作及OPD类型 ②采用扩展操作码编码方式 OPiDT DL DF1 A1 DF2 A2 OPjDL DF1 A1 OPkDT DF1 A1 ③机器指令仅支持高频率寻址方式、地址范围等

  34. 31 *可分开存放操作码:利于提高规整性 OPiDT DL DF1 A1 OPiDT DL DF1 A1 OPjDL DF2 A2 OPjDL DF2 A2 OPj’ *隐含部分编码:利于提高规整性、缩短指令长度, 不利于软件编程(灵活性、指令数) 方法—隐含值惟一的字段(DT/DL/DF),采用隐含寻址 约定仅支持特定长度 仅有一种长度时 OPi DF1 A1 OPi DL DF1 A1 OPj DF2A2 DF1 A1 A2 OPj DF1 A1 A2仅为寄存器寻址时 约定A2仅为寄存器寻址 OPi DF1 A1 OPj DF1 A1 约定A2仅为寄存器寻址、为特定REG(如R1)

  35. OPi DF1 A1 DF2 A2 OPi DF12 A1 A2 T译码=TDF1+TA1+TDF2+TA2 T译码=TDF12+max{TA1,TA2} 31 *寻址方式位前移:利于地址码并行译码 方法—多个寻址方式位合并、紧邻操作码存放

  36. 二、Pentium指令系统 1、寻址方式 支持9种寻址方式,多数指令使用多种寻址方式

  37. MOD REG/OP R/M SS INDEX BASE 2b 3b 3b 2b 3b 3b 2、指令格式 有近200条指令,采用变长指令格式(基本单位为字节) *指令格式:[指令前缀+]指令本身 “[ ]”指可缺省 *指令前缀: 功能—显式扩展指令本身的功能或参数; 如:SSE指令,数据长度8/16位→8/16位和32/64位等 兼容性的实现方法之一 应用—当前指令与上条指令的指令前缀相同时,可缺省

  38. 36 15 16 *指令本身的相关约定: ①地址码个数—≤2个,其中IMME型及MEM型地址码均≤1个 ②操作数长度—支持8/16/32位 ③REG型操作数的存放— 32位采用REG全部位数, (如EAX~EDI) 16位采用“使用REG低端”方案, (如AX~DI) 8位采用“使用部分REG”方案 (如AH~DL) MEM型操作数的存放—采用小端次序、边界对齐方式

  39. 8位或16位操作数 OPi 8位和16位操作数 OPjW 37 *指令本身的操作码字段: 操作类型内容—基本的操作及操作数类型(如定点加法) 操作数长度表示— 针对某种操作类型而言 1B 1B OPiW MOD 操作码编码—采用扩展编码方式,操作码可分开存放 OPj D MOD OPk’ OPk

  40. 37 *指令本身的地址码字段: 地址码字段组成—≤2个地址码,有REG、MEM、IMME型 地址组合许可— REG型 REG型 IMME型 REG型 REG型 MEM型 REG型 MEM型 IMME型 MEM型 地址码组织—REG、R/M、IMME 3种,组合次序固定 REG-REG/MEM型: MOD REG R/M DISP MOD 空闲 R/M IMME IMME-REG/MEM型: DISP 空闲 REG/MEM型: MOD R/M DISP 1B 0~2B 1~2B 寻址方式表示—REG隐含,R/M用MOD、IMME隐含/显式 目标OPD表示—REG、R/M均可时用D位指明,否则隐含表示 OPi D W MOD REG R/M 可为REG和R/M时 OPi W MOD REG R/M 仅为REG或R/M时

  41. R/M型地址码组成—MOD+R/M [+DISP],MOD为寻址方式位 例1—R/M型地址码表示[(BX)], R/M型地址码 表示[(BX)+70H] REG型地址码组成—REG编号(同MOD=11的R/M) 例2—地址码表示(DX)与[(SI)], 或(DL)与[(SI)] 00 00 REG 010 111 100 00 REG 111 01110000

  42. 40 IMME型地址码组成—IMME,即机器数形式的常数 数据类型—同另一个OPD 数据长度—≤另一个OPD ←缩短长度、实现时扩展 寻址方式表示— (仅用于双地址指令中) 同时支持REG-R/M及IMME-R/M型时用I位指明,否则隐含 I=0 REG R/M OP(如000000) I W MOD 显式 I=1 OP(如000000) I W MOD 空 R/M IMME 隐含 OP(如0000010) W MOD 空 R/M IMME 例3—同时支持REG/MEM-REG及REG/MEM-IMME组合、REG可为源/目标OPD的数据传送指令格式 1B/2B 1B 100010 0 D W MOD REG R/M REG-R/M型(I=0) 100010 1 1 W MOD 000 R/M IMME IMME-R/M型(I=1)

  43. 10 例4—若某8位字长模型机中,主存按字节编址,CPU中有8个数据REG和2个变址REG。所有的7种操作的使用频率分别为0.35、0.25、0.20、0.10、0.05、0.03、0.02。 指令集采用变长指令字结构(2种长度),仅有双地址指令格式(REG-REG和REG-MEM),采用变长操作码编码(2种长度)。REG、MEM型OPD均可为目标OPD,短操作码用于REG-REG型格式。 (1)请写出各指令字的操作码(霍夫曼扩展编码)。 (2)若MEM型OPD仅采用变址寻址方式,即EA=(REGI)+DISP,偏移量DISP的范围不小于±63;请设计这两种指令格式。 解—(1)先进行霍夫曼编码,可见编码长度为2位和4位; 扩展编码的操作码为:00~10、1100~1111 解—(2)因OPD只有一种长度(1B),格式中无需表示OPD长度 D REG REG 指令格式 (初步) OP-S D MEM REG OP-L

  44. REG型地址码—REG号,长度=log28=3位 MEM型地址码—RI+DISP,RI长度=log22=1位, DISP长度≥ 1位(±)+6位(值)=7位 REG-REG型指令格式— 8位指令字长 目标OPD隐含表示(如最左),寻址方式位隐含表示 7 6 543 210 OP-S REG-D REG-S D REG REG OP-S REG-MEM型指令格式— 16位指令字长 目标OPD用D位表示,寻址方式位隐含表示(次序固定) 15 1211 10 8 7 6 0 D=0时—目标为REG型 D=1时—目标为MEM型 D REG OP-L RI DISP

  45. 指令功能 赋值(MOV): RD←VAL 取数(LD) : RD←[(RS)] 存数(ST) : [(RD)]←(RS) 加法(ADD): RD←(RD)+(RS) RD←(RD)+[(RS)] 自增(INC): RD←(RD)+1 自减(DEC): RD←(RD)-1 转移(JNZ): ZF=0时转移 ZF=1时不转移 指令格式 数据寻址 指令寻址 寄存器+立即 (隐含)EA=(PC)+2 寄存器+寄存器间接 (隐含)EA=(PC)+1 寄存器间接+寄存器 (隐含)EA=(PC)+1 寄存器+寄存器 (隐含)EA=(PC)+1 寄存器+寄存器间接 (隐含)EA=(PC)+1 寄存器+隐含 (隐含)EA=(PC)+1 寄存器+隐含 (隐含)EA=(PC)+1 无 (直接)EA=ADDR 或(隐含)EA=(PC)+2 无 (相对)EA=(PC)+DSP 或(隐含)EA=(PC)+1 0000 RD 空 VAL 0010 RD RS 0011 RD RS 010 0 RD RS 010 RD RS 1 RD 空 0110 0111 RD 空 100 0 空 ADDR 100 1 DISP 4位 2位 2位 例5—某8位CPU中有4个数据REG(R0~R3)、主存按字节编址、有符号定点数采用补码编码,取指令时每取一个字节自动完成PC←(PC)+1,指令系统的部分指令格式如下图所示。 ⑴解析指令集的特征、指令格式参数的表示; ⑵编写实现A[0]+…+A[99]的程序,数组A存放在主存中。

  46. 13 8 解—⑴指令集的特征: 指令字结构:变长结构(2种长度); 指令字长度:单字长、双字长; 地址码个数:≤2个,单地址、双地址; 操作码编码:变长编码(3b/4b)。 指令格式参数的表示: OP类型:7种(含OPD类型),3b~4b编码; OPD长度:1种(1B),隐含; 地址码字段:1~2个地址码,REG、MEM、IMME型, 组合次序可变; 目标OPD:最左地址码,隐含; 地址码寻址方式:4种,显式(ADD)、隐含(其余); 下条指令寻址方式:隐含,直接、相对。

  47. 指令格式 指令功能 赋值: RD←VAL 取数: RD←[(RS)] 存数: [(RD)]←(RS) 加法: RD←(RD)+(RS) RD←(RD)+[(RS)] 自增: RD←(RD)+1 自减: RD←(RD)-1 转移: ZF=0时转移 ZF≠0时不转移 000000** 00000000 000001** 01100100 000010** 00001101 地址程序代码 0000 RD 空 00H 01H 02H 03H 04H 05H 06H 07H 08H 09H 0AH 0BH 0CH 0DH … 70H 06H 07H 08H 09H 00000001 … 01100100 01010010 011010** 011101** 10011100 VAL 0010 RD RS RS 0011 RD 00101110 01000011 011010** 011101** 1000**** 00000110 … 010 0 RD RS 010 RD RS 1 RD 空 0110 RD 空 0111 0 100 空 ADDR 100 1 DISP 45 解—⑵先写C语言程序,再翻译成机器语言程序: C语言程序 BYTE R0=0; //累加和 BYTE R1=100; //计数器 BYTE *R2=&A[0];//地址 do{ BYTE R3=*R2; R0=R0+R3; R2++; R1--; } while (R1≠0); //数据A[0] … //数据A[99] do{ R0=R0+*R2; R2++; R1--; }while (R1≠0);

  48. 三、MIPS指令系统 1、寻址方式 支持5种寻址方式,多数指令只使用1~2种 可简化硬件设计

  49. 2、指令格式 只有几十条指令,采用定长指令格式(32位、共3种) OPER—操作码,FUNC—操作码扩展,RS—源REG号,RD—目标REG号 SHAMT—移位位数,IMME—立即数,DISP—偏移量,OFFSET—偏移地址 *指令格式特征: 操作码—扩展编码方法,可分开存放 地址码—≤4个,REG、IMME、MEM型3种, 目标OPD隐含表示/(指令·格式) 寻址方式—多数指令只有1~2种, 由指令格式确定(1个OPER/种)

  50. 例6—若R-型、I-型、J-型OPER范围为000000、000001~011111、100000~111111,R-型加法OPER=100000,I-型加法OPER=000001、取数OPER=000010,则指令R1←(R2)+(R3)、R1←(R2)+22、R1←[(R2)+0600H]的机器代码分别是?例6—若R-型、I-型、J-型OPER范围为000000、000001~011111、100000~111111,R-型加法OPER=100000,I-型加法OPER=000001、取数OPER=000010,则指令R1←(R2)+(R3)、R1←(R2)+22、R1←[(R2)+0600H]的机器代码分别是? 解—指令R1←(R2)+(R3)对应R-型指令,机器代码为 OPER RS RT RD SHAMT FUNC 00010 00011 00001 00000 100000 000000 指令R1←(R2)+22对应I-型指令,机器代码为 OPER RS RT IMME/DISP OPER RS RT IMME/DISP 00010 00001 0000000000010110 0000011000000000 000001 00010 00001 000010 指令R1←[(R2)+0600H]对应I-型指令,机器代码为

More Related