




已阅读5页,还剩118页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章8086的寻址方式和指令系统,第一节8086的寻址方式,第二节8086指令系统概述,第三节8086指令系统,汇编语言指令格式,操作码目标操作数,源操作数双操作数指令:ADDBX,1234单操作数指令:INCAX无操作数指令:NOP,第一节8086的寻址方式,寻址方式是指指令采取何种方式获取所需的操作数。寻址方式的多少是恒量指令系统灵活与否的重要标志。,在这种寻址方式中,操作数作为指令的一部分直接跟在操作码的后面,操作数与操作码一起放在代码段中。这种寻址方式叫立即数寻址。,例:MOVAX,1234H(机器码:B83412H)这条指令的功能是:把立即数1234H送入AX中。,一立即数寻址,操作数就在CPU的内部寄存器中,操作数所在的寄存器名在指令中给出。这种寻址方式称寄存器寻址方式。,二寄存器寻址,例:MOVDS,AX,对16位操作数,寄存器可以为:AX、BX,CX,DX,SI,DI,SP,BP。对于8位操作数,寄存器可以为:AH,AL、BH,BL,CH,CL,DH,DL。采用寄存器寻址方式的指令在执行时,操作就在CPU内部进行,不需要使用总线周期,执行速度快。它是执行速度最快的一类寻址方式。,使用直接寻址方式时,数据位于内存中,存放数据的存储单元的有效地址(偏移量)由指令直接指出,直接寻址是对存储器进行访问时可采用的最简单的方式。,例:若DS=3000HMOVAX,2010H,三直接寻址,物理地址=DS162010H=3000H162010H=32010H指令功能是将32010H和32011H两单元的内容送到AX中。要注意的是采用直接寻址方式时,如果指令前面没有用前缀指明操作数在哪一段,则默认段寄存器是数据段寄存器DS。也可以通过前缀改变段寄存器。MOVAX,ES:2010H,采用寄存器间接寻址方式时,操作数位于内存中,存放数据的存储单元的有效地址由寄存器指出,这些寄存器可以为BX、BP、SI和DI之一或它们的特定组合。根据上述四个寄存器的不同组合方式,寄存器间接寻址又可以分为四种不同形式。使用BP间接寻址时,默认的段寄存器是SS,其它情况下默认使用DS提供段地址。,四寄存器间接寻址,采用BX、BP间接寻址称为基址寻址采用SI、DI间接寻址称为变址寻址由于上述4个寄存器寻址时所黙认的段寄存器不同,这样又可以分两种情况:,1基址寻址和变址寻址,以SI、DI、BX进行间接寻址,默认使用DS提供段地址。此时数据段寄存器DS内容加上SI、DI、BX中的16位偏移量,获得操作数的地址。,例:MOVAX,SI若DS=3000HSI=1000H,也可以通过前缀改变段寄存器。,寄存器BP间接寻址,默认的段寄存器为SS。此时堆栈段寄存器SS内容加上BP中的16位段内偏移地址,即得操作数的地址。,例:MOVAX,BP若SS=3000HBP=2000H,物理地址=SS16BP=30000H2000H=32000H指令功能是将32000H和32001H两单元的内容送到AX中。,在这种寻址方式中,操作数存放在内存中。操作数的地址是由段寄存器内容16加上SI、DI、BX、BP之一的内容,再加上由指令所指出的8位或16位的位移量而得到的。,例:MOVAX,SI+300H或MOVAX,300HSI,物理地址=DS16SIDISP=30000H1000H0300H=31300H指令功能是将31300H和31301H两单元的内容送到AX中。,2相对的基址寻址和变址寻址(寄存器相对寻址),在8086中,通常把BX和BP作为基址寄存器,而把SI、DI作为变址寄存器。将这两种寄存器联合起来进行的寻址就称为基址加变址寻址。这时,操作数的地址是段寄存器内容16加上基址寄存器内容(BX或BP内容),再加上变址寄存器内容(SI或DI内容)而得到的。在BP参与寻址时,默认使用堆栈段寄存器SS,否则默认使用数据段寄存器DS。,3基址加变址寻址,例:MOVAX,BX+SI或MOVAX,BXSI,物理地址=DS16SIBX=30000H1000H3000H=34000H指令功能是将34000H和34001H两单元的内容送到AX中。,例:MOVAX,BP+SI物理地址=SS16BPSI=30000H3000H1000H=34000H指令功能是将34000H和34001H两单元的内容送到AX中。,这种寻址实际上是基址加变址寻址的扩充。即操作数的地址是由基址加变址方式得到的地址再加上由指令指明的8位或16位的位移量而得到的。在BP参与寻址时,默认使用堆栈段寄存器SS,否则默认使用数据段寄存器DS。,4相对的基址加变址寻址,例:MOVAX,BX+SI+300H或MOVAX,300HBXSI物理地址=DS16SIBXDISP=30000H1000H3000H0300H=34300H指令功能是将34300H和34301H两单元的内容送到AX中。,五寻址方式总结,第二节8086指令系统概述,一机器指令格式8086的指令为1-6字节,包括操作码域和操作数域。1操作码域指令的第一或前两字节为操作码域,表示指令的操作码和寻址方式。,操作码域之后部分为操作数域。一般包括以下形式。2字节有效地址(偏移量)1或2字节位移量1或2字节立即数1或2字节位移量后跟1或2字节立即数2字节偏移量和2字节段地址,2操作数域,指令执行时间取决于CPU的时钟周期的长短和执行指令所需的时钟周期数。指令执行时间一般由以下三部分组成:指令基本执行时间计算有效地址的时间存取操作数访问内存的时间由于8086内部总线接口部件和执行部件是并行工作的,在计算指令执行时间时假定指令已经预取到指令队列中,没有考虑取指令时间。如果没能及时预取指令,指令执行时间需适当延长。,二指令执行时间,例:8086CPU时钟为5MHz,计算各种ADD指令的执行时间。设时钟周期为0.2s寄存器寻址ADDAX,BX基本执行时间:3个时钟执行时间:3*0.2s=0.6s基址变址寻址(结果在寄存器中)ADDAX,BP+SI基本执行时间:9个时钟计算有效地址时间:8个时钟访问内存1次操作数在偶地址:4个时钟操作数在奇地址:4+4个时钟源操作数在偶地址执行时间:(9+8+4)*0.2s=4.2s源操作数在奇地址执行时间:(9+8+4+4)*0.2s=5s,基址变址寻址(结果在内存中)ADDBP+SI,AX基本执行时间:16个时钟计算有效地址时间:8个时钟访问内存2次目标操作数在偶地址:4+4个时钟目标操作数在奇地址:8+8个时钟目标操作数在偶地址执行时间:(16+8+8)*0.2s=6.4s目标操作数在奇地址执行时间:(16+8+16)*0.2s=8s,8086的指令系统包含133条指令,这些指令大致可分为6种类型:数据传送指令逻辑运算和移位指令算术运算指令串操作指令控制转移指令,第三节8086指令系统,8086有4类传送指令,实现CPU的内部寄存器之间、CPU和存储器之间、CPU和I/O端口之间的数据传送。1通用传送指令通用传送指令中包括:最基本的传送指令MOV交换指令XCHG堆栈指令PUSH和POP,一数据传送指令,指令格式:MOVOPRDl,OPRD2执行功能:该指令可把源操作数复制到目标操作数中。OPRD1:可以是累加器、寄存器和存贮器。OPRD2:可以是累加器、寄存器、存贮器以及立即数,(1)最基本的传送指令,例:MOVAL,BLMOVES,DXMOVAX,BXMOVDI,CXMOVCX,1000HMOVBL,40MOVDX,5060HMOVWORDPTRSI,6070MOVBYTEPTRBX,55H,注意:可以传送8位或16位操作数。不能在两个存贮器单元之间进行数据直接传送。MOVAL,1000HMOV2000H,ALCS和IP不能作为目标操作数。BP参与寻址默认使用段寄存器SS,否则默认使用DS。不能将立即数直接传送到段寄存器。MOVDS,5000HMOVAX,5000HMOVDS,AX,在执行给SS赋值的指令时,在本条指令和下一条指令执行期间自动禁止外部中断。MOVAX,5000HMOVSS,AXMOVSP,1000H所有通用传送指令不影响标志。,数据传送方向示意图,指令格式:XCHGOPRDl,OPRD2执行功能:交换指令把一个字节或一个字的源操作数与目的操作数相交换。,XCHGAL,CL;累加器低8位和通用寄存器CL之间交换XCHGAX,DI;累加器AX和通用寄存器DI之间交换XCHGAX,2530;累加器AX和内存2530单元的字型数交换XCHGBX,SI;通用寄存器BX和存储器SI和SI+1两个单元交换,(2)交换指令,注意:目标操作数和源操作数不能均为内存单元。段寄存器和IP不能用于交换指令。不影响标志。,堆栈是一个后进先出的线性表。压入堆栈指令:PUSHOPRDSP-2OPRDSP弹出堆栈指令:POPOPRDSPOPRDSP+28086的堆栈向地址减小的方向生长。,(3)堆栈操作指令,例:MOVAX,1234HMOVDX,5678HMOVSP,2000HPUSHAXPUSHDXPOPDXPOPAX,注意:8086的堆栈操作是按字进行的。PUSHALPUSHAXCS内容可以入栈但不能弹出数据到CS。堆栈内容按照后进先出的顺序传送,保护和恢复寄存器内容需按相反顺序进行。PUSHAXPUSHBXPUSHCXPOPCXPOPBXPOPAX,例:交换AX,BX的内容,PUSHAXPUSHBXPOPAXPOPBX,8086有3条地址传送指令。(1)取有效地址指令LEA指令格式:LEAOPRDl,OPRD2执行功能:该指令把源操作数OPRD2(地址偏移量)传送至目的操作数OPRDl中。源操作数必须是一个内存单元地址,目标操作数必须是一个16位的通用寄存器。这条指令通常用于使一个寄存器作为地址指针。LEAAX,2728相当于MOVAX,2728LEABX,BP+SI,2地址传送指令,(2)LDS指令该指令完成一个地址指针的传送。地址指针包括段地址和地址偏移量。指令执行时,将段地址送入DS,地址偏移量送入一个16位的指针寄存器或变址寄存器。例:LDSSI,BX是把存放于内存数据段中BX所指的32位地址指针的段地址送入DS,偏移地址送入SI。(3)LES指令这条指令除将地址指针的段地址送入ES外,其他操作与LDS的类似。例:LESDI,BX+50是把存放于内存数据段中以BX+50的结果为有效地址的一个32位地址指针的段地址送入ES,偏移地址送入DI。,8086有3条标志传送指令。(1)读取标志指令LAHF执行功能:将标志寄存器的低八位送入AH。(2)设置标志指令SAHF执行功能:将AH送入标志寄存器的低八位。,标志传送指令,(3)标志寄存器入出栈指令PUSHFPOPF例:读取标志内容到AXPUSHFPOPAX将AX内容复制到标志寄存器PUSHAXPOPF,8086有类累加器专用传送指令。(1)输入输出指令CPU使用AL对位端口进行输入输出操作,通过AX对16位端口进行输入输出操作。直接输入输出指令指令格式:IN累加器,端口号OUT端口号,累加器端口号范围:0255(0FFH)例:INAL,50HINAX,80HOUT60H,AX,4累加器专用传送指令,间接输入输出指令端口号由DX提供(范围0FFFF)INAL,DXOUTDX,ALINAX,DXOUTDX,AX输入输出指令不影响标志。,可以将累加器中的值转换为内存表中的一个值,常用于数码转换。BX+ALAL例:MOVBX,1000HMOVAL,5XLAT程序执行后AL=55H注意:默认使用DS提供段地址。不影响标志。,(2)换码指令XLAT,1逻辑运算指令8086逻辑运算指令包括AND(与)、OR(或)、NOT(非)、XOR(异或)和TEST(测试)指令。(1)双操作数指令AND,OR,XORANDAL,0FHAL=1001110100001101ANDDX,BX+SIORAL,0FHAL=1001110110011111ORAX,20F0HXORAL,0FHAL=1001110110010010XORAX,AXAX=0,二逻辑运算和移位指令,标志影响:影响CF,OF,PF,SF,ZF。(CF,OF清)AF不确定。,(2)TEST(测试)指令TEST指令与AND指令执行同样的操作,但TEST指令不将结果回送到目标操作数,只是通过运算影响标志。TESTAX,8000H如果AX最高位为0,则ZF=1,否则ZF=0。TESTAL,81H如果AL最高位和最低位均为0,则ZF=1,否则ZF=0。TEST指令可用于测试目标操作数的某几位是否全为。,(3)NOT逻辑求反指令该指令对目标操作数按位取反。对标志位不产生影响。例:NOTALNOTWORDPTR1000H,总结:AND指令常用于将目标操作数的指定位清。OR指令常用于将目标操作数的指定位置。XOR指令常用于将目标操作数的指定位取反。TEST指令常用于测试目标操作数的某几位是否全为。,()非循环移位指令SALSHL算术左移和逻辑左移指令指令格式:SAL/SHLOPRD,CL/1指令功能:这两条指令的操作结果是完全一样的,将目的操作数OPRD中的二进制数向左移动1位或CL寄存器中指定的位数。左移一位时,操作数的最高位移出送到CF中,同时最低位送0。目的操作数可以是8位,也可以16位。目的操作数OPRD:可以是累加器、寄存器、也可是存储器。,2移位指令,SHLAX,1SALWORDPTRBX+SI+100,CL利用左移1位操作可实现操作数乘2的运算。例:SHLAL,1AL*2MOVCL,4SHLAL,CLAL*16,SAR算术右移指令指令格式:SAROPRD,CL/1指令功能:将目的操作数OPRD中的二进制数向右移动1位或CL寄存器中指定的位数。该指令每执行一次移位操作,就使操作数右移一位,但符号位保持不变,而最低位移至标志位CF,目的操作数可以是8位,也可以16位。,例:MOVAH,5AHSARAH,1指令执行完后,(AH)=2DH,CF=0算术右移指令可实现对带符号数的除操作。,SHR逻辑右移指令指令格式:SHROPRD,CL/1指令功能:将目的操作数OPRD中的二进制数向右移动1位或CL寄存器中指定的位数。该指令每执行一次移位操作,就使操作数右移一位,左面的最高位将补0,最低位移至标志位CF中。目的操作数可以是8位,也可以16位。,例:MOVBL,4EHSHRBL,1指令执行后,(BL)=27H,CF=0逻辑右移指令可实现对无符号数的除操作。非循环移位指令对标志的影响:影响CFOFPFSFZFAF不确定,()循环移位指令ROL不带进位的循环左移指令指令格式:ROLOPRD,CL/1指令功能:将目的操作数OPRD中的二进制数向左移动1位或CL寄存器中指定的位数。左移一位时,操作数的最高位移出送到CF中,同时送至最低位。目的操作数可以是8位,也可以16位。,例:MOVAL,5BHROLAL,1指令执行完后,(AL)=B6H,CF=0,ROR不带进位的循环右移指令指令格式:ROROPRD,CL/1指令功能:将目的操作数OPRD中的二进制数向右移动1位或CL寄存器中指定的位数。右移一位时,操作数的最低位移出送到CF中,同时送至最高位。目的操作数可以是8位,也可以16位。,例:MOVAL,6BHROLAL,1指令执行完后,(AL)=B5H,CF=1,RCL带进位的循环左移指令指令格式:RCLOPRD,CL/1指令功能:将目的操作数OPRD中的二进制数向左移动1位或CL寄存器中指定的位数。左移一位时,操作数的最高位移出送到CF中,而原来的CF位送至最低位。目的操作数可以是8位,也可以16位。,例:MOVAL,4CHRCLAL,1若CF=0,指令执行后,(AL)=98H,CF=0,RCR带进位的循环右移指令指令格式:RCROPRD,CL/1指令功能:将目的操作数OPRD中的二进制数向右移动1位或CL寄存器中指定的位数。右移一位时,操作数的最低位移出送到CF中,而原来的CF位送至最高位。,例:MOVAL,5CHRCRAL,1若CF=1,指令执行完后,(AL)=AEH,CF=0循环移位指令对标志的影响:影响CFOF,8086可提供加、减、乘、除4种基本算术运算的操作指令。这些指令可实现字节或字的运算,可以用于符号数和无符号数的运算。,加、减运算的源操作数和目的操作数的关系,三算术运算指令,(1)不带进位的加法指令指令格式:ADDOPRDl,OPRD2指令功能:OPRDlOPRDl+OPRD2ADD指令两个操作数相加,结果送至目的操作数。源操作数可以是累加器、通用寄存器、存贮器和立即数。目标操作数可以是累加器、通用寄存器或存贮器。,1加法指令,例:ADDAL,30ADDAX,1000HADDAX,SIADDAL,BXADDDX,BX+SI+100ADDBYTEPTRSI,100ADDSI+1000H,AX注意:两个存储单元不能直接相加,段寄存器也不能参加运算。在使用时还要注意两个操作数类型一致。这些指令执行时,对所有状态标志位都会产生影响。,(2)带进位的加法指令指令格式:ADCOPRD1,OPRD2指令功能:OPRD1OPRD1+OPRD2+CY这条指令与ADD指令基本相同,只是在对两个操作数进行相加运算时还应加上进位位的当前值,然后再将结果送至目的操作数。,该指令对标志位的影响与ADD指令对标志位的影响相同。,MOVSI,2000HMOVDI,3000HMOVAX,SIADDAX,DIMOVSI,AXMOVAX,SI+2ADCAX,DI+2MOVSI+2,AX,例:现有两个4字节无符号数,分别存放在内存2000H和3000H起始的单元,低字节在前,高字节在后。计算两者的和,要求结果存放在2000H起始的单元中。,MOVSI,2000HMOVDI,3000HMOVAX,DIADDSI,AXMOVAX,DI+2ADCSI+2,AX,(3)加1指令INC指令格式:INCOPRD指令功能:OPRDOPRD1这条指令对指定的操作数进行加1操作,其操作数可以是通用寄存器,也可以是存储器。该指令执行结果对标志位AF、OF、PF、SF和ZF有影响,而对CF不产生影响。例:INCALINCCXINCWORDPTRSIINCBYTEPTRSI+BX,(1)不带借位的减法指令指令格式:SUBOPRDl,OPRD2指令功能:OPRD1OPRD1OPRD2该指令用来对目的操作数和源操作数的字或字节相减,其结果存放在目的操作数。源操作数OPRD2:可以是累加器、通用寄存器、存储器、立即数。目的操作数OPRD1:可以是累加器、通用寄存器、存储器。指令执行后对各状态标志位OF、SF、AF、PF和CF均产生影响。,2减法指令,例:SUBAL,78HSUBBX,5678HSUBAX,CXSUBAL,SI+4SUBDX,BX+SI+1000HSUBBYTEPTRSI5,100,(2)带借位的减法指令指令格式:SBBOPRD1,OPRD2指令功能:OPRD1OPRD1OPRD2CY该指令与SUB相类似,只不过在两个操作数相减时,还应减去借位标志CF的当前值。这条指令主要用于多字节的减法运算。该指令对标志位AF、CF、OF、PF、SF和ZF都将产生影响。,(3)减1指令DEC指令格式:DECOPRD指令功能:OPRDOPRD1该指令实现对操作数的减1操作,所用的操作数可以是寄存器的,也可以是存储器。在相减时,把操作数看作为无符号的二进制数。该指令执行结果将影响标志位AF、OF、PF、SF和ZF,但CF状态不确定。例:DECBLDECCXDECBYTEPTRSI,(4)求补指令NEG指令格式:NEGOPRD指令功能:OPRD0OPRD该指令用来对操作数进行求补操作,即用零减去操作数,然后再将结果送回。相当于操作数求反加1并保存在目的操作数中。例:NEGALNEGBYTEPTRSI如果操作数的值为-128(16进制数为80H)或者-32768(16进制数为8000H),执行求补指令后,操作数没有变化,但溢出标志OF=1。利用求补指令可以获得操作数的相反数的补码。,(5)比较指令指令格式:CMPOPRDl,OPRD2指令功能:OPRD1OPRD2该指令执行减法操作,不保存相减的结果。指令执行后两操作数的内容不变,但相减的结果影响标志位。在程序设计时,比较指令通常为程序的转移提供条件。例:CMPAX,2000HCMPAL,50HCMPDX,SICMPAX,BXSI10H影响标志位AF、CF、OF、PF、SF、ZF,同SUB。,比较结果的判断1)两个操作数相等如果所比较的两个操作数相等时,那么标志位ZF=1,所以根据ZF就可以判断两数是否相等。2)两个操作数不等两个无符号数的比较无符号数相减时,CF就是借位标志。如果CF=0,表示无借位,即被减数大,减数小。如果CF=1,表示有借位,即被减数小,减数大。两个有符号数的比较两个有符号的比较时,同符号数相比较,相减的结果不会超出带符号数的表示范围,即不会产生溢出,OF=0;两个不同号的带符号数比较,相减的结果有可能产生溢出。这时可以用如下结论判断。当OFSF=0时(既SF=OF),OPRD1OPRD2。当OFSF=1时(既SFOF),OPRD1OPRD2。,8086的乘法指令分为无符号数乘法指令和带符号数乘法指令两种。目标操作数:AL或AX(隐含给出)源操作数:通用寄存器、存储器。不能为立即数和段寄存器。乘法指令对状态标志CF、OF有影响,SF、ZF、AF、PF不确定。,3乘法指令,(1)无符号数乘法指令MUL指令格式:MULOPRD指令功能:若OPRD为字节数据,则执行AXALOPRD若OPRD为字数据,则执行DX、AXAXOPRD,例:MULCLMULBXMULWORDPTRSI要完成1415可以用下列指令:MOVAL,14MOVCL,15MULCL,(2)带符号数乘法指令IMUL指令格式:IMULOPRD指令功能:若OPRD为字节数据,则执行AXALOPRD若OPRD为字数据,则执行DX、AXAXOPRD,8086有两条除法指令:无符号除法指令和带符号除法指令。它们都可以进行字节或字除法运算,并且规定,除数字长必须是被除数的一半。8位除法的被除数在AX中;16位除法的被除数在DX与AX中,除数由指令指出。对8位数除法,商与余数分别放在AL与AH中,对16位除法,商与余数分别放在AX与DX中。指令操作数不能为立即数和段寄存器。除法指令执行后,CF、OF、AF、PF、ZF、SF不确定。,4除法指令,(1)无符号数除法指令DIV指令格式:DIVOPRD指令功能:OPRD为字节数据:ALAXOPRD商AHAXOPRD余数OPRD为字数据:AXDX,AXOPRD商DXDX,AXOPRD余数,(2)带符号数除法指令IDIV指令格式:IDIVOPRD指令操作:与DIV指令相同,但被除数、除数、商、余数全部均为带符号数,且余数的符号位同被除数。用IDIV指令时,如果是一个双字除以一个字,则商的范围为3276832767;如果是一个字除以一个字节,则商的范围为128127。运算结果超出了表示范围,会作为除数为0的情况来处理,即产生0号中断。,(3)字节转换为字指令CBW指令格式:CBW指令功能:AL中的符号位扩展到AH中。若AL中的D7=0,则(AH)=00H;若AL的D7=1,则(AH)=FFH。(4)字转换为双字指令CWD指令格式:CWD指令功能:AX中的符号位扩展到DX中。若AX中的D15=0,则(DX)=0000H;若AX的D15=1,则(DX)=FFFFH。,以上两转换指令均不影响标志。,例:无符号两字节相除50/CLMOVAL,50MOVAH,0DIVCL,带符号两字相除1000H/BXMOVAX,1000HCWDIDIVBX,在计算机中,可用4位二进制码来表示一个十进制码,这种代码叫BCD码。BCD码只有09共10种编码。BCD码有两类:一类叫压缩(组合)的BCD码,用1个字节表示2位BCD码;另一类叫非压缩(非组合)的BCD码,1个字节只用低4位来表示BCD码,高4位为0。,5BCD码调整指令,非压缩BCD码加法调整指令AAA指令格式:AAA指令功能:AL把AL中的非组合BCD码加法的和调整为非组合的BCD码格式。AHAH调整产生的进位值。调整的步骤如下:如AL寄存器的低4位在09之间,且AF=0,则跳过第步,执行第步;如AL寄存器的低4位为十六进制数的AF或AF=1,则AL中的内容加6,AH中内容加1,并将AF置1;清除AL寄存器的高4位;AF位的值送CF位。,(1)BCD码加法的十进制调整指令,例:ADDAL,BLAAA指令执行前AX=0505H,BL=09H,可见AL和BL中的内容分别为5和9。第一条指令执行后,AL=0EH,AF=0;第二条指令进行BCD码调整的结果使AX=0604H,AF=1,CF=1。,影响AF,CF标志,其它标志无意义。,例:AX和BX中各存放两字节非组合BCD码,计算两者的和存放到CX中。,ADDAL,BLAAAMOVCL,ALMOVAL,AHADDAL,BHAAAMOVCH,AL,MOVCL,AHADDAL,BLAAAXCHGAL,CLADCAL,BHAAAMOVCH,AL,压缩BCD码加法调整指令DAA指令格式:DAA指令功能:AL把AL中的组合BCD码的和调整为组合的BCD码格式。调整的步骤如下:如AL寄存器的低4位大于9或AF=1,则AL加6,并将AF置1;如AL寄存器的高4位大于9或CF=1,则AL加60H,并将CF置1;影响AF,CF,PF,SF,ZF标志,OF无意义。,例:两8字节组合BCD码分别存放在2000H和3000H起始的单元(低位在前),计算两者的和,结果存放在2000H起始的9字节单元。MOVSI,2000HMOVDI,3000HMOVCX,8CLCLP1:MOVAL,SIADCAL,DIDAAMOVSI,ALINCSIINCDILOOPLP1MOVAL,0ADCAL,0MOVSI,AL,非压缩十进制数减法调整指令AAS指令格式:AAS指令功能:AL把AL中的差调整为非压缩的BCD码格式。AHAH调整产生的借位值。这条指令主要用于SUB或SBB之后,减法指令必须把两个非压缩的BCD码相减,并把结果存放在AL寄存器中。标志影响同AAA。,(2)BCD码减法的十进制调整指令,压缩BCD码减法调整指令DAS指令格式:DAS指令功能:AL把AL中的组合BCD码的差调整为组合的BCD码格式。标志影响同DAA。,必须使用AL进行加减法运算,才能完成调整。调整指令必须紧跟加减法指令执行。参与加减法运算的BCD码类型必须与调整指令一致。,BCD码加减法的十进制调整指令总结,(3)乘法的BCD码调整指令AAM指令格式:AAM指令功能:AX把AL中的积调整为非压缩的BCD码格式。这条指令之前必须执行MUL指令把两个非组合的BCD码相乘(此时要求其高4位为0),结果放在AL中。本指令的调整方法是:把AL寄存器的内容除以0AH,商放在AH中,余数保存在AL中。指令根据AL寄存器的内容设置条件标志SF、ZF、PF,但OF、CF、AF位无意义。,(4)除法的BCD码调整指令AAD对BCD码进行除法运算时,也要求除数和被除数都用非组合的BCD码形式来表示,这是与对BCD码乘法的要求类似的地方。这里要特别注意一点,对BCD码除法运算的调整是在进行除法之前,通过对被除数进行调整来实现的。调整操作如下:AL10AHALAH0例:一个数据为65,用非压缩的BCD码表示,则AH中为06H,AL中为05H,调整执行AAD指令,这条指令将AH中的内容乘以10,再加上AL中的内容,这样得到AL的结果为41H,AH为0。指令根据AL寄存器的结果设置SF、ZF和PF,OF、CF和AF无意义。,串操作指令可以使用一条指令完成对一串字符或数据的操作。特点:通过重复前缀完成串操作。可以对字节串或字串进行操作。一般源操作数在数据段中(DS),用SI间接寻址获得;目标操作数在扩展段中(ES),用DI间接寻址获得。可以对SI和DI的值自动修改。若对字节进行操作,则自动加1或减l;若对字进行操作,则自动加2或减2,加减由DF标志来决定。若DF=0,则SI和DI增量修改;DF=1,则SI和DI做减量修改。在串操作前可用STD指令使DF置l,也可以用CLD指令使DF清0。,四串操作指令,指令格式:MOVSB;字节传送MOVSW;字传送指令功能:(DI)(SI)字节操作SISI1;DIDI1;字操作SISI2;DIDI2;该类指令执行时,将把当前数据段中用SI指出的源串的一个字节或一个字传送到用DI指向的扩展段的目的地址中。当DF=0且是字节传送时,则传送后SI、DI加1,以使指针指向下一个地址;当DF=0且是字传送时,则SI、DI加2。若DF1,则SI、DI减1或减2。,1字符串传送指令,重复操作前缀REP它是串指令的前缀。当某一条指令需要多次重复时,就可以加上该前缀。重复次数应放在寄存器CX中。这样每重复执行一次,CX内容减1,直到CX=0,才停止重复。,例:将100个字节的字符串从内存数据段的1000H复制到内存扩展段的2000H中去。MOVSI,1000HMOVDI,2000HMOVCX,100CLD;DF=0REPMOVSB;重复搬移,MOVSB/MOVSW指令及前缀REP均不影响标志。,指令格式:CMPSB;字节比较CMPSW;字比较指令功能:(SI)(DI)字节操作SISI1;DIDI1;字操作SISI2;DIDI2;该类指令执行时,将当前数据段由SI所指出的字节和字同当前扩展段中由DI所指出的目的串的字节或字进行比较,比较结果对标志位的影响同减法。该指令对操作数不产生影响。,2字符串比较指令,相等/为零时重复操作前缀REPE/PEPZ它们是条件重复前缀。当条件满足时,才重复执行后面的串指令,一旦条件不满足,重复就停止。REPE/REPZ指令是相等重复指令,即只有ZF=l,且CX0,串操作指令就重复执行,每执行一次CX内容减1。不相等/不为零时重复操作前缀REPNE/PEPNZ它们是条件重复前缀。当条件满足时,才重复执行后面的串操作指令,一旦条件不满足,重复就停止。REPNE/REPNZ指令是不相等重复指令,即只有ZF=0,且CX0,串操作指令就重复执行,每执行一次CX内容减1。以上前缀均不影响标志。,例:比较1000H和2000H中的50个字节,找出第一个不相同的字节,如果找到,则将2000H起始单元中的这个数送AL中。LEADI,1000HLEASI,2000HMOVCX,50CLDREPECMPSBJZNEXTDECSIMOVAL,SINEXT:,指令格式:SCASB;字节扫描SCASW;字扫描指令功能:字节操作AL(DI)DIDI1;字操作AX(DI)DIDI2;该类指令是串扫描指令,用于寻找内存区中指定的数据和字符。指令执行时,将AL或AX的值减去扩展段中由DI所指定的字节或字,结果将改变标志位,但不改变操作数的值。,3字符串检索指令,例:AL中存放接收到的字符,在扩展段的0EEDH开始的4字节中依次存放+,-,;,:的ASCII码,若AL内容与上面4个符号中的某一个相等,则在440H开始的对应单元加1。MOVDI,0EEDHCLDMOVCX,4MOVDX,CXREPNZSCASBJNZSEDSUBDX,CXDECDXMOVDI,DXINCBYTEPTRDI+440HSED:,指令格式:LODSB;字节传送LODSW;字传送指令功能:字节操作AL(SI)SISI1字操作AX(SI)SISI2该类指令是字串装入指令。它将由SI所指定的数据段中源串字节或字装入到累加器AL或AX中去,并根据DF的值修改指针SI,以指向下一个要装入的字节或字。,4取字符串指令,指令格式:STOSB;字节存储STOSW;字存储指令功能:字节操作(DI)ALDIDI1字操作(DI)AXDIDI2该类指令是字串存贮指令。它将AL或AX中的字节或字存贮到扩展段中由DI所指定的单元去,且根据DF的值来修改DI的值。,5存字符串指令,例:将扩展段中1000H开始的200字节单元清0。,LEADI,1000HMOVCX,100CLDXORAX,AXREPSTOSW,MOVDI,1000HMOVCX,200CLDXORAL,ALREPSTOSB,控制转移指令包括5类:无条件转移和条件转移指令。子程序调用和返回指令。循环控制指令。中断指令。处理器控制指令。,五控制转移指令,)段内直接转移(相对寻址)段内直接转移的目标地址是当前IP内容和一个8位或16位的位移量和。即物理地址=CS16IP8位或16位的位移量,1转移和调用指令的寻址方式,例:0100H:JMP1000HE9FD0E0103H:,)段内间接转移这种转移在段内进行,其转移的目标地址存放在16位寄存器或字型存储单元中,指令执行时到寄存器或存储单元中取出目标地址放入IP。可以采用前面介绍的各种对操作数的寻址方式访问存放目标地址的单元。,例:JMPCXJMPWORDPTRBX,)段间直接转移在这种寻址方式中,指令中将直接给出转移目标地址16位的段地址和16位的段内偏移量。,例:JMP2000H:1000H,)段间间接转移转移目标地址使用连续4字节内存单元存放,前两个单元存放16位的段内偏移地址;而后两单元存放的是16位的段地址。可以采用前面介绍的各种对操作数的寻址方式访问存放目标地址的存储单元。,例:JMPDWORDPTRBP+DI,指令用于改变程序的执行顺序。转移有段内转移和段间转移之分。所谓段内转移是指段地址
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新人教版小学三年级数学上册教案全套
- PEP小学英语教学设计与课后反思
- 品牌声誉风险管理策略-洞察及研究
- 汽车修理厂合同范本5篇
- 新型直流电机控制系统设计报告
- 环境治理中的公私合作模式-洞察及研究
- 物联网集成解决方案-洞察及研究
- 稀有金属冶炼废水的微生物处理技术-洞察及研究
- 低成本航空公司运营管理模式
- 2025年山东出版集团有限公司山东出版传媒股份有限公司招聘(192名)考前自测高频考点模拟试题及完整答案详解一套
- 抗抑郁症临床用药分类
- 借款授信合同范本
- 应用PDCA降低抗生素的使用率及使用强度
- 百货公司管理制度
- 2025年上海市闵行区区管国企招聘笔试参考题库含答案解析
- 《性病防治知识讲座》课件
- 化工静电事故培训
- 脑疝的急救和护理
- 私人助理兼保姆聘用协议模板
- 工程项目现场管理制度(业主方用)
- GB/T 19411-2024除湿机
评论
0/150
提交评论