第二章指令优化_第1页
第二章指令优化_第2页
第二章指令优化_第3页
第二章指令优化_第4页
第二章指令优化_第5页
已阅读5页,还剩117页未读 继续免费阅读

下载本文档

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

文档简介

1、计算机系统结构合成 -指令系统及其优化l微处理器是微机的硬件核心l主要包含指令执行的运算和控制部件,还有多种寄存器l对程序员来说,微处理器抽象为以名称存取的寄存器l8086内部结构有两个功能模块,完成一条指令的取指和执行功能v模块之一:总线接口单元BIU,主要负责读取指令和操作数v模块之二:执行单元EU ,主要负责指令译码和执行l8086内部结构就是可编程的寄存器组v 执行单元EU 8个通用寄存器v 1个指令指针寄存器v 1个标志寄存器v 4个段寄存器l8086的16位通用寄存器是:AXBX CX DXSIDIBP SPl其中前4个数据寄存器都还可以分成高8位和低8位两个独立的寄存器l8086

2、的8位通用寄存器是:AH BH CH DHAL BL CL DLl对其中某8位的操作,并不影响另外对应8位的数据l数据寄存器用来存放计算的结果和操作数,也可以存放地址l每个寄存器又有它们各自的专用目的AX累加器,使用频度最高,用于算术、逻辑运算以及与外设传送信息等;BX基址寄存器,常用做存放存储器地址;CX计数器,作为循环和串操作等指令中的隐含计数器;DX数据寄存器,常用来存放双字长数据的高16位,或存放外设端口地址。l变址寄存器常用于存储器寻址时提供地址SI是源变址寄存器DI是目的变址寄存器l串操作类指令中,SI和DI具有特别的功能l指针寄存器用于寻址内存堆栈内的数据lSP为堆栈指针寄存器,

3、指示栈顶的偏移地址lSP不能再用于其他目的,具有专用目的lBP为基址指针寄存器,表示数据在堆栈段中的基地址lSP和BP寄存器与SS段寄存器联合使用以确定堆栈段中的存储单元地址l堆栈是主存中一个特殊的区域l它采用(First In Last Out)或后进先出LIFO(Last In First Out)的原则进行存取操作,而不是随机存取操作方式。l堆栈通常由处理器自动维持。在8086中,由堆栈段寄存器SS和堆栈指针寄存器SP共同指示l指令指针寄存器IP,指示代码段中指令的偏移地址l它与代码段寄存器CS联用,确定下一条指令的物理地址l计算机通过CS : IP寄存器来控制指令序列的执行流程lIP寄

4、存器是一个专用寄存器l标志(Flag)用于反映指令执行结果或控制指令执行形式l8086处理器的各种标志形成了一个16位的标志寄存器FLAGS(程序状态字PSW寄存器)OF1115 12DF10IF9TF8SF7ZF65AF43PF21CF0 程序设计需要利用标志的状态程序设计需要利用标志的状态l状态标志用来记录程序运行结果的状态信息,许多指令的执行都将相应地设置它CF ZF SF PF OF AFl控制标志可由程序根据需要用指令设置,用于控制处理器执行指令的方式DF IF TFl当运算结果的最高有效位有进位(加法)或借位(减法)时,进位标志置1,即CF = 1;否则CF = 0。3AH + 7

5、CHB6H,没有进位:CF = 0AAH + 7CH(1)26H,有进位:CF = 1l若运算结果为0,则ZF = 1;否则ZF = 03AH + 7CHB6H,结果不是零:,结果不是零:ZF = 084H + 7CH(1)00H,结果是零:,结果是零:ZF = 1 注意:注意:ZF为为1表示的结果是表示的结果是0l运算结果最高位为1,则SF = 1;否则SF = 03AH + 7CHB6H,最高位,最高位D71:SF = 184H + 7CH(1)00H,最高位,最高位D70:SF = 0 有符号数据用最高有效位表示数据的符号有符号数据用最高有效位表示数据的符号所以,最高有效位就是符号标志的

