微型计算机系统原理及应用 第二章 指令系统_第1页
微型计算机系统原理及应用 第二章 指令系统_第2页
微型计算机系统原理及应用 第二章 指令系统_第3页
微型计算机系统原理及应用 第二章 指令系统_第4页
微型计算机系统原理及应用 第二章 指令系统_第5页
已阅读5页,还剩139页未读 继续免费阅读

下载本文档

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

文档简介

微型计算机系统原理及应用第二章指令系统第2章微型计算机指令系统2.1寻址方式2.28086指令系统2一、概述指令:指令是指示计算机完成特定操作的命令指令系统:指令系统是计算机能够执行全部命令的集合,它取决于计算机的硬件设计。指令系统因机而异,没有通用性。指令中应包含的信息:执行的运算运算结果的去向运算数据的来源3指令格式:操作码[操作数],[操作数]执行何种操作目的操作数源操作数参加操作的数据源操作数:指令加工之前的数据目的操作数:指令加工之后形成的数据4指令中的操作数表征方法:

表征参加操作的数据本身立即数

表征数据存放的地址寄存器存储器5指令中的操作数表征方法:

表征参加操作的数据本身立即数

表征数据存放的地址寄存器存储器61、立即数操作数:表示参加操作的数据本身,可以是8位或16位例:MOVAX,1234H;AX1234HMOVBL,22H注意:1)立即数只能用作源操作数,如

MOVAL,86H∨

MOV86H,AL× 2)立即数必须和其他操作数位数相等

MOVAL,3456H×

MOVAX,34H∨ 3)立即数不能直接送段寄存器72、寄存器操作数:表示参加运算的数存放在指令给出的寄存器中,可以是16位或8位。例:MOVAX,BXMOVDL,CH83、存储器操作数表示当前参加运算的操作数存放在内存数据区中,指令中直接或间接的给出此操作数的地址。操作数的物理地址=段地址+偏移地址=段基址×16+偏移地址段基址一般由数据段寄存器DS的内容来确定;段内偏移地址(有效地址EA)由指令的操作数部分指明。EA是不带符号的16位数,表示操作数所在地址与所在段的首址之间的字节距离。9例:MOVAX,[1200H] MOVAL,[1200H]

MOVAL,[BX]22H11H1200H偏移地址AHAL┇

不允许源操作数和目标操作数同时为存储器操作数注意存储器操作数类型存储单元个数字节字双字1个2个4个102.1寻址方式:寻找指令中操作数所在地址的方法1.立即寻址指令操作数部分直接给出指令的操作数,它与指令操作码相接,顺序存放在代码段中。例1

:MOVAH,36H ;AH立即数36HMOVCX,2A50H ;CX立即数2A50H11注意:(1)立即数寻址方式只能用于源操作数,主要用于给寄存器或存储单元赋值。(2)立即数寻址方式不执行总线周期,执行速度快。2.寄存器寻址方式操作数放在寄存器内,由指令直接给出某个寄存器的名字,以寄存器的内容作为操作数。寄存器可以是16位的AX、BX、CX、DX、SI、DI、SP、BP寄存器,也可以是8位的AH、AL、BH、BL、CH、CL、DH、DL寄存器。12例2:MOV AX,CX DEC AL 注意:

(1)寄存器寻址方式的指令操作在CPU内部执行,不需要执行总线周期,执行速度快。(2)寄存器寻址方式既适用于指令的源操作数,也适用于目的操作数,并且可同时用于源操作数和目的操作数。133.直接寻址方式操作数在存储器中,指令中直接给出操作数所在存储单元的有效地址EA,即段内偏移地址,表示操作数所在存储单元距离段首址的字节数。有效地址是一个无符号的16位二进制数。例3:MOV AH,[2100H];将DS段中2100H单元的内容送给AHMOV AX,[2100H];将DS段中2100H单元的内容送给AL;2101H单元的内容送给AH。MOV[1000H],AH;DS:1000H←(AH)

14DS=3000HMOVAX,[2000H]15注意:(1)直接寻址方式的操作数所在存储单元的段地址一般在数据段寄存器DS中。(2)如果操作数在其他段,则需要在指令中用段超越前缀指出相应的段寄存器名。例4:MOVAH,ES∶[2000H]将附加段寄存器ES的内容乘16,再加上2000H作为操作数所在存储单元的地址,取出该存储单元的内容送到寄存器AH中。164.寄存器间接寻址方式操作数在存储器中,指令中寄存器的内容作为操作数所在存储单元的有效地址EA(偏移地址)。寄存器仅限于BX、BP,SI、DI。当使用BX、SI、DI作为间址寄存器时,操作数所在存储单元的段地址存在数据段寄存器DS中,当使用BP时,操作数所在存储单元的段地址存在堆栈段寄存器SS中。[SI][DI][BX][BP]EA=17MOVBX,[SI]18例5:已知:DS=2100H,DI=2000H指令:MOVAX,[DI]解:物理地址=16×DS+DI=16×2100H+2000H=23000H指令执行结果是将23000H和23001H单元的内容送入寄存器AX中。注意:1.只有SI,DI,BX,BP可作为间址寄存器,如

MOVAX,[CX]╳

