第3章 寻址方式与指令系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第3章寻址方式与指令系统3.1指令系统概述3.28086寻址方式3.38086指令系统-2-目录上页下页结束3.1指令系统概述3.1.1指令的基本概念程序:是由完成一个完整任务的一系列有序指令组成的有序集合。指令:是指示计算机进行某种操作的命令,通常一条指令对应着一种基本操作。指令系统:计算机所能执行的全部指令的集合,称为处理器的指令系统。3.1.2指令格式计算机中的指令通常由操作码(Operation)和操作数(Operand)组成,如图3.1所示。操作码部分规定计算机所执行的操作,指示一条指令做什么,是任何一条指令必不可少的;操作数部分也称为地址码,用来描述该指令的操作对象,指示指令如何做,根据需要而定。操作码操作数…操作数3.1.38086汇编语言格式一条汇编语言的语句如下:[标号:]操作码操作数[,操作数][;注释]1.双操作数指令大多数指令需要两个操作数,分别称两个操作数为源操作数和目标操作数,指令运算结果存入目标操作数的地址中去。这样,目标操作数的原有数据将被取代。格式:操作码DST,SRC其中,DST为目标操作数,SRC为源操作数。(不能同为存储器操作数)2.单操作数指令指令中只给出一个操作数。若指令只需要一个操作数,则此操作数通常作为目标操作数,在运算前提供源操作数,运算后存放运算结果。若指令需2个操作数,则另一操作数由指令隐含指定。格式:操作码DST3.无操作数指令格式:操作码例如:HLT;停机指令,是无操作数指令INCAX;增1指令,是单操作数指令ADDAX,BX;加法指令,是双操作数指令-4-目录上页下页结束3.1.4指令的执行要执行的程序段的指令,均保存在存储器中,当计算机需要执行一条指令时,首先产生这条指令的相应地址,并根据地址号打开相应的存储单元,取出指令代码,CPU根据指令代码的要求以及指令中的操作数,去进行相应的操作。-5-目录上页下页结束3.28086寻址方式3.2.1数据寻址方式(简述操作数的来源)1.立即数寻址操作数直接存放在指令中,紧跟在指令操作码之后。这样的数称为立即数,相应的寻址方式称为立即寻址方式。这种寻址方式在汇编语言格式中表示为:数字表达式这个数字表达式的值可以是一个8位无符号整数,也可以是一个16位无符号整数,但不可以为小数。例如:MOVAX,251;将十进制数251送入寄存器AX,“251”是立即数MOVAL,‘5’;将5的ASCII码送入寄存器AL,其中‘5’是立即数MOVAL,0E8H;将8位立即数E8H送入寄存器ALMOVAX,2346H;将16位立即数2346H送入寄存器AX可以看到,立即数寻址方式主要用来给寄存器或存储单元赋值,因此这种寻址方式不能用于单操作数指令;若用于双操作数指令,也只能用于源操作数字段,不能用于目标操作数字段。特点:立即寻址方式中操作数可以从指令中直接取得,不需要运行总线周期,所以其显著特征是速度快。-6-目录上页下页结束2.寄存器寻址操作数在CPU的内部寄存器中,指令中指定寄存器名(机器指令中为寄存器的二进制编号)。这种寻址方式在汇编语言格式中表示为:寄存器名对于16位操作数,可以使用的寄存器有:AX、BX、CX、DX、SI、DI、BX、BP等;对于8位操作数,可以使用的寄存器有:AH、AL、BH、BL、CH、CL、DH、DL。例如:MOVAX,CX;将CX内容送AXMOVDL,BL;将BL内容送DL其中“AX”,“CX”,“DL”,“BL”就是寄存器寻址方式。机器执行寄存器寻址方式的指令时,根据寄存器名就可访问到操作数。这种寻址方式的优点是:寄存器数量一般在几个到几十个,比存储器单元少很多,因此它的地址码短,从而缩短了指令长度,节省了程序存储空间。另一方面,从寄存器里取数比从存储器里取数的速度快得多,从而提高了指令执行速度。-7-目录上页下页结束3.存储器寻址方式⑴直接寻址操作数在存储器中,逻辑段中存储单元的有效偏移地址EA由指令直接给出。这种寻址方式在汇编语言格式中可以表示为以下几种:①地址表达式②[地址表达式]③[数字表达式]假设TABLE是在数据段定义的一个字节数组的首地址标号,其偏移地址为1000H,则以下三条指令是等效的:MOVAL,TABLEMOVAL,[TABLE]MOVAL,[1000H]其中“TABLE”、“[TABLE]”、“[1000H]”都是直接寻址方式。以下三条指令也是等效的:MOVAL,TABLE+2MOVAL,[TABLE+2]MOVAL,[1000H+2]-8-目录上页下页结束假设(DS)=3000H,(31000H)=12H,(31001H)=34H,则执行指令MOVAX,[1000H]操作的示意图如图所示。数据段代码段31000H存储器AX30000HOP00H10H12H34H图3.5直接寻址操作示意图指令执行完以后,(AX)=3412H。-9-目录上页下页结束⑵寄存器间接寻址若操作数在存储器中,存储单元有效地址被放在基址寄存器BX、BP或变址寄存器SI、DI中,则称为寄存器间接寻址。寄存器间接寻址方式在汇编格式中表示为:[基址寄存器名或变址寄存器名]例如:MOVAX,[BX];物理地址=DS×16+BXMOVAL,[BP];物理地址=SS×16+BPMOVAX,CS:[DI];物理地址=CS×16+DI其中“[BP]”、“[BX]”、“[DI]”都是寄存器间接寻址方式。机器执行这种寻址方式的指令时,依据地址码字段的值仿问寄存器,将其中的值作为操作数的偏移地址。如果指令中指定的寄存器是BX、SI、DI,则操作数默认在数据段中,取DS寄存器的值作为操作数的段地址值;如果指令中指定的寄存器是BP,则操作数默认在堆栈段中,取SS寄存器的值作为操作数的段地址值,从而求得操作数的20位物理地址,继而访问到操作数。-10-目录上页下页结束如果(DS)=3000H,(BX)=1010H,(31010H)=12H,(31011H)=24H。执行指令MOVAX,[BX]时则操作数的20位物理地址=30000H+1010H=31010H,操作的示意图如图3.7所示。存储器AX30000H12H24H数据段图3.7寄存器间接寻址操作图指令执行完以后,(AX)=2412H。这种寻址方式也允许指定段跨越前缀来取得其它段中的数据。这种寻址方式一般用于访问表格或字符串,执行完一条指令后,通过修改SI或DI或BX或BP的内容就可访问到表格的下一数据项的存储单元。-11-目录上页下页结束⑶寄存器相对寻址若操作数在存储器中,存储单元的有效地址由一个基址或变址寄存器与指令中指定的8位或16位位移量组成,则称为寄存器相对寻址。这种寻址方式在汇编格式中表示为以下两种形式之一:①位移量[基址寄存器名或变址寄存器名]②[基址寄存器名或变址寄存器名+位移量]例如:MOVAX,20H[SI];物理地址=DS×16+SI+20H(8位位移量)MOVCL,[BP+2000H];物理地址=SS×16+BP+2000H(16位位移量)MOVAX,STR[BX]当机器执行这种寻址方式的指令时,依据地址码字段的编号访问到寄存器的值,将其与位移量相加(或相减),和(差)作为操作数的偏移地址。如果指令中指定的寄存器是BX、SI、DI,则操作数默认在数据段中,取DS寄存器的值作为操作数的段地址值;如果指令中指定的寄存器是BP,则操作数默认在堆栈段中,取SS寄存器的值作为操作数的段地址值,从而算得操作数的20位物理地址,继而访问到操作数。-12-目录上页下页结束例如,TABLE是数据段中定义的一个变量名,假设它在数据段中的偏移地址为0100H,有指令:MOVAX,TABLE[SI]若(DS)=2000H,(SI)=00A0H,(201A0H)=12H,(201A1H)=34H,则源操作数20位物理地址=20000H+0100H+00A0H=2000H+01A0H=201A0H操作的示意图如图3.9所示:位移量TABLE数据段代码段201A0H存储器AX20000HOP00H01H12H34HOP图3.9寄存器相对寻址操作图当然,也可用段跨越前缀重新指定段寄存器,例如:MOVAL,ES:TABLE[SI]这种寻址方式可用于表格或数组数据的访问操作。使用时将表格或数组首址作为位移量,用寄存器记录下标,通过修改SI或DI或BX或BP的内容,就可访问不同的数组元素。-13-目录上页下页结束⑷基址加变址寻址操作数在存储器中,存储单元的有效地址是两个指定寄存器的值之和。这种寻址方式在汇编格式中表示为以下两种形式之一:①[基址寄存器名][变址寄存器名]②[基址寄存器名+变址寄存器名]例如:MOVAX,[BX][SI];物理地址=DS×16+BX+SIMOVAX,[BX+SI];物理地址=DS×16+BX+SIMOVCL,CS:[BX+DI];物理地址=CS×16+BX+DI其中“[BX][SI]”、“[BX+DI]“都是基址变址寻址方式。当机器执行这种寻址方式的指令时,依据地址码字段的值访问到基址寄存器和变址寄存器的值,将其相加,和作为操作数的偏移地址。-14-目录上页下页结束例如:MOVAX,[BX][SI]若(DS)=2000H,(BX)=0500H,(SI)=0010H,则偏移地址=0500H+0010H=0510H,20位物理地址=20000H+0510H=20510H。假设(20510H)=12H,(20511H)=34H,操作的示意图如图3.11所示:20510H存储器AX20000H12H34H数据段代码段图3.11基址变址寻址操作示意图当然,也可用段跨越前缀重新指定段寄存器,例:MOVAL,ES:[BX][SI]这种寻址方式也可用于表格或数组数据的访问。将表格或数组首地址存入基址寄存器,通过修改变址寄存器内容可访问到表格或数组的任一数据项的存储单元。由于这种寻址方式两个寄存器内容都可修改,因此它比寄存器相对寻址更灵活。-15-目录上页下页结束⑸相对基址加变址寻址操作数在存储器中,存储单元的有效地址由一个基址寄存器和变址寄存器的内容及指令中指定的8位或16位位移量的和构成。即EA=[BX]/[BP]+[SI]/[DI]+[8/16位位移量]地址表达式可以书写为以下两种形式之一:①位移量[基址寄存器][变址寄存器]②[基址寄存器+变址寄存器+位移量]例如:MOVAX,[BX+DI+20H];指令中给出8位位移量20H。MOVAX,ES:1000H[BP][SI];访问ES段字存储单元。以下三条语句是等价的:MOVAL,TABLE[BX][SI]MOVAL,TABLE[BX+SI]MOVAL,[TABLE+BX+SI]-16-目录上页下页结束3.2.2程序地址寻址方式1.段内直接/相对寻址这种寻址方式的汇编格式有三种:①指令名SHORT转移目标地址标号②指令名转移目标地址标号③指令名NEARPTR转移目标地址标号指令中虽然直接指明了要转移的目标地址号,但本质上不是直接寻址;因为这种指令只改变IP寄存器的值而不改变CS寄存器的值,因此又叫段内寻址。汇编这种指令寻址方式时,汇编程序计算转移目标地址标号与本条指令的下一条指令的地址的差值,将其补码称为位移量,写入指令的地址码字段。-17-目录上页下页结束当执行这种寻址方式的转移指令时,机器取出位移量,与当前(IP)相加,和送入IP寄存器中,CS寄存器内容保持不变,从而实现转移,如图3.12所示:转移目标地址的偏移地址址指令位移量IP寄存器IP寄存器图3.12段内直接寻址示意图由此可看出,这种寻址方式实现的其实是相对转移。位移量不同,转移范围不同。当位移量为8位时,只允许转移到与本条指令的下一条指令相距-128~+127范围内的存储单元去。当位移量为16位时,允许转移到当前代码段内任何地方。要注意的是:条件转移指令的位移量只能是8位,而无条件转移的指令可以是8位,也可以是16位。8位叫短跳转,16位叫近跳转。-18-目录上页下页结束2.段间直接寻

1 / 155
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功