下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章寻址方式与指令系统3.1指令系统概述3.28086寻址方式3.38086指令系统3.1指令系统概述3.1.1指令的基本概念
指令:是指示计算机进行某种操作的命令,通常一条指令对应着一种基本操作。指令系统:是计算机所能执行的全部指令的集合。
机器指令:用一组二进制编码来表示,是机器所能直接理解和执行的指令。
汇编指令:用助记符来代替二进制表示的指令。例如有:101110111000B
机器指令MOVAL,8汇编指令3.1.2指令格式
指令通常由操作码(Operation)和操作数(Operand)组成。即:其中:①操作码规定计算机所执行的操作;
②操作数部分也称为地址码,用来描述该指令的操作对象。操作码操作数…操作数3.1.38086汇编语言格式1.8086指令的一般格式
[标号:]操作码操作数[;注释]其中:①标号表示该条指令在代码段中的偏移地址;
②注释是对该指令进行说明,增加程序的可阅读性,并不会被机器所执行;
③操作码表示该指令的功能;④操作数表示执行该指令时所需要用的数据。3.1.38086汇编语言格式2.汇编指令的类型一般汇编指令中操作数的个数可以是两个,一个或者没有操作数,这样指令分别被称为双操作数指令,单操作数指令和无操作数指令。大多数的汇编指令为双操作数指令,其格式为:
操作码目的操作数(DST),源操作数(SRC)
例如:MOVAX,100
该指令功能是将源操作数100传送到目的操作数AX中。3.1.38086汇编语言格式标号:操作码操作数;注释1.双操作数指令大多数指令需要两个操作数,分别称两个操作数为源操作数和目标操作数,指令运算结果存入目标操作数的地址中去。这样,目标操作数的原有数据将被取代。格式:操作码DST,SRC其中,DST为目标操作数,SRC为源操作数。2.单操作数指令指令中只给出一个操作数。若指令只需要一个操作数,则此操作数通常作为目标操作数,在运算前提供源操作数,运算后存放运算结果。若指令需2个操作数,则另一操作数由指令隐含指定。格式:操作码DST3.1.38086汇编语言格式3.无操作数指令
格式:操作码例如:
HLT ;停机指令,是无操作数指令
INCAX ;增1指令,是单操作数指令
ADDAX,BX ;加法指令,是双操作数指令3.1.4指令的执行
要执行的程序段的指令,均保存在存储器中,当计算机需要执行一条指令时,首先产生这条指令的相应地址,并根据地址号打开相应的存储单元,取出指令代码,CPU根据指令代码的要求以及指令中的操作数,去行相应的操作。3.28086寻址方式
存储器既可以用来存放数据,又可以存放指令。当某个存储单元存放的是数据的时候,该存储单元序号的就是此数据的地址;当某个存储单元存放的是指令的时候,该存储单元序号的就是此指令的地址。那么,形成数据地址或者指令地址的方式,就被称为寻址方式。
根据存储单元存放的内容类型不同,寻址方式又可以分为:数据寻址方式和指令寻址方式3.2.1数据寻址方式
指令中参加指令执行的数据存放位置可以有以下三种:参加操作的数据就包含在指令中。参加操作的数据在CPU的某个寄存器中。参加操作的数据在内存中,这时指令中的操作数包含着寻找参加操作的数据所在地址的信息。
所以,根据操作数所存放的地方可以将数据寻址方式分成三大类:
立即数寻址方式、寄存器寻址方式、存储器寻址方式特点:①立即寻址方式中操作数可以从指令中直接取得,不需要访问存储器或者寄存器,所以其速度快。
②立即数寻址方式主要用来给寄存器或存储单元赋值,因此这种寻址方式不能用于单操作数指令;若用于双操作数指令,也只能用于源操作数字段,不能用于目标操作数字段。1.立即数寻址方式
参加运算的数据就包含在指令代码中。例如:
MOVAL,06H;功能:AL06H指令代码:B006 MOVBX,100;功能:BX0064H指令代码:BB64002.寄存器寻址方式
参加运算的数据在CPU的某个寄存器中。例如:
MOVAL,06H;指令中的目标操作数AL就是寄存器寻址方式
MOVDS,AX
;指令中的两个操作数DS和AX都是寄存器寻址方式特点:①机器执行这种寻址方式的指令时,根据地址码字段访问到寄存器,继而访问到操作数。②寄存器数量一般在几个到几十个,比存储器单元少很多,因此它的地址码短,从而缩短了指令长度,节省了程序存储空间。另一方面,从寄存器里取数比从存储器里取数的速度快得多,从而提高了指令执行速度。
因为参加运算的数据存放在存储单元中,所以要想得到数据,则必须要知道存放数据的存储单元的偏移地址(EA)才行。根据得到存储地址的方式不同,存储器寻址方式可以分成:
直接寻址寄存器间接寻址寄存器相对寻址基址变址寻址相对基址加变址寻址3.存储器寻址方式
特点:在指令中直接给出了参加操作数据的偏移地址;
地址可以用变量或者数字在指令中用[]表示⑴直接寻址方式例如:假设(DS)=3000H,(31000H)=12H,(31001H)=34H,则执行指令
MOVAL,[1000H]操作的示意图如图所示。数据段代码段31000H存储器AX30000HOP00H10H12H34H指令执行结束后,AX=3412H
参加操作数据的偏移地址(EA)用SI、DI、BX、BP这4个寄存器之一来指定。
即:EA=⑵寄存器间接寻址BXBPSIDI
形成物理地址还需要知道段地址,在不指定段的情况下,有下列规定:若有效地址用SI、DI和BX之一来指定,则其默认的段寄存器为DS;若有效地址用BP来指定,则其默认的段寄存器为SS。寄存器间接寻址方式在汇编格式中表示为:
[SI/DI/BX/BP]例如:假设DS=2000H,SI=1000H,执行指令MOVAL,[SI] 物理地址=DS*10H+SI=2000H*10HH=21000H(21000H)=23所以AL=23执行过程如图所示。⑵寄存器间接寻址
参加操作数据的偏移地址(EA)是由SI、DI、BX、BP
这4个寄存器之一的内容和指令中的8位或16位位移量之和。通常在程序中,8位或16位位移量通常用内存变量来表示。即:EA=+8位或16位偏移量
⑶相对寄存器寻址方式BXBPSIDI相对寄存器寻址方式在汇编格式中表示为:
8位或16位偏移量+[SI/DI/BX/BP]或者[8位或16位偏移量+SI/DI/BX/BP]⑶相对寄存器寻址方式例如:假设DS=2000H,SI=1000H,count=100H执行指令MOVAL,count[SI]物理地址=DS*10H+SI+count=2000H*10HH+100H=21100H(21100H)=5FH所以AL=5FH执行过程如图所示。
参加操作数据的偏移地址(EA)是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容之和。即:EA=+
⑷基址加变址寻址方式
形成物理地址的时候,在不指定段的情况下,规定:如果有效地址中含有BP,则默认的段寄存器为SS;否则,默认的段寄存器为DS。BXBPSIDI基址加变址寻址方式在汇编格式中表示为:
[SI/DI][BX/BP]
⑷基址加变址寻址方式例如:假设SS=3000H,SI=1000H,BP=2000H执行指令MOVAX,[SI][BP]物理地址=SS*10H+SI+BP=3000H*10HHH=33000H(33000H)=50H(33001H)=20H所以AX=2050H执行过程如图所示。AX⑸相对基址加变址寻址方式
参加操作数据的偏移地址(EA)是一个基址寄存器(BX或
BP)、一个变址寄存器(SI或DI)的内容和指令中的8位或16位位移量3项之和。
即:EA=++8位或16位位移量BXBPSIDI相对基址加变址寻址方式在汇编格式中表示为:
8位或16位偏移量+[SI/DI][BX/BP]或者[8位或16位偏移量+SI/DI+BX/BP]⑸相对基址加变址寻址方式例如:假设DS=2000H,MASK=250HSI=1000H,BX=2000H,执行指令MOVBX,MASK[SI][BX]物理地址=DS*10H+SI+BP+MASK=2000H*10HHH+250H=23250H(23250H)=89H(23251H)=53H所以BX=5389H执行过程如图所示。1.指令寻址方式的概念指令寻址方式是指确定下一条要执行指令的地址的方法2.指令寻址方式的类型根据下一条指令的位置,可有四种方式:段内:直接、间接(根据目标地址给出的方式)段间:直接、间接3.2.2程序地址寻址方式3.2.2程序地址寻址方式1.段内直接寻址
这种寻址方式的汇编格式有三种:①指令名SHORT转移目标地址标号②指令名转移目标地址标号③指令名NEARPTR转移目标地址标号指令中直接指明了要转移的目标地址,因此叫直接寻址;又因为这种指令只改变IP寄存器的值而不改变CS寄存器的值,因此又叫段内寻址。汇编这种指令寻址方式时,汇编程序计算转移目标地址标号与本条指令的下一条指令的地址的差值,将其补码称为位移量,写入指令的地址码字段。当执行这种寻址方式的转移指令时,机器取出位移量,与当前(IP)相加,和送入IP寄存器中,CS寄存器内容保持不变,从而实现转移,如图3.12所示:转移目标地址的偏移地址址指令位移量IP寄存器IP寄存器
图3.12段内直接寻址示意图由此可看出,这种寻址方式实现的是相对转移。位移量不同,转移范围不同。当位移量为8位时,只允许转移到与本条指令的下一条指令相距-128~+127范围内的存储单元去。当位移量为16位时,允许转移到当前代码段内任何地方。要注意的是:条件转移指令的位移量只能是8位,而无条件转移的指令可以是8位,也可以是16位。8位叫短跳转,16位叫近跳转。这种寻址方式的汇编格式有以下两种形式:①指令名
FARPTR转移地址标号②指令名段地址:段偏移地址指令中直接指明了要转移的目标地址,此转移地址或用地址标号或用数值地址表示,因此叫直接寻址;又因为这种指令不仅改变IP寄存器的值而且改变CS寄存器的值,因此又叫段间寻址。当执行这种寻址方式的转移指令时,机器取指令操作码之后的第一个字,把它送入IP寄存器中,取操作码之后的第二个字把它送入CS寄存器中,从而实现转移,如图3.13所示。2.段间直接寻址图3.13段间直接寻址示意图
转移目标地址的段地址址
转移目标地址的偏移地址址指令CS寄存器IP寄存器地址段地址2.段间直接寻址这种寻址方式的汇编格式为:①指令名16位寄存器名
指令名WORDPTR存储器寻址方式
转移的目标地址放在寄存器或存储器中,因此叫寄存器间接寻址。这种指令只改变IP寄存器的值而不改变CS寄存器的值,因此又叫段内寻址。当执行这种寻址方式的转移指令时,机器按照指令中规定的寻址方式寻址到一个字,然后把它送入IP寄存器中,CS寄存器的内容不变,从而实现转移。3.段内间接寻址图3.14段内间接寻址示意图3.段内间接寻址
这种寻址方式的汇编格式为:
指令名DWORDPTR存储器寻址方式转移的目标地址放在存储器中。称作间接寻址。这种指令不仅改变IP寄存器的值而且改变CS寄存器的值,因此又叫段间寻址。
当执行这种寻址方式的转移指令时,机器按照指令中规定的寻址方式寻址到存储器中相继的二个字,把第一个字送入IP寄存器中,把第二个字送入CS寄存器,从而实现转移,如图3.15所示。4.段间间接寻址转移目标地址的段地址CS寄存器根据寻址方式计算出20位物理地址指令存储器寻址方式转移目标地址的偏移地址址IP寄存器存储器图3.15段间间接寻址示意图4.段间间接寻址3.38086指令系统Intel8086CPU提供133条基本指令,按功能又可分为以下六类:①数据传送指令②算术运算指令③逻辑运算和移位指令④串操作指令⑤程序控制指令⑥处理器控制指令3.3.1数据传送指令汇编格式功能说明MOVDST,SRC(DST)←(SCR)LEAREG,SRC(REG)←(SCR)的有效地址LDSREG,SRC(REG)←(SCR),(DS)←(SCR+2)LESREG,SRC(REG)←(SCR),(ES)←(SCR+2)LAHF(AH)←(FLAGS)低8位SAHF(FLAGS)低8位←(AH)XCHGDST,SRC(DST)←(SCR)XLAT(AL)←((BX)+(AL))PUSHSRC(SP)←(SP)-2,((SP)+1:(SP))←(SCR)POPDST(DST)←((SP)+1:(SP)),(SP)←(SP)+2PUSHF(SP)←(SP)-2,((SP)+1:(SP))←(FLAGS)POPF(DST)←((SP)+1:(SP)),(SP)←(SP)+2INDST,SRCOUTPORT,SRC8086/8088有四类传送指令,分别是:通用传送指令、累加器专用传送指令、地址传送指令和标志传送指令。
1.通用传送指令操作码MOVPUSHPOPPUSHFPOPFXCHG操作功能通用传送入栈出栈标志压栈标志出栈交换3.3.1数据传送指令
可实现寄存器之间、寄存器和存储器之间传送数据,还可实现将立即数送至寄存器或存储单元的操作。汇编格式:MOV目的操作数,源操作数执行的操作:(目的操作数)←源操作数功能:将源操作数存入目的操作数的寄存器或存储单元中去。
MOV通用传送指令1.通用传送指令⑴立即数传送给通用寄存器或存储器
MOVAL,12HMOVAX,3456HMOVBYTEPTR[BX],34HMOVWORDPTR[BP],2345H⑵通用寄存器之间相互传送
MOVAX,BX ;将BX中的数据传送到AX中。
MOVCL,BH ;将BH中的数据传送到CL中,BH、CL就为8位。1.通用数据传送指令⑶通用寄存器和存储器之间相互传送
MOVAX,[BX] ;将以BX为有效地址的2个连续内存单元中的数据传送到AX中
MOV[SI],DH ;将DH中的数据传送到由SI指定的内存单元中指令中的[BX]、[SI]和[DI]分别表示以BX、SI和DI中的值为有效地址的内存单元。⑷段寄存器与通用寄存器、存储器之间的相互传送
MOVDS,AXMOVES,[SI]MOV[DI],SSMOVBX,ES
虽然MOV指令不能直接实现两个存储单元之间的数据传送,但可以借助CPU内部的寄存器,通过两条指令来完成两个存储单元之间的数据传送。1.通用数据传送指令寄存器
MOVM,Imm;
MOVR,R;
MOVR,M;
MOVR,SegR;
MOVM,SegR;立即数存储单元通用寄存器AX、BX、CX、DXSI、DI、BP、SPCSDS,SS,ES3
MOVR,Imm;
MOVM,R;
MOVSegR,R;(CS除外)MOVSegR,M;(CS除外)
12456789堆栈操作指令
堆栈(Stack)是主存中一个特殊的区域。特点是先进后出FILO(FirstInLastOut)
或后进先出LIFO(LastInFirstOut)
而不是随机存取操作方式。堆栈指针是指示栈顶位置,在8086中栈顶SP指示。如图所示⑴什么是堆栈
向下生长——向低地址方向生长;双字节操作——高对高,低对低;“栈顶总满”——栈顶已经堆有数据。⑵8088/8086的堆栈操作特点⑶堆栈操作指令
堆栈只有两种基本操作:进栈和出栈●进栈PUSH指令汇编格式:PUSH源操作数执行的操作:(SP)←(SP)-2;先修改指针
((SP)+1,(SP))←操作数功能:将16位数据压入堆栈。●出栈POP指令汇编格式:POP目的操作数执行操作:(操作数)←((SP)+1,(SP))(SP)←(SP)+2;后修改指针功能:将堆栈中的16位数据送入R16或SegR或16位存储单元中。说明:①PUSH、POP指令不能使用立即寻址方式,POP指令不能使用CS寄存器。②堆栈中数据的压入弹出必须以字为单位进行,每次PUSH操作栈顶向低地址移动两个字节,而POP操作栈顶向高地址移动两个字节。③这两条堆栈指令不影响标志位。堆栈操作指令
例:现场的保护和恢复pushax ;进入子程序后pushbxpushds...popds ;返回主程序前popbxpopaxPUSHF指令。汇编格式:PUSHF
执行的操作:(SP)←(SP)-2 ((SP)+1,(SP))←PSW
功能:将标志寄存器内容压入堆栈
POPF指令汇编格式:POPF
执行的操作:(PSW)←((SP)+1,(SP))(SP)←(SP)+2
功能:将16位堆栈数据弹出送入标志寄存器中问题:??若想设置TF=1,则该如何设计PUSHF和POPF指令地址传送指令⑴有效地址传送指令有效地址传送指令LEA把源操作数的有效地址(偏移量)送入指定的寄存器中。格式:
LEAREG,SCR其中,目标操作数REG是一个16位的通用寄存器。说明:①REG不能是段寄存器。②这条指令不影响标志位。例如:LEABX,[2345];将2345单元的偏移量送入BX,指令执行后,BX中为2345LEAAX,[BP+SI] ;指令执行后,AX中为BP+SI的值
格式:
LDSREG,SCR;指针送寄存器和DS指令
LESREG,SCR
LDS指令将源操作数SCR指定的4个连续字节,前两字节作为偏移量,传送到REG中;后两字节作为段地址,传送到DS中。LES与LDS相似,但将段地址送到ES中。⑵取地址指针指令例如,
LDSBX,[1230H]
将地址为1230H和1231H的内存单元中的16位数据作为偏移量,送入BX寄存器;将地址为1232H和1233H的内存单元中的16位数据作为段值,送入DS寄存器。说明:①LDS和LES指令中的REG不允许是段寄存器。②LDS和LES指令均指令不影响标志位。⑵取地址指针指令标志寄存器传送指令⑴读取标志指令读取标志指令LAHF被执行时,将标志寄存器FLAGS中的低8位,传送至AH中。图3.18LAHF指令操作格式
标志寄存器传送指令⑵设置标志寄存器指令
设置标志寄存器指令SAHF与LAHF正好相反,把AH传送至标志寄存器FLAGS的低8位。SAHF指令可能会改变SF、ZF、AF、PF和CF标志位,但不影响位于高字节的OF、DF、IF和TF标志。
互换指令XCHG可以实现字互换或字节互换。互换可以在寄存器之间进行,也可以在寄存器和存储单元之间进行。
汇编格式:XCHG目的操作数,源操作数执行的操作:互换源、目的两个操作数的存放位置。说明:①源、目的操作数的寻址方式不允许是立即寻址方式。②两个寻址方式中,必须有一个是寄存器寻址,即两个存储单元之间不能直接互换数据。③所有的段寄存器以及IP寄存器不允许使用本条指令与其他寄存器互换数据。④此指令不影响标志位。XCHG指令例:XCHGBX,[BP+SI]已知:(BX)=1234H,(BP)=0100H,(SI)=0020H,(SS)=1F00H,(1F120H)=0000H,则解:源操作数PA=1F00H×10HHH=1F00H×10HH=1F120H指令执行后:(BX)=0000H,(1F120H)=1234H仅限于I/O端口或存储单元与累加器AL(AX)之间传送数据
IN输入指令汇编格式:INAL,I/O口地址表达式
;8位二进制位表示或 INAX,I/O口地址表达式或INAL,DX
;16位二进制位表示或 INAX,DX
OUT输出指令汇编格式: OUT地址表达式,AL
或 OUT地址表达式,AX
或OUTDX,AL
或 OUTDX,AX2.累加器专用传送指令
汇编格式:XLAT
或
XLAT地址标号执行的操作:(AL)←((BX)+(AL))
注意:
①XLAT指令是将AL的内容替换成存储单元中的一个数,往往用于代码转换②该指令有两种格式,第二种格式中的地址标号是指代码表的表首地址。③(AL)是一个8位无符号数,所以表格中最多只能存放
256个代码。④此指令的执行结果不影响标志位XLAT换码指令2.累加器专用传送指令3.地址传送指令操作码LEALDSLES操作功能取偏址取偏址和数据段值取偏址和附加数据段值汇编格式:LEAR16,M寻址方式执行的操作:(R16)←源操作数的偏移地址例:LEABX,TABLE
TABLE是数据段中定义的地址标号,指令执行前,如果(BX)=0000H,(DS)=2000H,ATABLE=2000:20H,则指令执行后,(BX)=0020HLEA指令3.地址传送指令LDS汇编格式:LDSR16,M寻址方式执行的操作:将寻址到的存储单元的第一个源操作数(字)送R16,第二个源操作数(字)送DS寄存器。LES汇编格式:LESR16,M寻址方式执行的操作:将寻址到的存储单元的第一个源操作数(字)送R16,第二个源操作数(字)送ES寄存器。例:LDSAX,TABLE[SI]假设(20050H)=12345678H,指令执行前,如果(AX)=0000H,(DS)=2000H,ATABLE=2000H:0020H,(SI)=0030H则物理地址=20020H=20050H;指令执行后:
(AX)=5678H,(DS)=1234H3.地址传送指令LAHF汇编格式:LAHF
执行的操作:(AH)←(PSW的低8位)SAHF汇编格式:SAHF执行的操作:(PSW的低8位)←(AH)4.标志传送指令包括:二进制数的运算、十进制数的运算1.加法指令
操作码ADDADCINC操作功能加法带进位加法增量3.3.2算术运算指令ADD加法指令汇编格式:ADD目的操作数,源操作数执行的操作:(目的操作数)←源操作数+目的操作数
ADC带进位加法指令汇编格式:ADC 目的操作数,源操作数执行的操作:(目的操作数)←源操作数+目的操作数+CFINC增量指令
(INC不影响CF)汇编格式:INC 操作数执行的操作:(操作数)←操作数+11.加法指令
2.减法指令操作码SUBSBBDECNEGCMP操作功能减法带借位减法减1求补比较SUB减法指令汇编格式:SUB 目的操作数,源操作数执行的操作:(目的操作数)←目的操作数-源操作数
SBB带借位减法指令汇编格式:SBB 目的操作数,源操作数执行的操作:(目的操作数)←目的操作数-源操作数-CFDEC减量指令汇编格式:DEC 操作数执行的操作:(操作数)←操作数-1NEG求补指令汇编格式:NEG 操作数执行的操作:(操作数)←0-操作数
CMP比较指令汇编格式:CMP目的操作数,源操作数执行的操作:目的操作数-源操作数。2.减法指令
乘法指令可对字节、字进行操作,且可对有符号数整数或无符号数整数进行操作。两个8位数相乘,结果为16位数;两个16位数相乘,结果为32位数。MUL无符号数乘法指令汇编格式:MUL 源操作数
;源操作数必须能指定数据类型执行的操作:若为字节操作(AX)←(AL)×源操作数若为字操作(DX),(AX)←(AX)×源操作数IMUL有符号数乘法指令汇编格式:IMUL 源操作数
;操作和MUL一样3.乘法指令
除法指令也对字节、字数据进行操作。即:字节除法是用16位数除以8位数;字除法是用32位数除以16位数。
DIV无符号数除法指令汇编格式:DIV 源操作数执行的操作:字节:(AL)←((AX)/源操作数)的商
(AH)←((AX)/源操作数)的余数 字:(AX)←((DX、AX)/源操作数)的商
(DX)←((DX、AX)/源操作数)的余数注:商和余数均为无符号数。4.除法指令
IDIV有符号数除法指令汇编格式:IDIV 源操作数执行的操作:与DIV相同,只是操作数是有符号数,商和余数均为有符号数,余数符号同被除数符号。例:
wNum DW 8004H ;(wNum)=8004H MOV AX,5 ;AX5 MUL wNum ;DX0002H,
AX8014H
4.除法指令
原因:乘法指令要求字运算时,被乘数必须为16位;除法指令要求字节运算时,被除数必须为16位,字运算时,被除数必须为32位。无符号数和带符号数的转换是不同的。对无符号数来说,必须进行零扩展,即AH或DX必须清零;对带符号数来说,必须用下面的两条符号扩展指令来扩展。
CBW字节转换为字指令汇编格式:CBW执行的操作:将(AL)的符号扩展到(AH)中去。若(AL)的最高有效位为0,则(AH)=00H;若(AL)的最高有效位为1,则(AH)=0FFH。5.符号扩展指令CWD字转换为双字指令汇编格式:
CWD执行的操作:将(AX)的符号扩展到(DX)中去。若(AX)的最高有效位为0,则(DX)=0000H;若(AX)的最高有效位为1,则(DX)=0FFFFH。例:使N字节存储单元的内容除以N1字节存储单元的内容,将商存于AQ字节单元中,余数存于AR字节单元中。程序段如下:
MOV AL,NCBWIDIV N1MOV AQ,ALMOV AR,AH5.符号扩展指令
进行十进制运算时,首先将十进制数据编码为
BCD码,然后用前面介绍的二进制算术运算指令进行运算,之后再进行十进制调整,即可得正确的十进制结果。注意:使用十进制调整之前,需将十进制数先用ADD或ADC指令相加的和存入AL中,或者用SUB或SBB指令相减的差存入AL中。6.十进制调整指令●DAA:加法的十进制调整指令汇编格式:
DAA执行的操作:调整(AL)中的二进制BCD码的和。调整方法如下:若AF=1或者(AL)的低4位是在AH~FH之间,则(AL)加
06H,且自动置AF=1;若CF=1或者(AL)的高4位是在AH~FH之间,则(AL)加
60H,且自动置CF=1。3.4数据寻址方式及指令⑴压缩的BCD码调整指令●DAS:减法的十进制调整指令汇编格式:DAS执行的操作:调整(AL)中的差。调整方法如下:若AF=1,则(AL)减06H;若CF=1,则(AL)减60H。⑴压缩的BCD码调整指令●AAA:加法的非压缩调整指令汇编格式:AAA执行的操作:调整(AL)中的和调整步骤:
(1)若AF=1或者(AL)的低4位在AH~FH之间,则(AL)+06H,
(AH)←(AH)+1,置AF=1。
(2)清除(AL)的高4位。
(3)CF←AF。●AAS:减法压缩调整指令汇编格式:AAS执行的操作:调整(AL)中的差调整步骤:(1)若AF=1,则(AL)-06H,(AH)←(AH)-1。(2)清除(AL)高4位。(3)CF←AF。⑵非压缩的BCD码调整指令例:有如下语句:
MOVAL,43H;(AL)=43H MOVBL,29H ;(BL)=29H ADDAL,BL ;(AL)=6CH DAA ;(AL)=72H MOVAL,43H ;(AL)=43H MOVBL,29H ;(BL)=29H SUBAL,BL ;(AL)=1AH DAS ;(AL)=14H1.逻辑运算指令逻辑运算是按位操作的。操作码ANDORNOTXORTEST操作功能与或非异或测试NOT逻辑非指令汇编格式:NOT 目的操作数执行的操作:(寻址到的地址)←(操作数)3.3.3逻辑运算和移位指令AND逻辑与指令汇编格式:
AND 目的操作数,源操作数
执行的操作:(寻址到的目的地址)←目的操作数∧源操作数例:AND AL,00001111B;屏蔽(AL)中的高4位。
OR逻辑或指令汇编格式:
OR 目的操作数,源操作数执行的操作:(寻址到的目的地址)←目的操作数∨源操作数
XOR逻辑异或指令汇编格式:XOR 目的操作数,源操作数执行的操作:(寻址到的目的地址)←目的操作数∨源操作数
TEST测试指令汇编格式:
TEST 目的操作数,源操作数执行的操作:目的操作数∧源操作数1.逻辑运算指令
逻辑运算指令对标志位的影响相同,使CF=0,OF=0,
AF位无定义,SF、ZF、PF根据运算结果设置。指令OFCFSFPFZFAFAND=0=00或10或10或1无定义OR=0=00或10或10或1无定义XOR=0=00或10或10或1无定义TEST=0=00或10或10或1无定义NOT不影响不影响不影响不影响不影响不影响1.逻辑运算指令
移位指令可对8位或16位操作数进行操作,按移位方式分为三种:
1)逻辑移位指令
2)算术移位指令
3)循环移位指令格式:
移位方式操作数,移位次数上述类型除立即数及段寄存器之外的2.移位指令(a)逻辑左移指令SHL(b)逻辑右移指令SHR(c)算术左移指令SAL(d)算术右移指令SAR(e)小循环左移指令ROL(f)小循环右移指令ROR(g)大循环左移指令RCL(h)大循环右移指令RCR例将(AX)乘以10,要求用移位指令计算。分析:十进制数10的二进制形式为1010,即权为2和权为8
的位为1,故采用2×(AX)+8×(AX),结果为
10×(AX)。程序段如下:SHL AX,1MOV BX,AXSHL AX,1SHL AX,1ADD AX,BX1.串传送指令
MOVS/LODS/STOS
每条串传送指令都可传送一个字节或一个字。格式:REPMOVS/LODS/STOSREP执行的操作:(1)如(CX)=0,则退出本条指令的执行,否则继续执行(2)。(2)(CX)←(CX)-1。(3)执行REP之后的串传送指令。(4)重复(1)~(3)。3.3.4串操作指令MOVS指令格式1: MOVSB格式2: MOVSW格式3: MOVS 的操作数,源操作数执行的操作:
(1)((ES):(DI))←((DS):(SI))(2)若传送字节是:(SI)←(SI)±1,(DI)←(DI)±1时;若传送字是:(SI)←(SI)±2,(DI)←(DI)±2时;方向标志位DF=0时用“+”,DF=1时用“-”。1.串传送指令指令在操作之前必须做好以下初始化工作:(1)把存放于数据段中的源数据串的首地址(如反向传送则应是末地址)存入(SI)。(2)把将要存放于附加段中的目的数据串的首地址(如反向传送则应是末地址)存入(DI)。(3)把数据串长度存入(CX)。(4)设置方向标志位DF的值(CLD指令使DF=0,STD指令使DF=1)。1.串传送指令
LODS指令格式1:LODSB
格式2:LODSW
格式3:LODS 源操作数M寻址方式执行的操作:
(1)若字节:AL←((DS):(SI))
若字:AX←((DS):(SI))(2)若字节:(SI)←(SI)±1(DF=0用“+”,否则用“-”)
若字:(SI)←(SI)±2(DF=0用“+”,否则用“-”)注:本条指令一般不与REP联用1.串传送指令STOS指令格式1:STOSB格式2:STOSW格式3:STOS目的操作数执行的操作:(1)若字节:((ES):(DI))←AL
若字:((ES):(DI))←AX(2)若字节:(DI)←(DI)±1(DF=0用“+”,否则用“-”)
若字:(DI)←(DI)±2(DF=0用“+”,否则用“-”)说明:本指令可与REP联合使用,用来实现清除内存某一区域。1.串传送指令REPE/REPZ
含义:当相等/为零时重复比较。格式:REPE/REPZCMPS
执行的操作:
(1)当(CX)=0(即数据串比较完成)或ZF=0(即某次比较结果不相等)时退出,否则即(CX)≠0且ZF=1)往下执行(2)。
(2)(CX)←(CX)-1。
(3)执行其后的串比较指令。
(4)执行(1)~(3)。2.串比较指令
REPNE/REPNZ
含义:当不相等/不为零时重复比较。格式:REPNE/REPNZ SCAS
执行的操作:除退出条件为(CX)=0或ZF=1外,其他操作与
REPE/REPZ相同。2.串比较指令CMPS指令格式1:CMPSB
格式2:CMPSW
格式3:CMPS目的操作数,源操作数执行的操作:
(1)((DS):(SI))-((ES):(DI))(2)若字节:(SI)←(SI)±1,(DI)←(DI)±1时;若字:(SI)←(SI)±2,(DI)←(DI)±2时;方向标志位DF=0用“+”,否则用“-”。2.串比较指令
SCAS指令格式1:SCASB格式2:SCASW格式3:SCAS目的操作数执行的操作:
(1)若字节:(AL)-((ES):(DI))
若字:(AX)-((ES):(DI))
(2)若字节:(DI)←(DI)±1(DF=0用“+”,否则用“-”)
若字:(DI)←(DI)±2(DF=0用“+”,否则用“-”)2.串比较指令LEA DI,BLOCKCLDMOV CX,100XOR AL,ALREPNESCASBJZ FOUNDFOUND:……例:假设有一起始地址为BLOCK,长度为100个字节的存储区
功能:?对这一存储区进行测试,看其中是否有内容为00H的存储单元
控制转移指令中包括:无条件转移指令条件转移指令;◆子程序调用和返回指令;◆循环控制指令;◆中断指令及中断返回指令。3.3.5控制转移指令◆转移指令(1)无条件转移指令JMP(jump)
JMPlabel
;程序转向label标号指定的地址功能:执行JMP,将使程序转移到指定的目标地址处,从那里开始执行指令。操作数label是要转移的目标地址目标地址的寻址方式:直接寻址和间接寻址
直接寻址:转移地址直接在指令的机器代码中;间接寻址:转移地址在寄存器或存储单元中,并通过访问寄存器或者来存储单元来获得目标地址。目标地址的分布范围:段内和段间1.转移指令(1)无条件转移指令JMP其中:LAB表示地址标号SA段地址EA偏移地址名称段内段间直接间接直接间接短近汇编格式JMPSHORTLABJMPNEARPTRLABJMP数值偏移地址
JMPR
JMPWORDPTRM寻址
JMPFARPTRLAB
JMP
SA:EAJMPDWORDPTR
M寻址机器格式
EB
2byte
8位位移量
E9
低8位3byte
高8位
FFR/M
EA
偏低8位高8位段低8位高8位操作(IP)+
8位位移量
(IP)(IP)+16位位移量(IP)(R)|(M)(IP)偏址(IP)段址(CS)寻址第1字(IP)寻址第2字
(CS)
汇编语句机器指令偏移地址段地址CS XORBX,BX33DB00001000
JMPSHORTNEXTEB0400021000 ADDAX,BX03C300041000 MOVBX,AX8BD800061000NEXT:MOVAX,1B8000100081000目标地址的偏移地址=当前(IP)+位移量=0004HH=0008H目标地址的段地址=当前(CS)=1000H这样,机器就转移到1000:0008H处,即20位物理地址=10000HH=10008H例1:段内直接短转移汇编语句机器指令偏移地址NEXT:MOVBX,AX8BD80000JMPNEARPTRNEXTE9FBFF0002XORBX,BX33DB0005目标地址的偏移地址=当前(IP)+位移量
=0005H+FFFBH=0000H段地址=当前(CS)=1005H转移1005H:0000H处即10050H(NEXT)处。例2:段内直接近转移
如果LBE是数据段中定义的一地址标号,偏移地址为0010H,(CS)=1000H,(DS)=2000H,(20015H)=12H,(20016H)=34H,有指令
JMPWORDPTRLBE[BX](或JMPLBE[BX])
若(BX)=0005H,则执行后:
(IP)=3412H,即程序转移到本段3412H处。例3:段内间接转移JMP20000H20010HLBE20015H20016H12H34H13412H10000H转移代码段数据段…………
如果T是数据段中定义的一变量,偏移地址为0010H,
(DS)=1000H,(10015H)=12H,(10016H)=34H,
(10017H)=56H,(10018H)=78H,有指令
JMP DWORD PTR T[BX]或 JMPDWORD PTR [T+BX]
若(BX)=0005H,则执行后:
(IP)=3412H,(CS)=7856H,即程序转移到7856H:3412H处。例4:段间间接转移
条件转移指令比较多,总结起来,有如下共同点:格式:指令名 转移地址标号操作:先测试条件,若条件成立,则(IP)←(IP)+8位位移量;若条件不成立,则(IP)保持不变。功能:满足测试条件就转移到当前段的指定地址标号处并往下执行,否则顺序往下执行。转移范围:转移到相距本条指令的下一条指令在
-128~+127个字节的范围之内,即都属于段内直接短转移。所有条件转移指令不影响标志位。转移指令中,大部分指令可以用两种不同的助记符来表示。⑵有条件转移指令①根据S、Z、C、P和O的值来决定是否进行转移的指令汇编语言指令名测试条件操作JZ(或JE)ZF=1结果为零(或相等)则转移JNZ(或JNE)ZF=0结果不为零(或不相等)则转移JSSF=1结果为负则转移JNSSF=0结果为正则转移JOOF=1结果溢出则转移JNOOF=0结果无溢出则转移JP(或JPE)PF=1奇偶位为1则转移JNP(或JPO)PF=0奇偶位为0则转移JC(或JNAE或JB)CF=1有进位则转移JNC(或JAE或JNB)CF=0无进位则转移②比较两个无符号数的大小的转移指令汇编语言指令名测试条件操作JB(或JNAE或JC)CF=1低于,或不高于或等于,或进位位为1则转移JNB(或JAE或JNC)CF=0不低于,或高于或等于,或进位位为0则转移JA(或JNBE)CF∨ZF=0高于,或不低于或等于则转移JNA(或JBE)CF∨ZF=1不高于,或低于或等于则转移③比较两个有符号数的转移指令汇编语言指令名测试条件操作JL(或JNGE)SF∨OF=1小于,或不大于或等于则转移JNL(或JGE)SF∨OF=0不小于,或大于或等于则转移JG(或JNLE)(SF∨OF)∨ZF=0大于,或不小于或等于则转移JNG(或JLE)(SF∨OF)∨ZF=1不大于,或小于或等于则转移④测试CX的值为0,则转移的指令。格式:JCXZ 地址标号功能:若CX寄存器的内容为零则转移到指定地址标号处。测试条件:(CX)=0格式:指令助记符循环入口的地址标号操作:(1)(CX)←(CX)-1。
(2)判断测试条件:若条件成立,则(IP)←(IP)+8位位移量;若条件不成立,则(IP)保持不变。2.循环控制指令指令名测试条件功能LOOP(CX)≠0无条件循环LOOPZ/LOOPE(CX)≠0且ZF=1当为零或相等时循环LOOPNZ/LOOPNE(CX)≠0且ZF=0当不为零或不相等时循环3.子程序调用CALL及返回指令名称段内段间直接间接直接间接汇编格式CALLNEARPTR
子程序名CALL子程序名CALLRCALLWORD
PTRM寻址CALLFARPTR
子程序名CALLDWORDPTR
M寻址机器格式E9
低8位
3byte
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026事业单位工勤技能-江苏-江苏食品检验工五级(初级工)历年参考题库含答案详解3套试卷
- 糖尿病合并脑梗塞护理查房
- 中医药传播的现状与特点
- 2026下半年小学教师资格证考试学科历年例题试卷及解析
- 医院院长年度重点学科群打造与专科竞争力提升工作总结(3篇)
- 安全生产同步管理法讲解
- 高新区消防安全管理-标准模板
- 2026及未来5年中国双轴高速搅拌机数据监测研究报告
- CAD技术就业前景
- 2026事业单位工勤技能-江苏-江苏动物检疫员三级(高级工)历年参考题库含答案详解3套试卷
- 2026营销技巧面试题及答案
- 2026年国防知识竞赛题库及答案(共80题)
- 河南省2026年中考数学试卷(含答案)
- 2026年秋季新学期第一次全体教师大会上校长讲话刷屏了:“教育从来都是一地鸡毛但别忘了当初为什么来!”
- 2026年领导干部网络学法用法法律知识竞赛考试题库及答案
- 2026年广东省中考地理真题及答案解析
- 肿瘤患者的活动与运动指导
- T∕CCEAS008-2026 建设工程造价咨询成果文件质量标准
- 2026年贵州省事业单位联考真题及答案
- 2026年国企风控岗笔试试题及答案
- 洛阳香江万基铝业有限公司马行沟铝土矿矿产资源开采与生态修复方案
评论
0/150
提交评论