2.若操作数所在存储单元不在数据段DS中,需要在指令中用段超越前缀表明其所在段的段名。195.变址寻址方式操作数在存储器内,指令将变址寄存器SI、DI内容与指令指定的位移量之和作为操作数所在存储单元的有效地址EA(偏移地址)。段地址规定为DS的内容。[SI]8位或16位[DI]位移量EA=+例7:DS=3000H,SI=1000H,COUNT=2000H指令:MOVAX,COUNT[SI]

解:物理地址=16×DS+SI+16位偏移量=30000H+1000H+2000H=33000H指令执行结果是将33000H和33001H单元的内容送入寄存器AX中。20MOVAX,2[DI];AX←(DS:(DI)+2)MOVAX,[DI+2];AX←(DS:(DI)+2)MOVBX,COUNT[SI]216.基址寻址方式操作数在存储器内,指令中寄存器(BX或BP)的内容与指令指定的位移量之和作为操作数所在存储单元的有效地址EA(偏移地址)。使用BX时,段地址为DS的内容;使用BP时,段地址为SS的内容。[BX]8位或16位[BP]位移量EA=+22例6:

SS=2000H,BP=1000H,COUNT=2000H(16位偏移量)指令:MOVAX,COUNT[BP]

解:物理地址=16×SS+BP+16位偏移量=20000H+1000H+2000H=23000H指令执行结果是将23000H和23001H单元的内容送入寄存器AX中。MOVBL,2[BX]或MOVBL,[BX+2];(DS:[BX+2])BL237.基址加变址寻址方式操作数在存储器内。指令将基址寄存器BX、BP与变址寄存器SI、DI的内容之和再加上偏移量(8位或16位),得到操作数所在存储单元的有效地址EA。当使用BX时,段寄存器为DS。当使用BP时,段寄存器为SS。[BX][SI]8位或16位[BP][DI]位移量EA=++24例8:已知:DS=2000H,BX=1000H,SI=0500H,MK=1120H指令:MOVAX,[MK+BX+SI]解:物理地址=20000H+1000H+0500H+1120H=22620H指令执行结果是将22620H、22621H单元的内容送入寄存器AX中。25MOVAX,[BX][SI]26例:设BX=0158H,DI=10A5H,位移量=1B57H,DS=2100H,求各寻址方式下,有效地址和物理地址。①MOVAX,[1B57H]直接寻址:②MOVAX,[BX]寄存器间接寻址(寄存器为BX):③MOVAX,[BX+1B57H]基址寻址:

有效地址=1B57H物理地址=21000H+1B57H=22B57H有效地址=0158H物理地址=21000H+0158H=21158H有效地址=0158H+1B57H=1CAFH物理地址=21000H+1CAFH=22CAFH27④MOVAX,[DI]变址寻址(寄存器为DI):

⑤MOVAX,[DI+1B57H]

变址寻址:

⑥MOVAX,[BX+DI+1B57H]基址加变址的寻址(BX为基址寄存器,DI为变址寄存器):

EA=10A5H物理地址=21000H+10A5H=220A5H

EA=10A5H+1B57H=2BFCH物理地址=21000H+2BFCH=23BFCH

EA=0158H+10A5H+1B57H=2D54H物理地址=21000H+2D54H=23D54H28寻址方式举例例:MOVAX,1000H ;AX=1000HMOV DS,AX ;DS=1000H MOV AX,3000H ;AX=3000HMOV SS,AX ;SS=3000HMOV AX,22A0H ;AX=22A0H MOV BX,AX ;BX=22A0HMOV BP,AX ;BP=22A0HMOV SI,AX ;SI=22A0HMOV DI,AX ;DI=22A0HMOV AX,[22A0H] ;AX=2010HMOV AX,SS∶[22A0H];AX=6050H MOV AX,[BX+100H];AX=4030HMOV AX,[BP+100H] ;AX=8070HMOV AX,[DI+100H] ;AX=4030H MOV AX,[BP+DI+100H];AX=90H┇122A0H122A1H┇123A0H123A1H┇322A0H322A1H┇323A0H323A1H┇34640H34641H10H20H┇30H40H┇50H60H┇70H80H┇90H00H292.28086的指令系统指令系统包括九大类、133种基本指令,通过寻址方式的变化与数据形式(字节、字型)的组合,可构成上千条指令。指令系统按功能分为数据传送类、算术运算类、逻辑运算与移位类、串操作类、控制转移类、处理机控制类,本节将分别说明。目标:熟练掌握8086系统常用指令及各类寻址方式读懂简单的程序30数据传送指令数据传送类指令实现CPU内部寄存器之间、CPU与存储器之间、CPU与I/O端口之间的数据传送。1.通用数据传送指令包括MOV、进栈、出栈指令、交换指令和换码指令。(1)一般数据传送指令MOV(8位/16位)格式:MOVOP目,OP源功能:OP源 OP目

要求:OP目可以是寄存器(除CS外)、存储器OP源可以是寄存器、存储器和立即数3132例:MOVAL,BL;BL寄存器的内容送AL MOVSP,2AC0H;立即数2AC0H送SP MOV[DI],AX;AX中的16位数送DI和DI+1单元

MOVSI,ES:[BP] ;附加段中BP所指向的两个单元的内容送SI寄存器

33注意:MOV指令的两个操作数(源、目的)均可采用不同的寻址方式。源操作数和目的操作数的类型必须一致不允许把立即数作目的操作数,也不允许向段寄存器直接送立即数。不允许在段寄存器之间、存储器单元之间直接传送数据。CS、IP寄存器不能用作目的操作数。MOVCS,AX╳