6、状态所以,最高有效位就是符号标志的状态l当运算结果最低字节中“1”的个数为零或偶数时,PF = 1;否则PF = 03AH + 7CHB6H10110110B结果中有结果中有5个个1,是奇数:,是奇数:PF = 0 PF标志仅反映最低标志仅反映最低8位中位中“1”的个数是的个数是偶或奇,即使是进行偶或奇,即使是进行16位字操作位字操作l若算术运算的结果有溢出,l则OF1;否则 OF03AH + 7CHB6H,产生溢出:,产生溢出:OF = 1AAH + 7CH(1)26H,没有溢出:,没有溢出:OF = 03AH + 7CHB6H,D3有进位:AF = 1运算时运算时D D3 3位(低半字节)

7、有进位或位(低半字节)有进位或借位时,借位时,AF = 1AF = 1;否则;否则AF = 0AF = 0。 这个标志主要由处理器内部使用,这个标志主要由处理器内部使用,用于十进制算术运算调整指令中,用用于十进制算术运算调整指令中,用户一般不必关心户一般不必关心l用于串操作指令中,控制地址的变化方向:设置DF0,存储器地址自动增加;设置DF1,存储器地址自动减少。CLDCLD指令复位方向标志:指令复位方向标志:DFDF0 0STDSTD指令置位方向标志:指令置位方向标志:DFDF1 1l用于控制外部可屏蔽中断是否可以被处理器响应:设置IF1,则允许中断;设置IF0,则禁止中断。CLICLI指令

8、复位中断标志:指令复位中断标志:IFIF0 0STISTI指令置位中断标志:指令置位中断标志:IFIF1 1l用于控制处理器进入单步操作方式:设置TF0,处理器正常工作;设置TF1,处理器单步执行指令。单步执行指令单步执行指令处理器在每条指令执行结处理器在每条指令执行结束时,便产生一个编号为束时,便产生一个编号为1 1的内部中断的内部中断这种内部中断称为单步中断这种内部中断称为单步中断所以所以TFTF也称为单步标志也称为单步标志n利用单步中断可对程序进行逐条指令的调试利用单步中断可对程序进行逐条指令的调试n这种逐条指令调试程序的方法就是单步调试这种逐条指令调试程序的方法就是单步调试l寄存器是微

9、处理器内部暂存数据的存储单元,以名称表示l存储器则是微处理器外部存放程序及其数据的空间l程序及其数据可以长久存放在外存,在程序需要时才进入主存l主存需要利用地址区别l计算机中信息的单位二进制位Bit:存储一位二进制数:0或1字节Byte:8个二进制位,D7D0字Word:16位,2个字节,D15D0双字DWord:32位,4个字节,D31D0l最低有效位LSB:数据的最低位,D0位l最高有效位MSB:数据的最高位,对应字节、字、双字分别指D7、D15、D31位D7D0字节D15D0字D31D0双字D7 D000000H00001H56H00002H12H00003H34H00004H78H00

10、005H00006H低地址低地址l每个存储单元都有一个编号;被称为存储器地址l每个存储单元存放一个字节的内容0002H0002H单元存放有一个数据单元存放有一个数据56H56H表达为表达为0002H0002H56H56Hl多字节数据在存储器中占连续的多个存储单元:存放时,低字节存入低地址,高字节存入高地址;表达时,用它的低地址表示多字节数据占据的地址空间。图图1.71.7中中2 2号号“字字”单元的内容为:单元的内容为:0002H = 1256H0002H = 1256H2 2号号“双字双字”单元的内容为:单元的内容为:0002H = 78341256H0002H = 78341256H 80

11、 x86处理器采用处理器采用“低对低、高对低对低、高对高高”的存储形式,被称为的存储形式,被称为“小端方式小端方式Little Endian”。 相 对 应 还 存 在相 对 应 还 存 在 “ 大 端 方 式大 端 方 式 B i g Endian”。l同一个存储器地址可以是字节单元地址、字单元地址、双字单元地址等等l字单元安排在偶地址(xxx0B)、双字单元安排在模4地址(xx00B)等,被称为“地址对齐(Align)”l对于不对齐地址的数据,处理器访问时,需要额外的访问存储器时间l应该将数据的地址对齐,以取得较高的存取速度视具体情况来确定视具体情况来确定l8086CPU有20条地址线最大

