1.09k likes | 1.33k Views
第 4 章 指令系统和控制器部件. 4.1 指令系统. 4.2 控制器部件. 指令:. 是指示计算机执行基本操作的命令 。 指令也是用户使用计算机的最小功能单位。. 从计算机组成的层次结构来说,计算机的指令有微指令、机器指令和宏指令之分。. 微指令: 是微程序级的命令,它属于硬件; 宏指令: 是由苦干条机器指令组成的软件指令,它属于软件; 机器指令: 则介于微指令与宏指令之间,通常简称为指令。每一条指令可完成一个独立的算术运算或逻辑运算操作。 本章所讨论的指令是机器指令。. 指令系统:.
E N D
第4章 指令系统和控制器部件 4.1 指令系统 4.2 控制器部件
指令: 是指示计算机执行基本操作的命令。指令也是用户使用计算机的最小功能单位。 从计算机组成的层次结构来说,计算机的指令有微指令、机器指令和宏指令之分。
微指令:是微程序级的命令,它属于硬件; 宏指令:是由苦干条机器指令组成的软件指令,它属于软件; 机器指令:则介于微指令与宏指令之间,通常简称为指令。每一条指令可完成一个独立的算术运算或逻辑运算操作。 本章所讨论的指令是机器指令。
指令系统: 一台计算机支持(或称使用)的全部指令的集合构成该计算机的指令系统。 由于指令与计算机的性能以及硬件结构密切相关,所以不同系列、不同型号的计算机其指令系统是不一样的。
4.1 指令系统 • 指令的基本格式 • 指令格式的优化 • 寻址方式 • 指令系统举例 • Th-union汇编语言程序设计
一、指令的格式 1、机器指令 任何一条机器指令由一组有意义的二进制代码构成,称为一个指令字。 0000000000010010 0000000100010010 用机器指令编写的程序是计算机惟一能够直接识别并执行的程序,称为机器语言程序。机器语言程序被称为目标程序(目标代码)。
机器语言的特点 • 机器直接执行,速度快。 • 缺点:与机器硬件直接相关,通用性差;编程不直观、难以记忆、使用很不方便。
为了克服机器语言的缺点,人们采用助记符表示机器指令的操作码,用符号代替操作数的存放地址等,这样就形成了汇编指令。为了克服机器语言的缺点,人们采用助记符表示机器指令的操作码,用符号代替操作数的存放地址等,这样就形成了汇编指令。 例:机器指令:0000011100100001 汇编指令:MVRR R2,R1 用汇编指令编写的程序称为汇编源程序。 一条机器指令对应一条汇编指令。用汇编指令编写程序就直观方便得多。
汇编语言指令 机器指令代码 MVRR R0,R1 ADD R0,R3 … … 1000100111011000 … … … 汇编程序 执行 (翻译) 程序员 用汇编语言编写程序及执行的过程
汇编语言虽然较机器语言直观,但仍然烦琐难懂。于是人们研制出了高级程序设计语言。高级程序设计语言接近于人类自然语言的语法习惯,与计算机硬件无关,易被用户掌握和使用。 汇编语言虽然较机器语言直观,但仍然烦琐难懂。于是人们研制出了高级程序设计语言。高级程序设计语言接近于人类自然语言的语法习惯,与计算机硬件无关,易被用户掌握和使用。 高级语言
(1) 用C语言实现: Main () { int a, b, sum; a=123; b=456; sum=a+b } 例如:编程实现 123加 456→ 求和
(2)用8086汇编语言实现: a dw 123 b dw 456 sum dw ? Code segment assume CS: Code, DS:Data Main:mov ax,data mov ds,ax mov ax, a add ax, b mov sum , ax mov ax, 4c00h int 21h Main endp Code ends end main
(3)用机器语言实现: 键入代码: -e cs:100A1 0F 01 03 06 11 01 A3 13 01 B8 00 4C CD 21 为数据分配空间: -e ds:10F 7B 00 C8 01 00 00
操作数地址码 操作码 2. 指令的基本格式 任何一条机器指令由一组有意义的二进制代码构成,称为一个指令字。 其基本格式可划分成二个部分: 表明操作数存放的位置,以便找到操作数完成指令的功能。 规定指令完成何种功能。
指令的操作码字段 指令的操 作数字段 例如: Th-union的机器指令 汇编指令 0000000000010010ADD R1,R2 0000000100010010SUB R1,R2 0000100100110000INC R3 1000100000010000MVRD R1,0055 0000000001010101 0055
1)操作码 在指令系统中,每一条指令都有唯一确定的操作码。 分二种形式: 定长操作码 变长操作码
a. 定长操作码形式 在指令字中,操作码字段的位数和位置是固定的。 早期的计算机一般采用定长操作码的设计,控制简单,且对操作码的译码实现容易。
例如: • Th-union操作码是八位的: • 00000000~11111111 • 该指令系统最多可有256条指令。 • IBM 360/370 操作码是八位的: • 00000000~11111111 • 该指令系统最多可有多少条指令? 256
IBM 360/370 计算机的指令格式 8 4 4 Ri:通用寄存器 Xi:变址寄存器 Bi:基址寄存器 Di:位移量 I: 立即数 L: 数据的长度 RR型 OPCR1 R2 8 4 4 4 12 RX型 OPCR1 X2 B2 D2 8 4 4 4 12 RS型 OPCRn Rm B D 8 4 4 12 SI型 OPCI2 B1 D2 8 8 4 12 4 12 SS型 OPCL B1 D1 B2 D2
定长操作码的特点 • 优点:有利于简化硬件设计,提高指令译码的速度和指令执行的速度。 • 缺点:限制了指令系统的扩充、 不利于缩短指令的长度,存在有很大程度的信息冗余 。
b. 变长操作码形式 指令系统中,各指令的操作码字段位数不等长。 例:PDP-11小型机的指令系统 其指令长度为16位,操作码字段的长度有4、7、10、13、16等不同的情况。
OP Mod Ri Mod Rj 四位 六位 六位 OP(7) Ri Mod Rj OP(10) Mod Rj OP(13) Rj 为增加操作码长度,采用 ——操作码逐段扩展技术 OP(16)
变长操作码的特点 • 优点:可方便扩充指令系统有利于缩短指令操作码的平均长度。 • 缺点:指令译码的控制复杂,硬件电路复杂。
2) 地址码的设计和安排 按照指令中地址码字段给出的地址的个数的不同, 无地址指令(零地址指令) 一地址指令(单地址指令) 有四种情况: 双地址指令 多地址指令
Th-union的机器指令 汇编指令 0000000000010010ADD R1,R2 0000000110001001SUB R8,R9 0000100100110000INC R3 1000100000010000 MOV R1,0055H 0000000001010101
操作码 a. 无地址指令(零地址指令) 格式: • 指令不需要任何操作数。 • 例:NOP、HALT 有二种情况: • 操作数为隐含的,或操作数地址是默认的。 • 例:PUSHF、POPF
b. 一地址指令(单地址指令) 格式: 操作码 地 址 码 • 只有一个地址码,用于单操作数指令。 例:INC、SHL、JMP、CALL • 或者双操作数指令,但其中一个操作数的 • 地址为默认值。 • 例:MUL、DIV
操作码 地址码1 地址码2 c. 双地址指令 格式: 地址码1既是源操作数的地址,也是目的操作数的地址。 双操作数在运算类、传送类指令中使用较多。 ADD DR, SR
操作码 地址码1 地址码2 地址码3 操作码 地址码1 地址码2 地址码3 地址码4 d. 多地址指令 格式1: 格式2: 特点:操作完成后源操作数的内容不被破坏,用户编程方便。严重的缺点是指令字较长。
3) 指令字长度 机器指令的二进制序列的位数。 • 定长指令变长操作码 • 变长指令定长操作码
a. 定长指令变长操作码 该种形式是将操作码的设计与地址码的设计作为一个整体考虑,以形成高效合理的指令编码。 例:某机指令系统,指令字为16位固定长,要求有3地址指令、2地址指令、1地址指令和0地址指令,每个地址码4位。应如何设计?
设计方案为: • 三地址指令采用4位操作码 • 0000~ 1110 • 双地址指令采用8位操作码 • 11110000~ 11111110 • 一地址指令采用12位操作码 • 111111110000~ 111111111110 • 无地址指令采用16位操作码 • 1111111111110000~ 1111111111111111
0000XXXXXXXXXXXX 4位操作码 (3地址指令15条) ~ 1110XXXXXXXXXXXX 11110000XXXXXXXX 8位操作码 (2地址指令15条) ~ 11111110XXXXXXXX 11111111 0000XXXX 12位操作码 (1地址指令15条) ~ 11111111 1110XXXX 11111111 1111 0000 16位操作码 (0地址指令16条) ~ 11111111 1111 1111
练习: 设某机为定长指令字结构,指令长度12位,每个地址码占3位,试提出一种方案,使该系统包含4条三地址指令,8条二地址指令,180 条单地址指令。 另:能否构成三地址指令4条,单地址指令 255条,零地址指令64条呢?
b. 变长指令定长操作码 指令字的长度与机器字长没有固定的关系。 例:IBM360/370 指令的操作码是8位的, 指令字为16位、32位、48位。 TH-union 指令的操作码是8位的, 指令字为16位.
Th-union的指令格式 8位 4位 4位 操 作 码 目的寄存器 源寄存器 I/O 端口地址 条件转移指令的偏移量 直接数 / 内存地址 / 指令中变址偏移量 单字指令仅用一个指令字。 双字指令要用两个指令字, 此时第二个指令字的内容可能是立即数、一个绝对地址或一个变址位移量。
Th-union的机器指令 汇编指令 0000000000010010ADDR1,R2 0000000100010010SUBR1,R2 0000100100110000INCR3 1000100000010000MVRDR1,0055 0000000001010101
二、指令格式的优化 定义: 缩短指令字的长度 方法: 地址码优化 操作码优化(这是本节主要讨论的) 优化目标: • 节省程序的存储空间 • 指令格式规整,易于译码 • 保持指令的执行速度
1 n H = ∑pi •log2 pi i=1 Huffman 编码法码长理论值: 其中,Pi表示第i种操作码在程序中出现的概率(使用频度),n为操作码的种数。
若采用3位固定长度操作码,信息冗余量: R = ( 3-1.95) / 3 ≈ 35 % 其中:1.95 为哈夫曼编码法的理论值
模型机的指令操作码哈夫曼编码法 指令 Pi Huffman编码 码长 I1 0.45 0 1 I2 0.30 102 I3 0.15 110 3 I4 0.05 1110 4 I5 0.03 11110 5 I6 0.01 111110 6 I7 0.01 1111116
L=0.45X1+0.30X2 +0.15X3+0.05X4 +0.03X5+0.01X6 +0.01X6 =1.97(位) 所以,平均码长接近理论值!
1.97-1.95 << 35% R = = 1.02% 1.97 信息冗余量:
例:某计算机有10条指令,它们的使用频率分别为: 0.30, 0.20, 0.16, 0.09, 0.08,0.07, 0.04, 0.03, 0.02, 0.01。 用Huffman编码对它们的操作码进行编码,并计算平均代码长度。 Huffman编码通过采用huffman树进行,如下所示:
0 1 0 1 0 1 0 0 1 1 0 1 0 1 0 1 1 0 Huffman 树结构
Huffman编码的结果以及各编码的长度如下所示:Huffman编码的结果以及各编码的长度如下所示: 0.30 0.20 0.16 0.09 0.08 0.07 0.04 0.03 0.02 0.01 11 01 101 001 1001 1000 0001 00001 000001 000000 2 2 3 3 4 4 4 5 6 6 平均代码长度为 (0.30+0.20)×2 1.00 +(0.16+0.09)×3 0.75 +(0.08+0.07+0.04)×4 0.76 + 0.03×5 0.15 +(0.02+0.01)×6 0.18 = 1 + 0.75 + 0.76 + 0.15 + 0.18=2.84
哈夫曼编码的优点: • 平均长度最短 • 信息冗余量最小 • 哈夫曼编码的缺点: • 操作码种类多,译码复杂。
模型机的指令操作码扩展编码法 指令 Pi 1-2-3-5 2-4 I1 0.45 000 I2 0.30 1001 I3 0.15 11010 I4 0.05 111001100 I5 0.03 111011101 I6 0.01 111101110 I7 0.01 111111111
例子中1-2-3-5编码法码长平均值 L = 0.45 × 1 + 0.30 × 2 + 0.15 × 3 + 0.05 × 5 + 0.03 × 5 + 0.01 × 5 + 0.01 × 5 = 2.00 与哈夫曼编码法相比,信息冗余量: R = (2-1.95)/2.00 = 2.5%