一般传送指令不影响标志位。34例:判断下列指令正确与否:

MOVAL,BLMOVCX,BX

MOVDX,34H

MOVES,AXMOV[SI],CXMOV[DI],[SI]MOV2000H,AXMOVDS,1234HMOVBX,DLMOVCS,BX35(2)堆栈操作指令堆栈:是按“先进后出”原则工作的一段存储器区域。堆栈寄存器SS——段地址堆栈指针SP——始终指向当前栈顶所在的存储单元地址,即最新入栈数据所在的存储单元的地址。压栈操作:PUSHOP功能:把OP字数据压入栈中,结果SP-2SP原则:高字节压在高地址,低字节压在低地址执行过程:SP←SP-1;[SP]←OPHSP←SP-1;[SP]←OPL36例:MOVAX,3456HPUSHAXSP-1SP,压AH(2)SP-1SP,压ALSP

SPSP-1SP

3456SPSP-13456AXAHAL37出栈操作:POPOP

功能:从栈中弹出数据

OP,结果SP+2SP

执行过程:OPL←[SP];SP←SP+1OPH←[SP];SP←SP+1例:POPDX

弹出AL

DL,SP+1SP(2)弹出AH

DH,SP+1SPSP

SPSP+1SPSP+1SP

3456DXDHDL563438例:将CX的内容压入堆栈,然后,弹出栈顶至CX中,已知(SS)=0200H,(SP)=0008H,(CX)=12FAH。3940例:已知:AX=1122H,BX=3344H,SP=1010H执行指令:PUSHAXPUSHBXPOP AX POPBX

执行后AX,BX,SP的结果?解:执行结果为AX=3344HBX=1122HSP=1010H41注意:堆栈操作总是按字(16位)进行的。操作数可以是存储器、寄存器或段寄存器操作数(CS不能用于POP),不能是立即数。PUSHCS√POPCS×PUSH1200H×POP2300H×这两条指令主要用来进行现场保护和恢复,以保证子程序调用或中断程序的正常返回。42(3)数据交换指令(8/16位)格式:XCHGOP1,OP2

功能:实现OP1和OP2内容的相互交换。操作数:通用寄存器或存储器,但不能均为内存单元。注意:段寄存器和IP不能作为交换指令的操作数。例:XCHGAX,BX√XCHGBH,BL√XCHGAX,1122H×XCHGDS,AX×XCHG[SI],BP√XCHG[SI],[DI]×4346(4)换码指令(查表指令、翻译指令)格式:XLAT功能:(BX+AL)

ALEA说明:将BX和AL内容相加作为有效地址EA,在一个表格中找出此单元中的内容

AL中。

BX——表格的首地址

AL——相对于表格首地址的位移量(要转换的代码)

44例:数据段中存放有一张16进制数的ASCII码转换表,设首地址为2000H,查表查出第10个元素’A’的ASCII码(设DS=4000H)。303132...394142...4546...42000H+042000H+10‘0’‘1’‘2’‘9’‘A’‘B’‘E’‘F’可用如下指令实现:MOVBX,2000H;BX←表首地址MOVAL,0AH;AL←序号XLAT;查表转换

执行后得到:AL=41H452.输入输出指令

CPU对外设端口有两种寻址方式,即直接寻址和间接寻址。直接寻址范围为00H—FFH个端口;间接寻址范围为0000H—0FFFFH共64K个端口。间接寻址时,只能用DX作间址寄存器。1.输入指令

格式::IN累加器,端口功能:把一个字节/字由输入端口传送到AL/AX中.例:INAL,21H ;将端口21H的8位数读到AL中

INAX,21H

MOVDX,201H INAL,DX

INAX,DX 462.输出指令格式:OUT 端口,累加器功能:把AX中的16位数或AL中的8位数输出到指定端口。例:OUT22H,AL ;将AL中的数传到22H端口

MOVDX,511H OUTDX,AX

473.目标地址传送指令此类指令的功能是将操作数所在存储器的地址送入目标寄存器。注意:1.OP源必须是存储器操作数,

OP目必须是16位的通用寄存器。2.地址传送指令不影响状态标志位。(1)取有效地址EA指令:

格式:LEAOP目,OP源

功能:将源操作数的有效地址EA送到目的操作数。

例:LEAAX,[5678H];AX←5678H

LEA BX,[BP+SI];BX←BP+SI48┇

DATA112H34H1100H88H77HBX=1100H注意区分下列指令:LEASI,DATA1MOVSI,DATA1MOVSI,OFFSETDATA1

MOVBX,[BX]LEABX,[BX]符号地址49(2)指针送寄存器和DS指令

格式:LDSOP目,OP源功能:把OP源指定的4个字节内容取出,低地址的两字节

OP目,高地址的两字节

DS。例:LDSDI,[2130H];2130H和2131H单元中的内容

DI;2132H和2133H单元中的内容

DS2130H2131H2132H2133HDI=1234HDS=5678H34H12H78H56H50(3)指针送寄存器和ES指令

格式:LES OP目,OP源功能:本指令与LDS指令的操作基本相同,所不同的是将OP源4个字节中高地址的两字节

ES。例:LESDI,[2130H];2130H和2131H单元中的内容

DI;2132H和2133H单元中的内容

ES2130H2131H2132H2133HDI=1234HES=5678H34H12H78H56H514.标志传送指令读取标志指令