12、可寻址空间为2201MB物理地址范围从00000HFFFFFHl8086CPU将1MB空间分成许多逻辑段(Segment)每个段最大限制为64KB段地址的低4位为0000Bl这样,一个存储单元除具有一个唯一的物理地址外,还具有多个逻辑地址l对应每个物理存储单元都有一个唯一的20位编号,就是物理地址,从00000HFFFFFH。l分段后在用户编程时,采用逻辑地址,形式为段基地址 : 段内偏移地址分隔符分隔符l段地址说明逻辑段在主存中的起始位置l8086规定段地址必须是模16地址:xxxx0Hl省略低4位0000B,段地址就可以用16位数据表示,就能用16位段寄存器表达段地址l偏移地址说明主存单元

13、距离段起始位置的偏移量l每段不超过64KB,偏移地址也可用16位数据表示l将逻辑地址中的段地址左移4位,加上偏移地址就得到20位物理地址l一个物理地址可以有多个逻辑地址逻辑地址逻辑地址 1460:1001460:100、1380:F001380:F00物理地址物理地址 14700H 14700H14700H 14700H146014600 0H H 100H100H14700H14700H138013800 0H H F00HF00H14700H14700H段地址左移段地址左移4 4位位加上偏移地址加上偏移地址得到物理地址得到物理地址v8086有4个16位段寄存器vCS(代码段)指明代码段的起

14、始地址vSS(堆栈段)指明堆栈段的起始地址vDS(数据段)指明数据段的起始地址vES(附加段)指明附加段的起始地址v每个段寄存器用来确定一个逻辑段的起始地址,每种逻辑段均有各自的用途v 代码段用来存放程序的指令序列v 代码段寄存器CS存放代码段的段地址v 指令指针寄存器IP指示下条指令的偏移地址v 处理器利用CS:IP取得下一条要执行的指令v堆栈段确定堆栈所在的主存区域v堆栈段寄存器SS存放堆栈段的段地址v堆栈指针寄存器SP指示堆栈栈顶的偏移地址v处理器利用SS:SP操作堆栈顶的数据v 数据段存放运行程序所用的数据v 数据段寄存器DS存放数据段的段地址v 各种主存寻址方式(有效地址EA)得到存

15、储器中操作数的偏移地址v 处理器利用DS:EA存取数据段中的数据l附加段是附加的数据段,也用于数据的保存:v 附加段寄存器ES存放附加段的段地址v 各种主存寻址方式(有效地址EA)得到存储器中操作数的偏移地址l处理器利用ES:EA存取附加段中的数据l串操作指令将附加段作为其目的操作数的存放区域v程序的指令序列必须安排在代码段v程序使用的堆栈一定在堆栈段v程序中的数据默认是安排在数据段,也经常安排在附加段,尤其是串操作的目的区必须是附加段v数据的存放比较灵活,实际上可以存放在任何一种逻辑段中v 没有指明时,一般的数据访问在DS段;使用BP访问主存,则在SS段v 默认的情况允许改变,需要使用段超越

16、前缀指令;8086指令系统中有4个:vCS:;代码段超越,使用代码段的数据vSS: ;堆栈段超越,使用堆栈段的数据vDS: ;数据段超越,使用数据段的数据vES: ;附加段超越,使用附加段的数据v 没有段超越的指令实例:v MOV AX,2000H ;AXDS:2000Hv;从默认的DS数据段取出数据v 采用段超越前缀的指令实例:v MOV AX,ES:2000H;AXES:2000Hv;从指定的ES附加段取出数据l8086对逻辑段要求:段地址低4位均为0每段最大不超过64KBl8086对逻辑段并不要求:必须是64KB各段之间完全分开(即可以重叠)l1MB1MB空间最多能分成多少个段?空间最多

17、能分成多少个段?每隔每隔1616个存储单元就可以开始一个段,个存储单元就可以开始一个段,所以所以1MB1MB最多可以有:最多可以有:2 2202016162 2161664K 64K 个段个段l1MB1MB空间最少能分成多少个段?空间最少能分成多少个段?每隔每隔64K64K个存储单元开始一个段,个存储单元开始一个段,所以所以1MB1MB最少可以有:最少可以有:2 220202 2161616 16 个段个段l8086有8个8位通用寄存器、8个16位通用寄存器l8086有6个状态标志和3个控制标志l8086将1MB存储空间分段管理,有4个段寄存器,对应4种逻辑段l8086有4个段超越前缀指令,用

