770 likes | 914 Views
第三章 指令集结构. 3.1 程序设计语言的级别 3.2 机器语言指令 3.3 指令集结构设计 3.4 相对简单的指令集结构 3.5 实例. 3.1 程序设计语言的级别. 3.1.1 语言种类. 高级语言( high-level languages ). 平台无关( platform-independent ). 汇编语言( assembly language ). 向下兼容( backward compatible ). 机器语言. 3.1.2 编译和汇编程序. 1. 编译、汇编 2. 编译器 源程序、源代码、目标代码
E N D
第三章 指令集结构 3.1 程序设计语言的级别 3.2 机器语言指令 3.3 指令集结构设计 3.4 相对简单的指令集结构 3.5 实例
3.1 程序设计语言的级别 3.1.1 语言种类 高级语言(high-level languages) 平台无关(platform-independent) 汇编语言(assembly language) 向下兼容(backward compatible) 机器语言
3.1.2 编译和汇编程序 1. 编译、汇编 2. 编译器 源程序、源代码、目标代码 连接器、装载器 3. 编译过程 同一高级语言源代码可以经过编译在不 同的微处理器和操作系统或者计算平台上运行。
图3.1 高级程序的编译过程 装载器包含在计算平台中
4.汇编器和汇编过程 每一种汇编语言对应一种微处理器,不需要针对不同平台的汇编器 。 图3.2 汇编语言程序的汇编过程
3.1.3 机器语言与指令 1. 什么是指令? 指令:指示计算机执行某种操作的命令。 机器语言:计算机硬件实体直接表示控制信息的语言。 (计算机硬件能直接理解并执行的语言) 指令集:一台计算机能执行的全部指令的集合。 (计算机程序员接触到的计算机的所有功能) 一条指令就是机器语言的一个语句,用来说明机器 硬件应完成的操作。
指令集表征着计算机的基本功能和使用属性,是计算机系统设计中的核心向题。是表征一台计算机性能的重要因素,它的格式与功能不仅直接影响到机器的硬件结构,而且也直接影响到系统软件,影响到机器的适用范围。指令集表征着计算机的基本功能和使用属性,是计算机系统设计中的核心向题。是表征一台计算机性能的重要因素,它的格式与功能不仅直接影响到机器的硬件结构,而且也直接影响到系统软件,影响到机器的适用范围。
操作码 地址码 2. 指令的组成 ◆ 一条指令一般应包含如下信息: (1) 操作码 (2) 操作数的地址 (3) 操作结果的地址 (4) 下一条指令地址 ◆ 指令的基本格式 操作码:表示指令应执行的操作和应具有的功能。 地址码:表示参与操作的操作数的存放地址或操作结 果的存放地址。
3.2 机器语言指令 3.2.1 指令类型与功能 3.2.1.1 数据传送指令 将数据从一个地方移到另一个地方(实际是“拷贝”)。 例:◆8086指令 MOV AL,BL ;AL←BL MOV AL,Disp(BX)(SI) ;AL←((BX)(SI)+Disp) ◆ IBM370机的成组取指令:
3.2.1.2 数据运算指令 包括算术运算指令、逻辑运算指令 、移位指令。 例:8086指令系统中 ADD AL,BL ;AL←AL+BL MUL BL ;AX←AL×BL AND AL,0FEH ;AL←AL∧FEH,即AL的最低位 ;清0,其余位不变。 OR AL,0F0H ;AL←AL∨F0,即AL的高4位置1, ;其余位不变 TEST AL,00000001B ; AL∧00000001B A0=0 结果为0 ;A0=1 结果不为0
◆ 移位指令 实现对操作数的左、右移位。 移位操作指令分为算术移位、逻辑移位和 循环移位三种,可以实现对操作数左移或右移 一位或几位。 3.2.1.3 程序控制指令 控制程序流程的指令,包括:跳转指令(条件或无条件)或分支指令、子程序调用和子程序返回指令、“软中断”指令、停机指令。
例:8086指令系统 JMP L1;直接寻址的转移,无条件转移到L1处, JNZ 50H;相对寻址的转移。若操作结果不为0,则转移到当前PC+50H处。设指令地址为1000H,则当前PC=1002H,转移地址为:1002H+50H=1052H 3.2.2 数据类型 数值数据 无符号整型数、有符号整型数、浮点数据 布尔类型 数据值常以0表示FALSE,以非0表示TRUE 字符数据 字符编码标准 (ASCII、EBCDIC、UNICODE、或别的)
3.2.3 寻址方式 寻址方式:确定操作数地址的方法。 形式地址:指令中直接给出的地址。 有效地址:形式地址经一定的计算而得到的操作数的 实际地址。
3.2.3.1 直接寻址 指令字中直接给出操作数的有效地址。
◆ 例:Intel 8086指令 MOV AX,[2000H] 将有效地址为2000H的内存单元的内容读入累加器AX中。 ◆ 例如:LDAC 5 从内存单元5读取数据并且把数据存储在CPU的累加器中。 ◆ 这种方式简单直观,便于硬件实现。但随着存储器容 量不断扩大,要寻址整个主存空间,将造成指令长度 加长。另外程序位置受到限制。
3.2.3.2 间接寻址 指令中指定的是含有操作数地址的内存单元的地址。 至少要进行两次内存访问。
OP … 5 IR … 5 操作数的地址10 10 操作数35 例如:LDAC @5或 LDAC(5)
◆ 间接寻址的特点 ① 间接寻址比直接寻址灵活,可扩大寻址范围,以短 的地址码访问大的存储空间。 ② 采用间接寻址,当操作数地址需要改变时,可不必 修改指令,只要修改地址指示字中内容(即存放有效 地址的单元内容)即可。 ③ 间接寻址需多次访存才能取得操作数,因而降低了 指令的执行速度。
3.2.3.3 寄存器直接寻址和寄存器间接寻址 ◆ 寄存器寻址 ◆ 与直接和间接寻址方式相似,但指定的是寄存器,而 不是内存单元。 ◆ 寄存器存取信息的速度比主存快,需要的地址短,可 压缩指令长度,有利于加快指令执行速度。但寄存器 的数量有限。 ◆ 寄存器直接寻址 Rn 操作数 例如:假设寄存器R中存储了数值5,则: LDACR;把数值5从寄存器R中拷贝到CPU的累加器中
◆ 寄存器间接寻址 例如:假设寄存器R中存储了数值5,则: LDAC (R)或 LDAC @R ;相当于 LDAC5,从寄存器R中获取地址
3.2.3.4 立即值寻址 指定的操作数不是一个地址,而是确实要用到的数据。 这种寻址方式在取指令的同时操作数即被取出,不必再次访问存储器,提高了指令执行速度。但由于指令字有限,使得数据范围受限。 例如: Intel 8086指令 MOV AX,2000H;将数据2000H存入累加器AX中 例如:LDAC #5;把数据值5移到累加器中
3.2.3.5 隐含寻址 并不明确地指出操作数,因为总是用到特定的寄存器。 例如:CLAC;清空CPU中的累加器,即将其值置为0 常用于用堆栈存储数据的CPU中。指令中不需要指定操作数,因为它暗示操作数一定来自堆栈。
堆栈及堆栈操作 ◆ 一种按“后进先出”存取顺序进行存取的存储结构 ◆ 堆栈操作指令是一种特殊的数据传送指令 ◆ 堆栈有两种生成方式 自底向上生成方式:栈底占最高地址,栈顶为较低地 址,压入数据时,按由高地址向低地址顺序进行,弹出 数据(即取出数据)时,由低地址向高地址顺序进行。 自顶向下生成方式:与自底向上生成方式顺序相反。
◆ 堆栈操作有两种 ① 压入(进栈)指令:把指定的操作数送入栈顶。 SP←SP减量,(SP)←数据 ② 弹出(退栈、出栈)指令:从栈顶弹出数据,送到 指令指定的目的地址中。 目的←(SP),SP←SP增量
例:8086的指令系统中 进栈指令:PUSH AX SP←SP-1,(SP)←AH,SP←SP-1,(SP)←AL 出栈指令:POP AX AL←(SP),SP←SP+1,AH←(SP),SP←SP+1 SP-1 SP AL SP-1 SP+1 AH SP SP+1
3.2.3.6 相对寻址 将程序计数器 PC 的当前内容与指令中给出的形式地址相加形成操作数的有效地址。 有效地址E=(PC)+Disp
◆ 程序计数器 PC的内容一般为现行指令的下一条指令的 地址。 ◆ 形式地址是操作数地址相对于PC当前内容的一个相对 位移量(Disp),位移量可正可负,一般用补码表示。 ◆ 在相对寻址中,只要保持位移量不变,就可实现指令 带着数据在存储器中浮动,有利于实现程序再定位。
例:8086指令 JNC 03H的功能为,如果进位为0,则 • 转移到目标地址为 (PC)+03H处进行执行。 • 设指令为双字节指令,本条指令地址为1000H。 • 本条指令取指后,PC=1002H • 转移目标地址为 • 1002H+0003H=1005H • 若指令为JNC 0FDH • 则转移目标地址为 • 1002H+FFFDH=0FFFH D=FDH D=03H
3.2.3.7 变址寻址方式和基址寻址 1.变址寻址方式 变址寻址方式与相对寻址方式类似,但它是将指令提供的地址与变址寄存器中而不是程序计数器中的内容相加。
例如:Intel 8086指令 MOV AL,[BX+4] 设 BX=2000H,BX+4=2004H (2004H)=82H,则 AL←82H 例如:LDAC 5(X) ;变址寄存器X:数值10,则 5+10=15 ;读取15号单元中的数据并且把它存储在累加器中。
◆ 变址寻址可用于数组、向量、字符串等数据的处理 例:Intel 8086指令 LODS ;AL←(SI),SI←SI+1 +1
2.基址寻址 ◆ 操作数的有效地址等于指令中的形式地址与基址 寄存器中的内容之和。 ◆ 基址寄存器可以是一个专用的寄存器,也可以是 由指令指定的一个通用寄存器。
◆ 基址寻址主要用于将用户程序的逻辑地址(用户编写 程序时所使用的地址)转换成主存的物理地址(程序 在主存中的实际地址)。
◆ 基址寻址与变址寻址在形式上以及有效地址的计算 方法上都是相似的,但它们的应用场合是不同的。 基址寻址是面向系统的,主要用于逻辑地址到 物理地址的变换,用以解决程序定位问题。基址寄 存器由系统程序使用,对用户是透明的。 变址寻址是面向用户的,主要用于访问数组、 向量、字符串等成批数据,用以解决程序的循环控 制问题。
操作码 地址码 3.2.4 指令格式 指令的基本格式: 指令格式的设计包含两个方面: 1. 确定指令的长度; 2. 划分指令的字段,定义各字段的位数、含义 。
一、指令长度 ◆ 指令字长度:一个指令字所包含的二进制信息的位数。 ◆ 定长指令:指令系统中所有指令的长度都是一样的。 ◆ 可变长指令:各指令的长度可以不同。 ◆ 指令长度与机器字长 二.指令的地址码 考虑的问题:需要多少地址信息及如何给出地址。
OP A 1. 零地址指令 格式: (1) 无需任何操作数, 如空操作,停机等指令。 (2) 所需操作数是隐含指定的,如堆栈运算指令。 2. 一地址指令 格式: 意义: (1) A OP (A) (2) AC (AC) OP (A) OP 指令短,节省空间,执行快,常用于微、小型机中。
OP A1 A2 3. 二地址指令 格式: 意义: A1 (A1) OP (A2) 最常用的指令格式,适用于中、小、微型机。 ◆ 二地址指令的几种形式 ① 存储器—存储器型(S—S型)指令 ② 寄存器—寄存器型(R—R型)指令 ③ 寄存器—存储器型(R—S型)指令
OP A1 A2 A3 4. 三地址指令 格式: 意义: A3 (A1) OP (A2) 常用于大、中型机中。 5. 多地址指令
考虑一个简单的例子:A=B+C 一个操作: 加法 三个操作数: 两个源操作数—— B、C 一个目的操作数—— A 假定微处理器可以执行16种不同的操作。 需要4位来代表其中的操作(因为24=16) (假设位模式1010 →加法) 假定仅有4种可能的操作数——A,B,C和D。 用两位来表示每一种操作数: 00→A ,01→B ,10→C ,11→D
微处理器可以设计成能运行具有3、2、1或0个操作数的指令。微处理器可以设计成能运行具有3、2、1或0个操作数的指令。 图3.4 采用(a)三操作数,(b)二操作数,(c)单操作数,(d)0操作数的指令格式和计算A=B+C的汇编语言程序以及机器代码。
二、指令的操作码 指令系统中的每一条指令都有唯一确定的操作码。 操作码位数取决于机器指令系统的规模。 1.固定长度操作码 操作码的长度固定,且集中放在指令字的一 个字段中,其余部分全部用于地址码。 此方式有利于简化硬件设计和减少指令译码 时间,用于字长较长的大、中型及超级小型机中。
2.可变长度操作码 操作码的长度允许有几种不同的选择,对地址 数少的指令允许操作码长些,对地址数多的指令, 则操作码就短些。 若指令长度一定,则操作码字段与地址码字段之间存在平衡问题一般均采用“扩展操作码”的方法。
OP A1 A2 A3 0 0 0 0 ×××× ×××× ×××× … … … … 1 1 1 1 ×××× ×××× ×××× ◆扩展操作码 目的:在满足需要的前提下,有效地缩短指令字长。 例:设某机指令字长为16位,若固定OP为4位,三个地址 码,每个4位,其格式为: 若采用固定长度操作码,则最多只允许有16种三地址指令。
15条三地址指令、14条二地址指令、31条一地址指15条三地址指令、14条二地址指令、31条一地址指 令、16条0地址指令,共76条指令,其扩展方法如下:
0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 ×××× ×××× ×××× ×××× 31条一地址指令 0 0 0 1 15条三地址指令 ×××× ×××× ×××× … … … … … … … … 1 1 1 1 1 1 1 1 1 1 1 0 ×××× 1 1 1 0 ×××× ×××× ×××× 0 0 0 0 1 1 1 1 ×××× ×××× 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 14条二地址指令 16条0地址指令 … … … … … … … … 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 ×××× ××××
Pentium Ⅱ的指令格式: 指令长度是可变的,从1个字节到12个字节 。 MOD字段与R/M字段:5位,表示8个寄存器和24种寻址方法