格式:LAHF;AH←标志寄存器低8位特点:此指令操作结果不影响标志寄存器。(2)设置标志指令

格式:SAHF;标志寄存器低8位←AH

特点:此指令直接为标志寄存器的低8位赋值。SFPFAFZFCF….AH标志寄存器D15D7D052(3)对标志寄存器的堆栈操作指令

格式:PUSHF;将标志寄存器的值压栈。 POPF;从栈顶弹出一个字送标志寄存器。特点:1.PUSHF不影响标志寄存器,而POPF直接为标志寄存器赋值。2.通常两指令成对出现,用来保护和恢复标志寄存器的内容。

532.2.2算术运算指令8086的算术运算类指令能够对二进制或十进制(BCD码)数进行加、减、乘、除运算,操作数的数据形式可以是8位或16位的无符号数或带符号数。1.加法指令加法指令对操作数的要求与MOV指令相同(1)不带进位的加法指令:格式:ADDOP目,OP源;

功能:OP目←OP源+OP目,根据结果设置标志位例:ADDAL,50H;AL+50H

ALADDDI,SI;DI+SI

DIADDAX,[DI];((DI)+1:(DI))+AX

AXADDAX,DATA[BX]54ADD[BX+DI],AX;(BX+DI)和(BX+DI+1)2个单元的内容+AX,结果放在BX+DI和BX+DI+1所指单元

ADDAX,[BX+2000H];BX+2000H和BX+2001H所指单元内容和AX的内容相加,结果在AX中注意:两操作数的类型相同,类型明确,不能同为存储器55例:判断下列指令正确与否

ADDAL,BX×ADDCL,CH√ADDAX,[BX]√ADD[BX],28×ADD[BX],[SI]×ADD1000H,AX×ADD[SI],BX√ADDDS,BX×56

(2)进位的加法指令:

格式:ADCOP目,OP源;

功能:OP目←OP源+OP目+CF,置标志位CF为前面指令产生的CF说明:主要用于多字节运算,多字节运算时低位字节产生的进位应加到高位。例:ADCAX,SI;AX+SI+CF

AX例:两个双字(32位)相加。123FAB5H+0ABC212AH

MOVDX,0123HMOVAX,0FAB5HADDAX,212AH;先加低字,CF=1AX=1BDFHADCDX,0ABCH;高字带进位加CF=0DX=0BE0H0123FAB5+0ABC212A0BE01BDF57(3)加1指令

格式:INCOP

功能:OP←OP+1说明:常用于修改偏移地址和计数次数。操作数可以是8/16位通用寄存器或存储器,不能为立即数。

例:INC AL

;AL←AL+1

INCBYTEPTR[BX+DI];[BX+DI]←[BX+DI]+1INCWORDPTR[BX+DI]

例:判断对错INCCL√INC[DI]×INCBYTEPTR[DI]√INC2000H×58注意:①INC指令不影响CF位,影响标志位AF、OF、PF、SF和ZF。②操作数视为无符号数。总结:以上三条指令(ADD、ADC、INC)运算结果将影响状态标志位,但INC不影响标志CF。59例:00000001+01111111=10000000以上运算可用两条指令实现:MOV AH,01HADD AH,7FH 二进制数 00000001+) 01111111 10000000 十六进制数 01H +) 7FH 80H视为无符号数 1+)127 128视为带符号数 +1 +)(+127) +128由结果可知:CF=0OF=1ZF=0SF=1AF=1PF=060BCD码:二进制编码的十进制数,又称为二—十进制数。非组合(非压缩)BCD码:用一个字节表示一位十进制数。组合(压缩)BCD码:用一个字节表示二位十进制数。000001010000001101010011例:53

非组合BCD码组合BCD码535361由于BCD码是四位二进制编码,四位二进制数共有16个编码,BCD码只用其中的10个,其余没用的编码1010~1111称为无效码。BCD码运算结果进入或跳过无效码区时,都会出现错误。为了得到正确结果,必须进行调整。例:18+27=4500011000+)0010011100111111---低4位〉9+)00000110---加6调整01000101调整原则:运算结果

9或D3(D7)向高位有进位(借位),进行加6(或减6)调整。62(4)加法的ASCII调整指令(非组合BCD码的加法调整指令)格式:AAA功能:对AL中的由两个非压缩BCD码相加的和进行调整,结果(非压缩BCD码)存于AX中。

调整过程:若AL的低4位大于9或AF=1,则AL←AL+6,AF←1,CF←1,AH←AH+1,AL←AL&0FH(清除AL的高四位);否则清除AL的高4位以及AF和CF标志;63(5)组合BCD码的加法调整指令格式:DAA功能:对AL中的由两个组合BCD码相加的和进行调整,将结果(组合BCD码)存于AL中。调整过程:调整方法与AAA类似,只是此指令要分别考虑AL的高4位和低4位。若AL低4位大于9或AF=1,则AL+6→AL,置AF=1;若AL高4位大于9或CF=1,则AL+60H→AL,置AF=1

注意:AAA,DAA使用时必须紧跟在ADD或ADC之后。642.减法指令(1)不带借位的减法指令格式:SUBOP目,OP源功能:OP目←OP目-OP源,并根据结果设置标志例:

SUBBX,CX;BX-CX

BXSUBAL,[SI+2];AL-(SI+2)单元中的数

AL

SUB[BP+2],CL;将(BP+2)单元中值-CL