18、于明确指定数据所在的逻辑段l在保护模式下,逻辑地址由选择器和偏移地址两部分组成。 选择器存放在段寄存器中,但它不能直接表示段基地址,而是由操作系统通过一定的方法取得段基地址,再和偏移地址相加,求的存储单元的物理地址。区别:偏移地址为32位长,最大段长可从64KB扩大到4GB.l外部设备与主机的通信是通过外设接口进行的,每个接口包括一组寄存器。l一般,这些寄存器有三个用途:l 数据寄存器l 状态寄存器l 命令寄存器l计算机的指令系统就是指该计算机能够执行的全部指令的集合l每种计算机都有它支持的指令集合 l16位8086指令系统是Intel 80 x86系列微处理器指令系统的基础l计算机常用的各种

19、数据结构有串、堆栈、队列、向量、阵列、矩阵、链表、图等。实现这些数据结构的各种算法,几乎都立足于计算机系统结构只提供按地址访问的一维线形存储器以及最基本、最简单的数据表示。 l数据表示指的是能由硬件直接辨认的数据类型。这样,这些数据结构要经过软件映象,变换成按地址访问一维存储器内的各种数据表示。如何用最少的存储空间存储这些数据结构,以及用什么样的算法能最快、最简地存储则是数据结构的研究课题。 l计算机的基本数据类型有逻辑(布尔)数、定点数(整数)、浮点数(实数)、十进制数、字符串、数组等。对这些数据的运算可以设置专门指令,也可以仅设置最简单的算术逻辑运算指令。而通过编制程序执行实现之,但后者速

20、度下降很多。在机器中若设置能直接对矩阵向量数据(数组)进行运算的指令及硬件,可以大大提高对向量、数组的处理速度,这一般在巨型机中才使用。 l目前计算机所用数据字长有8位、16位、32位等。在存储器中每个单元的容量为8位,即一个字节,故存储器单元地址按字节编址。计算机的指令系统可支持对字节(8位)、半字(16位)、字(32位)、双字(64位)的运算。 l计算机的数据表示如何确定,是一个复杂的问题。除了必不可少的基本数据表示之外,数据表示的确是一个软、硬件分配的问题。这是因为各种数据结构本来是能够实现于只有最简单、最基本数据表示的机器中,只是在有了更好的数据表示之后,实现的效率可以更高罢了。 l衡

21、量某种数据表示是否合适的标准,首先要看这能使实行时间以及所需存储容量减少了多少。而衡量实行时间是否减少,一个重要的指标是看主存与处理机间所需传送的信息量是否减少。 l例如,有两个200200元素(定点数)的阵列A与B进行相加运算,若用PL/1语言仅需一条语句,经优化编译形成6条机器指令的目标程序,其中有4条需循环执行40,000次。但若机器有阵列型数据表示,则只需一条机器指令就能执行两个阵列相加的运算,所以只需一次访问存储器操作,处理机与主存间取指操作减少了440000次,故实现时间大大减少。 l衡量某种数据表示的确是否合适的另一个标准,是看这个数据表示的通用性如何,利用率如何。对于基本的数据

22、表示,其通用性和利用率当然不构成如何问题,而对于如上述阵列机的数据表示(指阵列数据表示),则其通用性、利用率就不理想了。而且,阵列数据表示还有能表达多大阵列的问题;阵列过大,硬件投资增加,机器性能价格比下降,利用率可能不高;阵列过小,阵列运算要拆成多块,分批进入阵列运算部件,使编译困难。所以,机器的数据表示的选择应该综合平衡上述的各种因素后才确定。 l指令的功能指令的功能该指令能够实现何种操作。通常指令助该指令能够实现何种操作。通常指令助记符就是指令功能的英文单词或其缩写形式记符就是指令功能的英文单词或其缩写形式l指令支持的寻址方式指令支持的寻址方式该指令中的操作数可以采用何该指令中的操作数可

23、以采用何种寻址方式种寻址方式l指令对标志的影响指令对标志的影响该指令执行后是否对各个标志位该指令执行后是否对各个标志位有影响,以及如何影响有影响,以及如何影响l其他方面其他方面该指令其他需要特别注意的地方,如指令该指令其他需要特别注意的地方,如指令执行时的约定设置、必须预置的参数、隐含使用的寄存执行时的约定设置、必须预置的参数、隐含使用的寄存器等器等l由4部分组成:标号:指令助记符 目的操作数,源操作数注释 标号表示该指令在主存中的逻辑地址标号表示该指令在主存中的逻辑地址 每个指令助记符就代表一种指令每个指令助记符就代表一种指令 目的和源操作数表示参与操作的对象目的和源操作数表示参与操作的对象

24、 注释是对该指令或程序段功能的说明注释是对该指令或程序段功能的说明l从8086的机器代码格式入手,论述:立即数寻址方式寄存器寻址方式存储器寻址方式l进而熟悉8086汇编语言指令格式,尤其是其中操作数的表达方法;为展开8086指令系统做好准备l指令由操作码和操作数两部分组成指令由操作码和操作数两部分组成l操作码说明计算机要执行哪种操作,如传送、运算、移操作码说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分位、跳转等操作,它是指令中不可缺少的组成部分l操作数是指令执行的参与者,即各种操作的对象操作数是指令执行的参与者,即各种操作的对象l有些指令不需要操作数,通

25、常的指令都有一个或两个操有些指令不需要操作数,通常的指令都有一个或两个操作数,也有个别指令有作数,也有个别指令有3个甚至个甚至4个操作数个操作数操作码操作码操作数操作数l每种指令的操作码:每种指令的操作码:用一个唯一的助记符表示(指令功能的英文缩用一个唯一的助记符表示(指令功能的英文缩写)写)对应着机器指令的一个二进制编码对应着机器指令的一个二进制编码l指令中的操作数:指令中的操作数:可以是一个具体的数值可以是一个具体的数值可以是存放数据的寄存器可以是存放数据的寄存器或指明数据在主存位置的存储器地址或指明数据在主存位置的存储器地址l指令系统设计了多种操作数的来源指令系统设计了多种操作数的来源l

26、寻找操作数的过程就是操作数的寻址寻找操作数的过程就是操作数的寻址l操作数采取哪一种寻址方式,会影响机器运操作数采取哪一种寻址方式,会影响机器运行的速度和效率行的速度和效率 如何寻址一个操作数对程序设计很重要如何寻址一个操作数对程序设计很重要给出立即寻址方式需要的数值本身给出立即寻址方式需要的数值本身给出某些寻址方式需要的对基地址的偏移量给出某些寻址方式需要的对基地址的偏移量表明采用的寻址方式表明采用的寻址方式1/2字节0/1字节0/1/2字节0/1/2字节操作码mod reg r/m位移量立即数操作数操作数mov ax,BP+0 ;机器代码是 8B 46 00l前一个字节8B是操作码(含w1表

27、示字操作)l中间一个字节46(01 000 110)是 “mod reg r/m”字节reg000表示目的操作数为AXmod01和r/m110表示源操作数为BP+D8l最后一个字节就是8位位移量D8001/2字节0/1字节0/1/2字节0/1/2字节操作码mod reg r/m位移量立即数mov al,05 ;机器代码是B0 05l前一个字节B0是操作码(含一个操作数AL),后一个字节05是立即数mov ax,0102H ;机器代码是B8 02 01l前一个字节B8是操作码(含一个操作数AX),后两个字节02 01是16位立即数(低字节02在低地址)操作码操作码操作数操作数操作码 操作数1,操

28、作数2 ;注释l操作数2,称为源操作数 src,它表示参与指令操作的一个对象l操作数1,称为目的操作数 dest,它不仅可以作为指令操作的一个对象,还可以用来存放指令操作的结果l分号后的内容是对指令的解释MOV dest,srcMOV dest,src;destsrc destsrc lMOVMOV指令的功能是将源操作数指令的功能是将源操作数srcsrc传送至目的操传送至目的操作数作数destdest,例如:,例如:MOV AL,05HMOV AL,05H;AL05HAL05HMOV BX,AXMOV BX,AX;BXAXBXAXMOV AX,SIMOV AX,SI;AXDS:SIAXDS:S