BP+2所指的堆栈单元中

SUBAL,20;AL-20

AL65(2)带借位的减法指令格式:SBBOP目,OP源功能:OP目←OP目-OP源-CF,根据结果设置标志说明:主要用于多字节数据相减的运算例:SBBAX,2030H;AX-2030H-CF

AX

SBBWORDPTR[DI+2],1000H;将DI+2和DI+3所指两单元的内容-1000H-CF,结果存在DI+2和DI+3所指的单元66(3)减1指令

格式:DECOP

功能:OP←OP-1;根据结果置标志位,不影响CF。说明:在循环程序中常用来修改循环次数。例:DECAX;AX-1

AX

DECBL;BL-1

BLDECBYTEPTR[DI+2];将DI+2所指单元的内容减1,结果送回此单元67(4)取补指令格式:NEGOP功能:0-OP→OP,将操作数取补后送回源操作数

OP可以是8/16位通用寄存器和存储器操作数,不能为立即数。说明:利用NEG指令可以得到负数的绝对值

例:NEGAL;0-AL

AL

MOVAX,1;AX=0001H

NEGAX;AX=0FFFFH68(5)比较指令:

格式:CMPOP目,OP源

功能:OP目-OP源,不回送结果,只根据结果置标志位。

例:CMP

AX,BX;AX-BX,根据结果置标志位CMPAL,20H;AL-20H,根据结果置标志位说明:本指令主要通过比较(相减)结果置标志位,表示两个操作数的关系,指令执行的结果不影响目标操作数。用途:用于比较两个数的大小,可作为条件转移指令转移的条件69比较有以下几种情况(以CMPA,B示例说明)1.判断两个操作数是否相等:

根据ZF判断2.判断两个操作数的大小,可分两种情况:(1)判断两个无符号操作数的大小:

根据CF判断ZF=1,A=BJZZF=0,A≠BJNZCF=1,A<BJCCF=0,A≥BJNC70(2)判断两个带符号操作数的大小

A.两操作数符号相同根据SF判断

B.两操作数符号不同

根据SF、OF判断

SF=1,A<BJSSF=0,A≥BJNSSF⊕OF=1,A<BSF⊕OF=0,A≥B71P82例2.9在内存数据段从DATA开始的存储单元中分别存放了两个8位无符号数,比较大小,将大数传送到MAX单元。 LEABX,DATA MOVAL,[BX] INCBX CMPAL,[BX] JNCDONE MOVAL,[BX]DONE: MOVMAX,AL72(6)非组合BCD码的减法调整指令

格式:AAS 功能:对AL中由两个非组合BCD码相减的差进行调整,将结果(非组合BCD码)存于AL中。调整过程:调整方法与AAA类似,不同的是当AL的低4位>9或AF=1时,将AL-6→AL,AH-1→AH,并将AF和CF置1,清除AL的高四位。(7)组合BCD码的减法调整指令格式:DAS功能:对AL中由两个组合BCD码相减所得的结果进行调整,并将结果(组合BCD码)存于AL中。调整过程:调整方法与DAA类似,不同的是当AL的低4位>9或者AF=1,则AL-6→AL,并置AF=1;而当AL的高4位大于9或者CF=1时,则AL-60H→AL,并置AF=1。注意:使用AAS、DAS指令必须紧跟在减法指令之后。73[例2.7]计算4609+3875,假设被加数和加数的每一位数都以ASCII码形式存放在内存中,低位在前。另留出4个存储单元,以存放结果。…

30393634STR1被加数…

3738

STR23335加数SUM…

和74[例2.7]计算4609+3875,假设被加数和加数的每一位数都以ASCII码形式存放在内存中,低位在前。另留出4个存储单元,以存放结果。(流程图见P77图2.18) LEA SI,STR1 LEA BX,STR2 LEA DI,SUM MOV CX,4 CLCNEXT:MOV AL,[SI] ADC AL,[BX] AAA MOV [DI],AL

INC SI INC DI INC BX DEC CX JNZ NEXT75[例2.8]内存数据段存放了100个带符号数,首地址为AREA1,要求将各数取绝对值后存入以AREA2为首址的内存区。

LEA SI,AREA1 LEA DI,AREA2 MOV CX,100CHECK:MOVAL,[SI] OR AL,AL JNS NEXT NEGALNEXT:MOV[DI],AL INC SI INC DI DEC CX JNZ CHECK76例2.6:有两个5字节数3B74AC60F8H、20D59E36C1H分别放在自DATA1和DATA2开始的存储区中,低字节在低地址处,编一程序段将两数相加,结果存放于从DATA1开始的单元中。 MOVCX,5 ;循环次数 MOVSI,0 ;偏移值 CLC ;CF=0LPER:MOVAL,DATA2[SI] ADCDATA1[SI],AL INCSI DECCX JNZLPER ….77[例2.8]内存数据段存放了100个带符号数,首地址为AREA1,要求将各数取绝对值后存入以AREA2为首址的内存区。

LEA SI,AREA1 LEA DI,AREA2 MOV CX,100CHECK:MOVAL,[SI] OR AL,AL JNS NEXT NEGALNEXT:MOV[DI],AL INC SI INC DI DEC CX JNZ CHECK复习783.乘法指令

(1)无符号数乘法格式:MULOP

功能:AX←AL×OP8位数乘法

(DX、AX)←AX×OP16位数乘法(2)带符号数乘法格式:IMULOP功能:

操作同上,但是操作数为带符号数注意:MUL和IMUL操作数必须在寄存器或存储单元中79┇

BXXXHAL×XXHAX例:MULBYTEPTR[BX]80运算结果只影响CF、OF,其他的无定义。例:已知AL=0FEH,视为无符号数为254,视为带符号数,数值为-2。BH=0AH,视为无符号数为10,视为带符号数,数值为+10。执行指令MULBH后AX=09ECH,CF=OF=1执行指令IMULBH后AX=FFECH,CF=OF=0MULBL;AL×BL

AX中MULCX;AX×CX

DXAXMULBYTEPTR〔DI〕;AL×(DI)

AXIMULBX;AX和BX中的两个有符号数相乘,结果在DX和AX中81(3)非组合BCD码的乘法调整指令格式:AAM 功能:对AX中的由两个非组合BCD码相乘所得的结果进行调整,并将调整后的结果存于AX中。调整过程:AH←AL/0AH(商),AL←AL%0AH(余数)注意:本指令必须紧跟在MUL指令之后使用。824.除法指令

指令要求被除数是除数的双倍字长,即当除数是8/16位时,要求被除数是16/32位的二进制数。(1)无符号数除法

格式:DIVOP

功能:

(2)带符号数除法格式:IDIVOP功能:操作同DIV,但是操作数为带符号数字节除法:AX/OP

AL=商,AH=余数字除法:(DX、AX)/OP

AX=商,DX=余数

83注意:(1)当除数是字节时,被除数必须放在AX中,当除数是字时,被除数必须放在DX,AX中。(2)商超出规定的范围时,将产生0号中断。(3)IDIV运算结果余数的符号与被除数相同。(4)带符号数除法运算中,当被除数位数不够时,则需将被除数扩展到所需的位数。(8086/8088设有带符号数扩展指令)84例:DIVCL;AX/CL,商

AL,余数

AHDIVWORDPTR[DI];DX和AX中32位数除以DI、DI+1所指的16位数,商

AX,余数

DX

IDIVBX;DX、AX/BX,商

AX,余数

DX

IDIVBYTEPTR〔DI〕;AX中16位数除以DI所指单元中的8位数,商

AL,余数

AH85(3)非组合BCD码的除法调整指令格式:AAD 功能:把AX中的两个非组合BCD码进行调整,然后可按DIV指令实现两个非组合BCD码的除法运算

调整过程:AL←10×AH+AL,AH←0

注意:本指令必须在DIV运算前使用。例:求73/2=?

MOV AX,0703HMOV BL,02HAAD ;(AX)=49H=73DIV BL ;(AL)=24H,(AH)=01HAAM ;(AH)=03H,(AL)=06H865.转换指令(

符号扩展指令)字节扩展指令(8位16位)

格式:CBW功能:将AL中的符号位扩展到AH

规则:若最高位=1,则执行后AH=FFH若最高位=0,则执行后AH=00H字扩展指令(16位32位)格式:CWD;功能:将AX中的符号位扩展到DX,

规则:若最高位=1,则执行后DX=FFFFH

若最高位=0,则执行后DX=0000H这两条指令不影响标志位。87例:分析指令执行后的结果MOVAL,44HCBWMOVAX,0AFDEHCWDMOVAL,86HCBW结果:AX=0044H结果DX=FFFFH,AX=0AFDEH结果:AX=FF86H88例:在内存中,有一个从DATA1开始的存储区。此存储区的前两个字节是一个16位带符号的被除数,第二、三字节是一个16位带符号的除数,其后的四个单元依次存放商和余数。

LEABX,DATA1MOVAX,[BX]CWDIDIVWORDPTR[BX+2]MOV[BX+4],AXMOV[BX+6],DX892.2.3逻辑运算和移位指令1.逻辑运算指令OP源:8/16位通用寄存器、存储器操作数或立即数OP目:通用寄存器和存储器操作数。

除“非”运算外,其余指令都会使OF=CF=0(1)逻辑与运算指令格式:ANDOP目,OP源功能:对两个操作数按位进行与操作,结果回送OP目。说明:该指令常用于保留(或屏蔽)若干位二进制数例:已知AL=’6’,将AL中数的ASCII码转换成非压缩BCD码AND AL,0FH;AL=06H,屏蔽高4位(高位清0),保留低4位;;即对应位为0则清0,对应位为1则不变

90例:把AL中的小写字母转换成大写字母

AND AL,11011111B例:判断AL中字符是否为’y’,不区分大小写。 AND AL,11011111B CMP AL,’Y’ JZ YES91(2)

测试指令

格式:TESTOP目,OP源功能:将OP目与OP源进行与运算,不回送结果,只根据结果置标志位。说明:主要用来检测目的操作数的某些位是1或0,根据测试结果,决定转向例:测试AX中的D15位是1还是0TESTAX,8000H;若D15为1,ZF=0,否则ZF=1例如,’与’的结果最高位是1还是0,结果是否为全0,结果中1的个数是奇数还是偶数等,分别由SF、ZF、PF标志位体现。92(3)逻辑或运算指令

格式:OROP目,OP源功能:对两个操作数进行或运算,结果回送到OP目。说明:可用于组合某个字,或将某位置1。例:MOVAX,8888H;ORAX,00FFH;AX=88FFH,将AX的低8位置1,其他位不变。例:将AL中的非组合BCD码转换成ASCⅡ码。