29、IMOV AX,BP+06HMOV AX,BP+06H;AXSS:BP+06HAXSS:BP+06HMOV AX,BX+SIMOV AX,BX+SI;AXDS:BX+SIAXDS:BX+SI源操作数源操作数 src目的操作数目的操作数 dest30H30H被传送的数据被传送的数据l指令中的操作数直接存放在机器代码中,紧跟在指令中的操作数直接存放在机器代码中,紧跟在操作码之后(操作数作为指令的一部分存放在操操作码之后(操作数作为指令的一部分存放在操作码之后的主存单元中)作码之后的主存单元中)l这种操作数被称为立即数这种操作数被称为立即数imm它可以是它可以是8位数值位数值i8(00HFFH)也可

30、以是也可以是16位数值位数值i16(0000HFFFFH)l立即数寻址方式常用来给寄存器赋值立即数寻址方式常用来给寄存器赋值MOV AL,05H;AL05HMOV AX,0102H;AX0102Hl操作数存放在CPU的内部寄存器reg中,可以是:8位寄存器r8:AH、AL、BH、BL、CH、CL、DH、DL16位寄存器r16:AX、BX、CX、DX、SI、DI、BP、SPMOV AX,1234H ;AX1234HMOV BX,AX;BXAXl指令中给出操作数的主存地址信息(偏移地址,称之为有效地址EA),而段地址在默认的或用段超越前缀指定的段寄存器中l8086设计了多种存储器寻址方式1、直接寻

31、址方式2、寄存器间接寻址方式3、寄存器相对寻址方式4、基址变址寻址方式5、相对基址变址寻址方式l有效地址在指令中直接给出l默认的段地址在DS段寄存器,可使用段超越前缀改变MOV AX,2000H;AXDS:2000H;指令代码:A10020MOV AX,ES:2000H;AXES:2000H;指令代码:26A10020l有效地址存放在基址寄存器BX或变址寄存器SI、DI中l默认的段地址在DS段寄存器,可使用段超越前缀改变MOV AX,SI;AXDS:SIl有效地址是寄存器内容与有符号8位或16位位移量之和,寄存器可以是BX、BP或SI、DI有效地址有效地址BX/BP/SI/DI8/16位位移量

32、位位移量l段地址对应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是SS;可用段超越前缀改变MOV AX,DI+06H;AXDS:DI+06HMOV AX,BP+06H;AXSS:BP+06Hl有效地址由基址寄存器(BX或BP)的内容加上变址寄存器(SI或DI)的内容构成:有效地址有效地址BX/BPSI/DIl段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变MOV AX,BX+SI;AXDS:BX+SIMOV AX,BP+DI;AXSS:BP+DIMOV AX,DS:BP+DI;AXDS:BP+DIl有效地址是基址寄存器(BX/BP)、变址寄存器(SI

33、/DI)与一个8位或16位位移量之和:有效地址BX/BPSI/DI8/16位位移量l段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变MOV AX,BX+SI+06H;AXDS:BX+SI+06H 位移量可用符号表示位移量可用符号表示 同一寻址方式有多种表达形式同一寻址方式有多种表达形式l在寄存器相对寻址或相对基址变址寻址方式中,位移量可用符号表示:MOV AX,SI+COUNT;COUNT是事先定义的变量或常量(就是数值)MOV AX,BX+SI+WNUM;WNUM也是变量或常量l同一寻址方式可以写成不同的形式:MOV AX,BXSI;等同于 MOV AX,

34、BX+SIMOV AX,COUNTSI;等同于 MOV AX,SI+COUNTMOV AX,WNUMBXSI;等同于 MOV AX,WNUMBX+SI;等同于 MOV AX,BX+SI+WNUMlr8任意一个8位通用寄存器AH AL BH BL CH CL DH DLlr16任意一个16位通用寄存器AX BX CX DX SI DI BP SPlreg代表r8或r16lseg段寄存器 CS/DS/ES/SSlm8一个8位存储器操作数单元(所有主存寻址方式)lm16一个16位存储器操作数单元(所有主存寻址方式)lmem代表m8或m16li8一个8位立即数li16一个16位立即数limm代表i8或

35、i16ldest目的操作数lsrc源操作数l指令系统是计算机所有指令的集合,程序员用各种语言编写的程序都要翻译成(编译或解释)以指令形式表示的机器语言后才能运行,所以它反映了计算机的基本功能,是硬件设计人员和程序员都能见到的机器的主要属性,早期计算机的指令系统很简单,一些比较复杂的操作由子程序实现,因此计算机的处理速度比较慢。 l随着硬件价格的下降,指令系统逐步扩充,指令的功能也逐步增强。指令系统的改进是围绕着缩小与高级语言的语义差异以及有利于操作系统的优化而进行的。l例如,高级语言中的实数计算是通过浮点运算进行的,对应在指令系统中设置浮点运算指令能明显地提高速度 l例如,在高级语言程序中经常

36、用到IF语句、DO语句等,为此在指令系统中设置功能较强的“条件转移”指令是有益的。l例如,为了便于实现程序嵌套,设置了Call及Ret指令l上述这些措施都是针对高级语言的优化进行的,使生成的目标程序短而且运行速度快,同时也便于编译。 l例如,为操作系统的实现或优化而设置的特殊指令,除了各种控制系统状态的指令外,还有为多道程序公用数据管理和多处理机系统信息管理用的“测试与置定”、“比较与交换”等指令。l指令由操作码和地址码两部分组成,上述各种寻址方式主要反映在指令的地址码部分。随着指令类型不同,对地址码的长度要求变化很大,例如操作数据在内部通用寄存器内比之在存储器内,其地址码长度要短得多。为缩小

37、程序代码所占的存储容量,各类指令的长度可以不一致,例如在同一个计算机中可以有1字节、2字节、3字节、4字节等多种长度的指令。 l从压缩代码的观点出发,希望常用的指令的操作码短些,这样最后使程序的长度也短些。运用哈夫曼(Huffman)码制压缩的基本概念,可以达到操作码优化的目的。 l哈夫曼压缩的基本概念是:出现概率最大的事件用最少的位(或最短的时间)来表示(或处理),而概率较小的事件用较多的位(或较长的时间)来表示(或处理),达到导致平均位数(或时间)缩短的目的。在使用哈氏压缩之前,必须先了解每一种指令使用中的概率使用频率Pi。 l设某计算机有7条指令(I1I7),经过典型程序的统计,其使用频

38、度Pi为(使用频度表)lI1 0.40000lI2 0.30001lI30.15010lI40.05011lI50.04100lI60.03101lI7 0.03110l按信息论中的哈氏信息源熵(即平均信息量) H公式计算 H=-Pi log2Pil本例H=0.401.32+0.301.74+0.152.74+l 0.054.32+0.044.64+0.035.06+l 0.035.06 =2.17l表示只需2.17位(平均码长,又名最少使用位数)l操作码的实际平均长度为Pi*Ii(Ii:操作码位数)。本例=3l信息冗余量表示使用n位后,与最少使用位数的冗余程度。冗余度= 1-H/Pi*Iil

39、本例7条指令用3位二进制表示,则信息冗余度为1-2.17/3=28%。l按使用频度排列,由小到大;l选最小二结点合并成一个结点,写入“和”;l不断合并,最终有“根结点”;l从“根结点”向下二叉用“1”、“0”表示;l得到Haffman code0.030.030.040.050.150.300.400.060.090.150.300.601.00101010101010lI1 0.400000lI2 0.3000110lI30.15010110lI40.0501111100lI50.0410011101lI60.0310111110lI7 0.0311011111l最小使用位数 l H=0.4

40、01+0.302+0.153+ l 0.055+0.045+0.035+l 0.035l =2.20l信息冗余度l 1-2.17/ 2.20 =1.36%lHaffman 编码的最大缺点是不规整。l不利于存储器存储;l不利于指令译码网络的执行。l改进的方法“扩展编码”l只有两种码长的扩展操作码编码,是需要对指令使用频度进行按大小分“群”。将高频的指令分在同一群中,对其用短的操作码编码,而将低频的指令分在另一群中,使用长操作码编码。每一群都各自用等长操作码编码。注意,为了能唯一解码和立即解码,在短操作码中还要使用某些码来作为扩展成长操作码的扩展标志码。经过综合权衡,使平均码长尽可能短,来定好长、短码的码长组配关系。lI1 0.40000000lI2 0.300011001lI30.1501011010lI40.05011111001100lI50.04100111011101lI60.03101111101110lI7 0.03110111111111l最小使用位数 l H=0.402+0.302+0.152+ l 0.054+0.044+0.034+l 0.034l =2.30l信息冗余度l 1-2.17/ 2.30 =5.65%l等长Haffma

温馨提示

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

评论

0/150

提交评论