ORAL,30H93(4)逻辑异或运算指令格式:XOROP目,OP源功能:对两个操作数进行异或运算,结果回送到OP目。说明:用于对某个二进制数按位取反或对某寄存器清0。例:XORAL,0FFH;AL数据按位求反 例:MOVAX,3333H

XORAX,00FFH;结果:AX=33CCH,AH数据保持不变,对AL数据求反。即对应0不变,对应1求反。例:寄存器清0(有4条指令可达到AX清0目的):

XORAL,AL ;AL清0MOVAX,0SUBAX,AXANDAX,094(5)

逻辑非运算指令

格式:NOTOP功能:对操作数逐位取反后回送到原处。例:MOVAX,1NOTAX;AX=0FFFEH注意:(1)该指令只是执行求反操作,而不是求反码指令,对符号位也求反。(2)不影响标志位。总结:(1)ANDORXORTEST均影响标志,CF=0,OF=0,而PF,SF,ZF由结果而定,AF无意义。此类指令可用来清CF,常用于拆字,拼字。(2)NOT不影响标志。95例:读取端口地址为PORT的外设输入的数据,若输入的数据的第1,2,5位中的任一位不等于零,则转移到NEXT。 INAL,PORT TESTAL,00100110B JNZNEXT ….NEXT:…962.移位指令移位操作非循环移位循环移位逻辑移位算术移位不带进位位的移位带进位位的移位规定:移动一位时由指令中的计数值直接给出;移动两位及以上,则移位次数由CL指定,即必须将移位位数N事先装入CL中。

97将操作数的内容左移,每移一次,最低位补0,最高位→CF。将操作数的内容右移,每移一次,最高位补0,最低位→CF。将操作数的内容右移,每移一次,最高位不变,最低位→CF。2.移位指令算术左移与逻辑左移相同,可用于无符号数乘2操作;逻辑右移可用于无符号数除2操作;算术右移可以用于有符号数除2操作。98算术逻辑移位指令是双操作数指令,操作数可以是除立即数之外的任何寻址方式;当计数值大于1时,必须使用CL作计数器。例:MOVBX,FFFCHSARBX,1结果:BX=FFFEH,BX由-4变为-2。例:MOVBL,0CH;BL=12SHLBL,1;BL=2499例:对AX中无符号数进行乘10运算(设无溢出,乘10后仍为一个字)分析:AX*10=AX*(23+2)=AX*2+AX*23程序:MOVBX,AXSALBX,1;原数*2

BXMOVCL,3SALAX,CL;原数*23

AXADDAX,BX;原数*10

AX100

3.循环移位指令前面指令产生的CF移至最低位前面指令产生的CF移至最高位101

循环移位之后,操作数中原来各数位的信息不会丢失,而只是移到了操作数中的其他位或进位标志CF上,必要时还可以恢复。利用循环移位指令可以对寄存器或存储器中的任一位进行位测试。例如要求测试AL寄存器中第5位是1还是0。

MOV CL,3 ROL AL,CL JNC ZERO1022.2.4串操作指令串操作指令实现对内存中地址连续的字节串或字串进行操作,在每次操作后,能自动修改地址,为下一次操作做好准备。串操作分为基本串操作指令和重复前缀指令。基本串操作指令每执行一次只能处理一个数据,与重复前缀指令结合可以处理一串数据。103串操作有如下共同点:(1)源串一般存放在数据段(DS,允许段超越),偏移地址由SI指定,目标串在附加段(ES,不允许段超越),偏移地址由DI指定。(2)每执行一次串操作后自动修改指针SI、DI。若方向标志DF=0,则每次操作后SI和DI自动加1(或加2);若DF=1,则每次操作后SI和DI自动减1(或减2)修改。(3)串长(字或字节个数)存放在CX中。注意:在执行指令前必须DS、ES、SI、DI、DF、CX置好需要的值,它们是串操作指令的隐含操作数。源串段地址→DS,目的串段地址→ES建立方向标志(CLD使DF=0,STD使DF=1)源串首地址或末地址→SI目的串首地址或末地址→DI串长度→CX1041.字符串串操作指令(1)字符串传送指令格式:MOVS功能:把位于数据段由SI指定的内存单元的字节/字数据传送到附加段由DI指定的内存单元,指令不影响状态标志位。过程:MOVSB((ES):(DI))←((DS):(SI)),

SI←SI±1,DI←DI±1

MOVSW((ES):(DI)+1)←((DS):(SI)+1),

((ES):(DI))←((DS):(SI)),

SI←SI±2,DI←DI±2必须说明操作数的类型,确定是字节/字传送。说明:串传送指令常与无条件重复前缀REP连用操作重复次数由CX决定,每传送完一个元素使CX减1。该指令重复执行,直至CX=0为止。105例:将数据段中首地址为BUFFER1的200个字节的数据传送到附加段首地址为BUFFER2开始的存储区中。1)

用一般传送指令实现

LEA SI,BUFFER1;源串首地址送SI LEA DI,BUFFER2;目的串首地址送DI MOV CX,200 ;串长送CXPL1:MOV AL,[SI] ;按SI所指地址取一字节

MOV [DI],AL ;按DI所指地址存一字节

INC SI ;源区地址加1 INC DI ;目的区地址加1 DEC CX ;计数器减1 JNZ PL1 ;未传送完则继续

…1062)用串传送指令实现

LEA SI,BUFFER1 ;源串首地址送SI LEA DI,BUFFER2 ;目的串首地址送DI MOV CX,200 ;串长送CX CLD ;清方向标志位,使正向传送

PL1:MOVSB ;串传送一字节,[SI]→[DI],SI、DI加1 DEC CX ;计数器减1 JNZ PL1 ;未传送完则继续

…3)用重复传送指令

LEA SI,BUFFER1 ;源串首地址送SI LEA DI,BUFFER2 ;目的串首地址送DI MOV CX,200 ;串长送CX CLD ;清方向标志位,使正向传送

REP MOVSB;每传送完一个元素使CX减1,;若CX≠0,则重复字节传送,;直到CX=0,跳出循环107(2)字符串比较指令

格式:CMPS功能:把位于数据段由SI指定的字节/字数据与附加段由DI指定的字节/字数据进行比较,结果不保存,但影响状态标志位,并由DF状态决定SI、DI的修改方向。过程:CMPSB((DS):(SI))-((ES):(DI)),SI←SI±1,DI←DI±1CMPSW((DS):(SI)+1)-((ES):(DI)+1),((DS):(SI))-((ES):(DI)),SI←SI±2,DI←DI±2说明:串比较指令常与条件重复前缀连用,指令的执行不改变操作数,仅影响标志位。108条件重复前缀①重复前缀REPE/REPZ重复条件:比较结果相等(ZF=1)且串未结束(CX≠0),则继续比较。结束条件:两串比较完(CX=0)或比较的元素不相等(ZF=0)比较结果:若两串相等,则ZF=1,否则ZF=0作用:判断两串是否完全相同②重复前缀REPNE/REPNZ重复条件:比较结果不相等(ZF=0)且串未结束(CX≠0)继续比较。结束条件:两串比较完(CX=0)或比较的元素相等(ZF=1)。比较结果:若两串完全不相等则ZF=0,否则ZF=1。作用:判断两串是否完全不相同109例2.14:比较串长为20的两个字节串,找出其中第一个不相等字符的地址存放在SI,DI;若两串完全相同,则给SI,DI赋0。MOVSI,0FFSETSTRING1LEADI,STRING2 CLD

MOVCX,20 REPECMPSB JZALLMATCH DECSI DECDI JMPDONE ALLMATCH:MOVSI,0 MOVDI,0 DONE:HLT 110(3)字符串搜索指令格式:SCAS功能:把AL/AX中的内容与附加段由DI指定的一个字节/字数据进行比较,结果不保存,但影响状态标志位,并由DF状态决定DI的修改方向。

过程:SCASB字节——AL-[DI],DI←DI±1SCASW字——AX-[DI],DI←DI±2111[例2.15]在首地址为STRING的包含100个字符的字符串中寻找第一个回车符CR,找到后将其地址保留在(ES:DI)中,并在屏幕上显示字符’Y’。如果字符串中没有回车符,则在屏幕上显示字符’N’。

LEA DI,STRING MOV AL,0DH MOV CX,100 CLD REPNESCASB JZ MATCH MOV DL,’N’ JMP DSPYMATCH:DECDI MOV DL,’Y’DSPY:MOV AH,02H INT 21H …112(4)取字符串指令格式:LODSB——(AL)←((DS):(SI)),SI←SI±1LODSW——(AX)←((DS):(SI)),SI←SI±2功能:把位于数据段由SI指定内存单元的内容取到AL或AX中,并修改SI的内容,指向下一字节/字单元。

(5)存字符串指令格式:STOSB——((ES):(DI))←(AL),DI←DI±1STOSW——((ES):(DI))←(AX),DI←DI±2功能:把寄存器AL或AX中的内容存到附加段由DI指定的内存单元,并修改DI的内容,指向下一字节/字的存放单元。113[例2.18]一个数据块由大写或小写的英文字母、数字和各种其他符号组成,其结束符是回车符CR,数据块的首地址为BLOCK1。要求将数据块传送到以BLOCK2为首址的内存区,并将其中的所有英文小写字母转换成相应的大写字母,其余不变。 LEA SI,BLOCK1 LEA DI,BLOCK2 CLDNEXT:LODSB CMP AL,0DH JZ DONE CMP AL,’a’ JC OK CMP AL,’z’ JNC OK SUB AL,20HOK: STOSB JMP NEXTDONE:…114注意:重复前缀指令不能单独使用,其后必须紧跟基本串操作指令,控制基本串操作指令重复执行。其执行过程相当于一个循环程序的运行。在每次重复之后,地址指针SI和DI都被修改,但指令指针IP仍保持指向带有前缀的串操作指令的地址。重复执行次数由数据串长度决定,数据串长度应预置在寄存器CX中。执行重复前缀指令不影响标志位。115例:将20个0AAAAH送入3000H开始的地址单元。程序段如下: CLDLEA DI,[3000H] MOV CX,14H MOV AX,0AAAAH REP STOSW116无条件转移指令无条件转移到目标地址,执行新的指令有条件转移指令在具备一定条件的情况下转移到目标地址1.转移指令通过修改指令的偏移地址(IP)或段地址(CS)及偏移地址(IP)实现程序的转移。2.2.5控制转移指令117①段内转移指令段内直接短转移JMPSHORTOPIP←IP+8位偏移量段内直接近转移JMPNEARPTROP

温馨提示

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

评论

0/150

提交评论