已阅读5页,还剩154页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章8086/8088寻址与指令系统,基本概念,微机工作过程中其内部信息有两类:一类是控制信息(指令);一类是被加工处理的信息(数据)。指令:微机中的控制信息就是使计算机进行某种操作的命令,这些命令就称为指令。指令系统:一台计算机所能执行的全部指令的集合称为指令系统。不同的计算机其指令系统是不同的。,基本概念,汇编语言指令或符号指令:用字母和其它一些符号组成的“助记符”与操作数等表示的指令称为汇编语言指令或符号指令。例如:MOVAX,BX;AXBX其二进制代码(机器代码)为89D8H,就是1000100111011000B不易理解,不易记忆。汇编程序与汇编过程:把符号指令变成机器代码的过程叫汇编,完成汇编任务的程序叫汇编程序。,3.18086/8088寻址方式,指令格式:,标号:操作码,操作数;注释,标号:内存码段中存放该指令的第一个字节的地址,操作码:操作的性质。,操作数:操作的对象,可以是操作数本身或存放操作数的内存(I/O端口)地址。,注释:查看程序用,不参加编译运行。,寻址方式:寻找操作数所在地址的方式,计算机中操作数可以存放在以下几个地方:指令代码中,存放常量;MOVAX,2070H寄存器中:MOVAX,BX内存中:MOVAX,2000HI/O端口中:INAL,40H,一、立即数寻址,操作数直接放在指令中,紧跟在操作码的后面,与操作码一起放在存储器的码段区域中。,MOVAX,2030HB82030,内存地址,内存内容,错误!,高字节高地址低字节低地址,20H,30H,例:MOVAX,1234H,二、寄存器寻址,操作数放在CPU内部的寄存器中,可以是8位或16位寄存器,注意源操作数和目的操作数的位数应一致。,MOVAX,BX,;将BX中的内容传送到AX中去,MOVAL,BH,;将BH中的内容传送到AL中去,MOVAL,BX,错误!不匹配,三、直接寻址,操作数存放在内存中,在指令中给出存放操作数的偏移地址,如果不加说明,默认的段基址是数据段。,MOVAX,0020H,;将数据段偏移地址为0020H的地址中的内容传送到AX中去,相当于:MOVAX,DS:0020H,码段,堆栈段,数据段,DS:0000H,偏移地址,内存内容,MOVAX,0020H,AX,AH,AL,34,12,AX:3412H,也可以传送内存中其他段的数据,在相应的偏移地址前加段超越符“:”。,MOVAX,SS:0020H,;将堆栈段偏移地址为0020H的地址中的内容传送到AX中去,MOVES:0100H,BX,如果不加段超越,默认为约定段的偏移地址,直接寻址,四、寄存器间接寻址,操作数存放在内存中,但其偏移地址存放寄存器中。在指令中只给出这个寄存器。,MOVAX,BX,BX中存放操作数的偏移地址,其中,作为间址的寄存器只能有4个:BX,SI,DI,BP,其他寄存器无此功能。,用BP寻址,段基址默认为堆栈段SS,其余3个的段基址默认为数据段DS,同时指令允许段超越。,码段,堆栈段,数据段,DS:0000H,偏移地址,内存内容,MOVAX,BX,AX,AH,AL,34,12,AX:3412H,MOVBX,0020H,MOVAX,ES:BX,;传送的操作数在附加段ES中,偏移地址存放在BX中。,MOVBP,BX,;将BX中的内容传送到堆栈段中,其目的地的偏移地址存放在BP中。,MOVDI,2000H,;将立即数2000H传送到数据段中,其目的地址的偏移地址存放在DI中。,寄存器间接寻址,五、寄存器相对寻址,操作数存放在内存中,但其偏移地址需要计算。,偏移地址寄存器内容指令中给定的位移量,MOVAX,SI+0200H,;欲传送的操作数在数据段中,其偏移地址是SI寄存器中的内容加上0200H,同样,作为变址的寄存器只能有4个:BX,SI,DI,BP,其他寄存器无此功能。,用BP寻址,段基址默认为堆栈段SS,其余3个的段基址默认为数据段DS,同时指令允许段超越。,MOVAX,0200HBX,变址寻址可以有多种格式:,MOVAX,BX+0200H,MOVAX,0200H+BX,例如:DS:3000H,BX:1000H数据所在的地址:,高位:31201H低位:31200H,例:MOVAX,BP+1223H假设:(SS)=5000H,(BP)=3678H,寄存器相对寻址,六、基址加变址寻址,操作数存放在内存中,但其偏移地址是由两部分相加而成:,基址寄存器内容变址寄存器内容,MOVAX,BXSI,;欲传送的操作数在数据段中,其偏移地址是BX寄存器中的内容加上SI寄存器中的内容,基址寄存器只有2个:BX,默认的段基址为DS;BP,默认的段基址为SS。2个变址寄存器:DI、SI,例:MOVAX,BX+DI假设:(DS)=5000H,(BX)=1223H,(DI)=54H,指令中必须是基址寄存器与变址寄存器的组合,不允许同时出现两个基址寄存器或2个变址寄存器的组合。,MOVAX,BXBP,错误!不允许,MOVAX,SIDI,七、基址-变址-相对寻址,操作数存放在内存中,但其偏移地址是由三部分相加而成:,基址寄存器内容变址寄存器内容位移量,MOVAX,BX+SI+0200H,;欲传送的操作数在数据段中,其偏移地址是BX寄存器中的内容加上SI寄存器中的内容加上0200H,基址寄存器只有2个:BX,默认的段基址为DS;BP,默认的段基址为SS。,变址寄存器只有2个:SI和DI。允许段超越。,MOVAX,BX+SI+0200H,MOVAX,0200HBX+SI,MOVAX,0200HBXSI,MOVAX,0200HBXBP,MOVAX,0200HSIDI,必须是基址(BX或BP)加变址(DI或SI),MOVAX,0200HBP+SI,;欲取的数据在堆栈段,错误格式,例:MOVAX,BX+SI+1030H或MOVAX,1030BXSI若BX=2100H,SI=1400H,偏移量1030H,DS=1200H,基址-变址-相对寻址,存储器寻址时的约定,程序只能在CS段、堆栈操作数只能在SS段、目的串操作数只能在ES;其他操作虽然也有默认段,但允许段超越。,DS:2000HSS:3000HBX:1000HBP:3000HSI:3004H,MOVAX,3000HMOVAX,BXMOVAX,3000HMOVAX,BXMOVAX,BPMOVAX,BPMOVAX,SIMOVSI,0002HMOVAX,BXSIMOVAX,BP+02HMOVAL,BX+06HMOVAX,BX+SI+4H,AX:3000HAX:1000HAX:2010HAX:3412HAX:3000HAX:2B1BHAX:6050HSI:0002HAX:7856HAX:4B3BHAL:DEHAX:F0DEH,3.28086/8088指令系统,92种指令,按照功能分为6大类,数据传送类指令算术运算类指令逻辑运算与移位指令串操作指令控制转移类指令处理器控制指令,3.28086/8088指令系统,一、数据传送指令,通用数据传送指令MOVOPRD1,OPRD2;,所有的MOV传送指令都不能改变标志CS,IP不能作为目的操作数MOVCS,AX两个段寄存器间不能直接传送MOVSS,DS立即数不能直接传送给段寄存器MOVDS,2000H内存单元间不能直接传送MOVSI,2000H立即数不能作为目的操作数MOV1000H,AX,MOVBL,AXMOV100,CXMOVSI,AXMOVCS,AXMOVSI,DIMOVBX,2DIMOVAX,CSMOVSS,2400HMOVAX,BP+4,错误,不匹配错误,立即数不能赋值正确错误,CS不能赋值错误,内存间不能直接传送正确正确错误,段寄存器不能赋立即数正确,通用数据传送指令传送方向,1,2,3,4,5,6,堆栈操作指令PUSHsrc,POPdest,堆栈是按先进后出的原则组织的一段内存区域,一般作临时存储器用(仓库)。其指针SP为16位的寄存器,始终指向栈顶(货物堆放的位置)。堆栈的空间大小是用户指定的。,SS:2000H;堆栈段的段基址;表示堆栈从20000H处开始,20000H,假设用户定义堆栈为100个字节,则SP自动设置为0064H,20064H,100个字节,SP:0064H,MOVAX,1234HPUSHAX,20000H,20064H,100个字节,SP,(1)SP-2SP,12H,(2)AHSPALSP,SP,34H,先减指针,再压数据,先高后低,POPBX,(1)SPBLSPBH,(2)SP+2SP,BL,BH,SP,先出数据,再加指针,先低后高,只能对16位数进行操作,一次压入弹出两个字节,PUSHAH,必须对寄存器的内容或内存单元的内容进行操作,PUSH2000H,设SP为0100H,SS为2000H,PUSHBP后,栈顶的物理地址是:,20100H2H=200FEH,下列指令中,错误的是:PUSHDSB)POPCSC)PUSH30HBXSID)MOVSI,ES:BP,B)POPCS,堆栈操作,MOVAX,1000HPUSHAXMOVBX,AXPUSHBXPUSH1000HPOP1002HPOPAXPOPBX,DS:2000HSS:3000HSP:0064H,SP:0064H,100个字节,10H,00H,BX:1000H,34H,12H,34H,12H,34H,12H,AX:3412H,BX:1000H,交换指令,XCHGOPRD1,OPRD2,OPRD1OPRD2,在寄存器之间,寄存器和内存之间的8位,16位数据可以相互交换。,XCHGAL,AH,XCHGAX,BX,内存之间的数据不可相互交换CS,IP不能参与交换段寄存器不能作为一个操作数,例:XCHGBX,BP+SI,如指令执行前:(BX)=6F30H,(BP)=0200H,(SI)=0046H,(SS)=2F00H,(2F246H)=4254H,OPR2的物理地址=2F000H+0200H+0046H=2F246H则指令执行后:(BX)=4254H,(2F246H)=6F30H,表格查找指令(换码指令)XLAT,使累加器AL中的一个值变换为存储器表格中的某一个值,一般用来实现编码码制的转换。,用BX指向表的首地址,AL中的内容为表中某一项与首地址之间的位移量。在执行查表指令时,将BX与AL中的内容相加,把得到的值作为地址,然后将此地址所对应单元中的值取到AL中去。,DS段,表格首地址,BX+ALAL,11H,20H,33H,22H,BX,AL,BX+0,BX+AL,BX+2,BX+1,AL,为什么?,执行该指令前,应该先建立一张表格,该表的最大容量为256字节。,例:将十进制数字0-9变换成七段显示码的译码表,01000000,0,01111001,1,40H,79H,AL存放表内元素位移量,例:从5号端口输入十进制数,转换为7段码后输出到20号端口。,DS段,MOVBX,2000HINAL,5HXLATOUT20H,AL,例:向端口40H送字符35。,DS段,MOVBX,2000HMOVAL,3XLATOUT40H,ALMOVAL,5XLATOUT40H,AL,2输入输出指令INOUT,CPU,存储器,输入,输出,IN,OUT,AX或AL,只能用IN、OUT指令向外设发命令;外设只能与CPU内部寄存器AL或AX进行数据传输,累加器专用指令(只与AX或AL有关,与AH无关),INAL,40H,OUT40H,AL,INAX,40H,OUT40H,AX,8位,16位,(40H)AL,(41H)AH,AL(40H),AH(41H),INAL,352H,OUT400H,AL,当外口地址大于8位(0FFH)时,用DX作间址,MOVDX,352HINAL,DX,MOVDX,400HOUTDX,AL,3地址传送指令,取有效地址指令LEA:取存储器地址的偏移地址,LEAAX,2728H;地址为2728H,AX为2728H,功能:将存储器地址送到一个寄存器。,要求源操作数必须为存储器单元地址,目的操作数必须为一个16位的通用寄存器。,该指令通常用来使一个寄存器作为地址指针。,LEABX,BP+SI;BX为BP+SI的值,LEAreg16,mem,LEA指令与MOV指令的区别:LEASI,BUFF指令是将标号BUFF的偏移地址送入寄存器中;MOVSI,BUFF指令是将标号BUFF所指存储单元的内容送入SI。,BUFF=,0,1,2,3,4,5,48,00,FE,FF,LEASI,BUFF;执行后:(SI)=0002HMOVSI,BUFF;执行后:(SI)=0048H,段起始地址,LDS取内存中的数LDSreg16,mem32,将指定内存中的4个字节(32位)分别装入指定的寄存器和段寄存器DS(高16位)中。,30H,19H,79H,40H,24H,2133H,2134H,2131H,2130H,2132H,DS段,例:2130H2133H这4个单元中存放着一个地址,2130H2131H为该地址偏移量,2132H2133H为该地址段值,LDSDI,2130H,执行后:DI:7940HDS:3024H,LES取内存中的数LESreg16,mem32,将指定内存中的4个字节(32位)分别装入指定的寄存器和段寄存器ES(高16位)中。,例:DS:1000HDI:0400H10420H=FFH10421H=00H10422H=10H10423H=23H,LEAAX,20DI,AX:00FFHES:2310H,执行后:,例:DS:2000H,MOVBX,3004HMOVAL,02HXLATLEABX,3000HLESSI,BX+04HLDSDI,BX+02H,AL:DEH,BX:3000H,SI:BC9AH,ES:F0DEH,DI:7856H,DS:BC9AH,4标志传送指令,LAHF(LoadAHwithFlags):读取标志,将标志寄存器FR中的低8位AH中,AH,SAHF(SetFlagswithAH):设置标志,上述指令的反向传输,只提供8位标志位指令,保持对8位机指令的兼容性,PUSHF:标志寄存器入栈命令POPF:将栈内内容进入标志寄存器FR只有这个命令可以改变TF的内容。,5字位扩展指令CBW/CWD,功能:CBW将AL符号数的符号扩展到AH中,CWD将AX符号数的符号扩展到DX中。扩展规则如下(对带符号数):1.若ALBX;CF为1,AXBX;否则AXBX。,指令系统针对有符号数和无符号数的比较分别提供了不同的判断指令。用户只需在应用时根据数据类型选择不同的指令即可。,乘法指令,约定:两个8位数相乘,有一个乘数在AL中,另一个乘数在寄存器或内存中,乘积在AX中;两个16位数相乘,有一个乘数在AX中,另一个乘数在寄存器或内存中,乘积的高16位在DX中,低16位在AX中。乘法有有符号数和无符号数两套指令,8位数8位数16位数,16位数16位数32位数,无符号数乘法指令,MULOPRD;不出现AL或AX,MULBL;ALBLAX,MULCX;AXCXDX(高位),AX(低位),MULBYTEPTRDI;ALDIAX,MULWORDPTRSI;AXSI+1SIDX(高位),AX(低位),2)有符号数乘法指令,IMULOPRD;不出现AL或AX,IMULBL;ALBLAX,IMULCX;AXCXDX(高位),AX(低位),IMULBYTEPTRDI;ALDIAX,IMULWORDPTRSI;AXSI+1SIDX(高位),AX(低位),功能上与MUL相似,要求两个乘数必须为有符号数,乘法运算时,结果影响CF和OF,AF,PF,SF,ZF标志位无意义。,对MUL指令:当乘积的高半部分不为0,置:CF=1,OF=1;否则,CF=0,OF=0。,对IMUL指令:当乘积的高半部分是低半部分最高位的扩展,乘积的高半部分每位与低半部分最高位相同时:CF=0,OF=0;否则,CF=1,OF=1。,CF=1,OF=1表示高半部分包含有结果的有效数,表示AH或DX中不是00就是FF,积的符号位扩展,例:,MOVAL,0FBHMOVBH,02HIMULBH,结果:AX=0FFF6H,即-10,CF=0,OF=0,MOVAL,0FBHMOVBH,02HMULBH,结果:AX=01F6H,即502,CF=1,OF=1,除法指令,约定:除数必须为被除数的一半字长被除数为16位,放在AX中,除数为8位,在寄存器或内存中,8位商在AL中,8位余数在AH中被除数为32位,放在DX(高位),AX(低位)中,除数为16位,在寄存器或内存中,16位商在AX中,16位余数DX中除法有有符号数和无符号数两套指令,16位数8位数8位数,32位数16位数16位数,1)无符号数除法指令,DIVOPRD;不出现AX或DXAX,DIVBL;AXBLAL(商),AH(余数),DIVCX;DXAXCXAX(商),DX(余数),DIVBYTEPTRDI;AXDIAL(商)AH(余数),DIVWORDPTRSI;DXAXSI+1SIAX(商),DX(余数),2)有符号数除法指令,IDIVOPRD;不出现AX或DXAX,功能上与DIV相似,要求被除数,除数必须为有符号数。,IDIVBL;AXBLAL(商),AH(余数),注意:除法运算后,所有的标志位都是不确定的,没有意义;用IDIV指令时,如果是双字除以一个字,则商的范围为-32768-32767,如果是一个字除以一个字节,则商的范围为-128-127。如果超出这个范围,会作为除数为0来处理,产生0号中断8086系统规定余数的符号和被除数相同;当8位数除以8位数,16位数除以16位数时,必须对被除数进行扩展。,无符号数被除数扩展:将AH或DX清0。,有符号数被除数扩展:对AH或DX进行符号扩展。,将字节扩展成字的指令:CBW,将AL中的符号位扩展到AH中。当AL=80H时,AH=0FFH,当遇到两个字节相除时,要预先执行CBW指令,扩展被除数,否则不能正确执行除法操作。,将AX中的符号位扩展到DX中。当AX=8000H时,DX=0FFFFH。,将字扩展成双字的指令:CWD,BCD码运算指令,组合的BCD码:一个字节中有两位BCD码01000101非组合的BCD码:一个字节只用低4位表示一位BCD码,高4位为0。0000010000000101,BCD码:用二进制形式表示的十进制码。每一位十进制数用4位二进制表示,运算规则是逢十进一。,BCD码运算时,先用一般的二进制运算,然后再进行BCD码调整。,BCD码加法十进制调整指令,1)未组合的BCD码运算调整指令AAA,两个未组合的BCD码相加,结果在AL中,执行该指令后将结果调整为十进制,放在AX中。,MOVAL,7HADDAL,5HAAA,;AL:0CH,;AX:0102HCF=AF=1,调整原则:在调整前若AL低半部包含的数值大于9或AF=1,则AAA完成下列操作:AL加6,AF和CF置1,,AH加1,AL的高4位清零。,7+5=12用组合的BCD码表示运算过程:,BCD码逢十进一,16进制逢16进1,因为低4位大于9,所以在个位上加6,使其产生进位,同时AF=1,CF=1。,16进制加法,AAA指令调整为10进制结果,9+9=18用组合的BCD码表示运算过程:,BCD码逢十进一,16进制逢16进1,因为低4位有进位,AF1,所以在个位上加6,使其成为十进制运算结果,同时AF=1,CF=1。,16进制加法,AAA指令调整为10进制结果,2)组合的BCD码运算调整指令DAA,两个组合的BCD码相加,结果在AL中,执行该指令后将结果调整为十进制,放在AL中。,MOVAL,56HADDAL,47HDAA,;AL:9DH,;AL:03HCF=1,调整原则:如果AF=1或AL的低4位大于9,则AL加06H并置AF=1如果CF=1或AL的高4位大于9,则AL加60H并置CF=1。如果满足上述2条,则AL加66H,并置AF=1,CF=1。,MOVAX,1234HMOVBX,5678HADDAL,BLDAAMOVCL,ALMOVAL,AHADCAL,BHDAAMOVAH,ALMOVAL,CL,;AL:ACH,;AL:12HCF=1,;CL:12H,;AL:12H,;AL:69H,;AL:69HCF=0,;AX:6912HCF=0,MOVAX,8ADDAL,9AAA,;AX:0038H,;AX:0071HAF=1,;AX:0107HCF=1,因为AF=1,所以AH=1,CF=1,AF=1,AL高4位清零,BCD码减法调整指令与加法调整指令类似,只是分别将加06H,60H,66H改为减06H,60H,66H。,AAS:对非组合的BCD码减法调整,DAS:对组合的BCD码减法调整,必须紧跟在相对应的加减法指令后进行调整。,BCD码乘法十进制调整指令AAM,1)BCD码均为无符号数,故只有用MUL乘法指令才能调整;2)BCD码乘法调整指令只能对两个8位非组合的BCD码相乘的结果(AX)进行调整;,MOVAL,05HMOVBH,06HMULBHAAM,;AX:001EH,;AX:0300H,(AH)(AL)/0AH(AL)(AL)%0AH,1)BCD码均为无符号数,故只有用DIV除法指令才能调整,并且在两个数相除前进行调整;2)BCD码除法调整指令只能对非组合的BCD码相乘结果进行调整;,MOVAX,0400HMOVBL,02HAADDIVBLAAM,;AX:0028H,BCD码除法十进制调整指令AAD,(AL)(AH)*0AH+AL(AH)00H,将AX寄存器中非压缩型BCD码转换成为真正的二进制数,并存放在AL寄存器中,;AX:0014H,;AX:0200H,三、逻辑运算指令,1)NOT按位取反,NOTOPRD,AX:73HDX:85H,MOVAX,DXNOTAXADDAX,DXINCAX,0000000010000101,1111111101111010,1111111111111111,0000000000000000,对标志位没有影响,2)AND与OR或XOR异或,ANDOPRD1,OPRD2,OPRD1ANDOPRD2OPRD1,这三条指令执行后,CF=0,OF=0,SF,PF,ZF发生变化。,MOVAX,2050HANDAX,0FFH,AX:0050HPF=1,SF=0,ZF=0,0010000001010000,0000000011111111,0000000001010000,XOR:相同出0,相异出1,AL:00001111,XORAL,0FFH,XORAL,00H,与0异或,状态不变;与1异或,状态相反。,对某些位置1用OR;对某些位清零用AND;对某些位取反用XOR。,例:假设BX=11100011B,变量VALUE的值为:01111001B,确定下列各条独立指令的结果。,XORBX,VALUEANDBX,VALUEORBX,VALUEXORBX,11111111B,10011010,01100001,01100001,11111011,10011010,11111011,00011100,00011100,3)TEST,TESTOPRD1,OPRD2,按位相与,结果只影响标志位,OPRD1ANDOPRD2影响标志,TESTCX,0FFFFHJZP1,;检验CX是否为零,;若标志ZF=1,转向P1,CF=0,OF=0,SF,PF,ZF发生变化。,4)移位指令,非循环移位指令(4条),SAL(ShiftArithmeticLeft):算术左移(无符号数),SHL(ShiftLogicLeft):逻辑左移(无符号数),0,CF,左移一位进CF,右边补0,相当于乘2。影响标志,若移位后最高位与CF不同,则OF=1,表示移位前后数据变号。,若移位位数大于1,所移的位数用CL存放。,MOVAL,02HSALAL,1,;AL:00000010,;AL:00000100,MOVAL,02HSALAL,4,MOVAL,02HMOVCL,4SALAL,CL,;AL:00000010,;AL:00100000,SAR(ShiftArithmeticRight):算术右移,CF,最低位进CF,左边重复最高位,即操作数符号不变。一般用于有符号数的右移,符号扩展。,若移位位数大于1,所移的位数用CL存放。,MOVAL,-4SARAL,1,;AL:11111100,;AL:11111110,-2(真值),SHR(ShiftLogicRight):逻辑右移,CF,最低位进CF,左边补0。一般用于无符号数的右移。,若移位位数大于1,所移的位数用CL存放。,MOVAL,8SHRAL,1,;AL:00001000,;AL:00000100,4,0,MOVSI,-1MOVCL,4SALSI,CLANDSI,7FFFHORSI,8000HNOTSI,;SI:1111111111111111,;SI:1111111111110000,1111111111110000,0111111111111111,;SI:0111111111110000,;SI:1111111111110000,;SI:0000000000001111,试分析下面程序完成什么任务?,MOVCL,4SHLDX,CLMOVBL,AHSHLAX,CLSHRBL,CLORDL,BL,循环移位指令(4条),ROL(RotateLeft):不带进位循环左移,CF,若移位后最高位与CF不同,则OF=1,表示移位前后数据变号。,若移位位数大于1,所移的位数用CL存放。,ROR(RotateRight):不带进位循环右移,CF,若移位位数大于1,所移的位数用CL存放。,RCL(RotatethroughCFLeft):带进位循环左移,CF,RCR(RotatethroughCFRight):带进位循环右移,CF,可实现多字节的移位,将DX,AX左移1位,SALAX,1RCLDX,1,假定DX:0000000010111001B,CL:3,CF:1,SHRDX,1SARDX,CLSHLDX,CLSHLDL,1RORDX,1RORDX,CLSALDH,1RCLDX,CLRCRDL,1,;DX:01011100CF:1,;DX:00010111CF:0,;DX:10111001000CF:0,;DX:01110010CF:1,;DX:1000000001011100CF:1,;DX:0010000000010111CF:0,;DX:0000000010111001CF:0,;DX:0000010111001100CF:0,;DX:0000000011011100CF:1,四、串操作指令,用一条指令实现对一串数据或字符的操作,字符或数据的个数在CX中,每执行一次CX自动减1,直至减到零,串操作自动停止;源操作数在DS:SI中,目的操作数在ES:DI中;源操作数和目的操作数都在内存中,是唯一一条从内存到内存的指令;DF=1,地址自动由高至低,减量进行串运算;DF=0,地址自动由低至高,增量进行串运算。,串传送指令,MOVSB:每次传送一个字节;MOVSW:每次传送一个字;,将位于DS段,由SI所指出的存储单元的字节或字传送到位于ES段,由DI所指的存储单元中,再根据DF修改SI和DI,从而指向下一个元素,继续传送,直到CX为0为止。,MOVSI,1000HMOVDI,2000HMOVCX,100CLDKKK:MOVSBDECCXJNZKKK,假设DS与ES段已经赋值,;设置源操作数指针,;设置目的操作数指针,;传送的元素个数,;DF=0,每传送一次,地址自动加1,继续传送,;每次传送一个字节,;传送一次,CX减1,;CX不为0,继续转向KKK处,MOVSB:相当于DS:SIES:DISI=SI+1DI=DI+1(DF=0),MOVSI,1000HMOVDI,2000HMOVCX,100CLDREPMOVSB,通常,在串传送指令前加无条件重复前缀REP,程序可自动计数并判别是否传送完毕。,REPMOVSB相当于,DS:SIES:DI,SI=SI+1,DI=DI+1,CX=CX-1,CX!=0,串比较指令,CMPSB:每次比较一个字节;CMPSW:每次比较一个字;,将位于DS段由SI所指出的存储单元的字节或字和ES段由DI所指的字节或字相比较,并且在比较之后根据DF自动修改SI和DI,通过段前缀的控制,可以实现在两个字符串中寻找第一个不相等的元素或第一个相等的元素。,依次比较两个字符串是一个循环过程,这个循环过程有两种退出条件,一是满足比较条件,如找到第一个相等字符或找到第一个不相等的字符;二是没有满足比较条件但已比较完所有的字符。,串比较操作的段前缀:,REPNZ/REPNE:不相等时继续寻找,直到寻找到第一个相等的字符或寻找完所有的字符(CX=0)。,REPZ/REPE:比较结果相等时继续寻找,直到寻找到第一个不相等的字符或寻找完所有的字符(CX=0)。,CX不影响ZF,判断一个微型机系统是否为初次加电,如果不是初次加电可以检测到在RAM的400H单元开始的4个字节分别设置了加电标志12,23,34,45。这4个字节的加电标志是在初次加电时,由ROM区(位于0E2DH单元开始的4个字节)复制过去的。当然,ROM区中的E2DH处的加电标志是永存的。,假设ES指向RAM区,DS指向ROM区,MOVSI,0E2DHMOVDI,0400HMOVCX,4CLDREPZCMPSBJZDONERETDONE:;后续处理,相等继续比较,如果4个字节都符合,表明设置好了加电标志,否则返回,ZF与CX无关,MOVSBMOVSWCMPSBCMPSW,指令完成后指针(SI,DI)自动增加或减少(DF);加上段前缀后,CX自动减1,并判断CX是否为0。若为0,终止循环。,REP,REPNZ/REPNEREPZ/REPE,取字符串指令LODSB/LODSW(LoadString),将位于DS段SI所指的存储单元的内容取到AL或AX中。用LODSB时,每次取一个字节,取完后,地址自动加1或减1;用LODSW时,每次取一个字,取完后,地址自动加2或减2。,该指令一般不用段前缀,否则,AL或AX中的内容会被后一次操作覆盖,最后只能得到内存中字符串的最后一个字节或字。,AL,LODSB,存字符串指令STOSB/STOSW(StoreString),把AL或AX中的数据存放到位于ES段DI所指的存储单元中,并自动修改地址指针。,该指令可加段前缀,使内存中连续的空间填满相同的数据。,将从0404H开始的256个单元清零,CLDLEADI,0404HMOVCX,80HXORAX,AXREPSTOSW,将从0700H单元开始的5个字节的内容逐一取来,放在累加器中进行处理,处理完后再送到0700H的内存区域。,CLDMOVSI,0700HMOVDI,0700HMOVCX,5L1:LODSBPUSHCXPOPCXSTOSBDECCXJNZL1,不用考虑指针DI,SI的变化,字符串检索指令SCASB/SCASW(ScanString),将AL或AX中的数据与位于ES段DI指针所指的内存单元的数据相比较,通过段前缀的控制,可以寻找到内存单元中的第一个与AL(或AX)不同或相同的数据。,REPNZSCASB:(AL)-ES:DI,不为0(不相等)时继续比较,DI自动加1或减1,CX自动减1,直到相等或CX为0时退出循环。寻找第一个相同的数据,REPZSCASB:(AL)-ES:DI,为0(相等)时继续比较,DI自动加1或减1,CX自动减1,直到不相等或CX为0时退出循环。寻找第一个不同的数据,有一字符串放在以2000H单元为始地址的内存中,从中搜索串结束符$,若有,将串长度x放入2100H单元,若没有$,2100H单元放入0FFH。,CLDMOVDI,2000HMOVCX,100MOVAL,$REPNESCASBJZDONEMOVAL,0FFHJMPSTO,DONE:MOVBX,100SUBBX,CXDECBLMOVAL,BLSTO:MOV2100H,AL,不等继续比较,若相等,转向DONE,比较完毕CX=0,不等,设立标志,计算字符串长度,五、控制转移类指令,所有的转移类指令均不影响标志位,无条件转移指令,64KB内,段内转移,目标指令与转移指令在同一个代码段CS,只改变IP,CS:IP,CS:新IP,可以超过64KB,段间转移,目标指令与转移指令分别在不同的代码段,转移时需要改变CS和IP的值,CS:IP,新CS:IP,段内直接转移:转移指令后直接给出目的指令处的地址。CS不变,JMP立即数,JMP2000H,;立即数为16位或8位,是目的地的IP,;IP=2000H,段内间接转移:目的地指令地址存放在寄存器或内存单元中,转移指令后给出的是寄存器或内存单元的地址,JMPOPRD,;OPRD为寄存器或内存单元地址,JMPAX,;AXIP,JMPWORDPTR2000H,;DS:2001HDS:2000HIP,JMPWORDPTRSI,;DS:SI+1DS:SIIP,段间直接转移:转移指令后直接给出目的指令处的地址CS:IP。,JMP立即数,JMP2000H:1236H,;立即数为CS:IP的形式,;CS=2000HIP=1236H,JMP语句标号(子程序名),语句标号自动产生段间调用。,段间间接转移:目的地指令处的地址存放在内存单元中,一般用寄存器间接寻址。,JMPDWORDPTRSI,;DS:SI+3SI+2CSDS:SI+1SIIP,DS:SI,CS,IP,设DS:2000H,BX:1256H,SI:528FHTABLE:20A1H,232F7H=80H,232F8H=32H,264E5H=50H,264E6H=24H,JMPBX,;IP=1256H,JMPTABLEBX,;IP=3280H,JMPBXSI,;IP=2450H,条件转移指令:根据标志位来判断程序是否转移。,只能转移到距当前指令-128-127字节的范围内,即一个字节的补码范围;比较两数大小的指令,分有符号数和无符号数两套指令。,127,128,根据5个标志位来判断,SF,ZF,PF,CF,OF共有10个状态,分别是:JS/JNSJZ/JNZJP/JNPJC/JNCJO/JNO为1/0转移。,JSrel;rel为8位补码,在实际应用中一般为指令标号,判断无符号数大小的指令(CF和ZF):JA/JNBEJAE/JNBJB/JNAEJBE/JNA,判断有符号数大小的指令(OF,SF和ZF):JG/JNLEJGE/JNLJL/JNGEJLE/JNG,JCXZrel;如CX中的值为0则转移,判断循环用,下面程序段在什么情况下的执行结果是AL=0,BEGIN:INAL,5FHTESTAL,80HJZA1XORAX,AXJMPSTOPA1:MOVAL,0FFHSTOP:HLT,当5FH口的最高位为1时,当元素结果为0时,不能转向标号L1处的指令是:A)JAEL1B)JGEL1C)JNZL1D)JEL1,设数据区1000H开始的区域中存放着50个字节的符号数,要求找出其中最大的一个数并存放到0FFFH单元。,MOVBX,1000HMOVAL,BXMOVCX,31HL1:INCBXCMPAL,BXJGEL2MOVAL,BXL2:DECCXJNEL1MOVBX,0FFFHMOVBX,ALHLT,子程序调用和返回指令,调用处,子程序首地址,子程序,返回处,返回指令,CALL语句标号或子程序名,同样分段内调用和段间调用,一般为直接调用,段内调用:子程序距调用语句不超过64KB,在同一个代码段CS内,调用时,只改变IP即可。,SS,CS,SP,1.将3010H入栈保护,SP,30H,10H,SP,2.将IP赋值8050H,3.执行子程序,4.执行RET,堆栈内容进入IP,SP还原,5.继续运行主程序,SP,段间调用:子程序距调用语句可以超过64KB,不在同一个代码段,调用时,需要同时改变CS和IP。,调用指令,2000H:1500H,3400H:2460H,SS,20H,00H,SP,15H,00H,原CS,原IP,3400HCS,2460HIP,1500HIP,2000HCS,段间调用步骤:将调用指令后的第一条指令地址的CS入栈;将调用指令后的第一条指令地址的IP入栈;将调用目的地地址的段地址赋值CS;将调用目的地地址的偏移地址赋值IP;执行CS:IP,直至遇到RET指令;将堆栈当前内容赋值IP;将堆栈当前内容赋值CS;执行CS:IP。,调用返回指令:RET,将当前堆栈内容返回到IP(段内调用)或IP,CS(段间调用),具体是段内调用还是段间调用由定义子程序的语句决定的。,RETn:从栈顶弹出返回地址后,SP+nSP,n为偶数,即栈顶位置跳过n个字节。,返回地址后SP,RET4,SP+4SP,4,执行下列语句后,写出结果:,10A3H:2000HXORAL,AL2002HMOVAX,CS2004HMOVSS,AX2006HMOVSP,2F00H2009HMOVDX,2012H200CHPUSHDX200DHCALL2700H2010HADDCX,DX2012HHLT10A3H:2700HPOPCX2701HRET,;AL:0,;AX:10A3H,;SS:10A3H,;SP:2F00H,;DX:2012H,10A3H:2F00H,20H,12H,20H,10H,CX,SP,;未执行,CX:2010H,循环控制指令:可以用判断指令强制跳出循环,也有专用的循环控制指令(3条)。3条指令循环范围均在-128127字节内;循环前必须将
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- TCECS 1366-2023 人民防空工程可靠性鉴定标准
- 北京市通州区2024-2025学年九年级上学期期中质量检测英语试题(含答案)
- 公务员面试嘛面试题及答案
- 公务员面试龙飞面试题及答案
- 公务员面试捷径面试题及答案
- 公务员考试树上猴试题及答案
- 2025广东茂名化州市部分事业单位招聘卫生专业技术人员18人参考题库带答案详解
- 瑶海会计初级题库及答案
- 2025广东广州市南沙区事业单位招聘博士研究生21人参考题库含答案详解(典型题)
- 2026年河北外国语学院单招综合素质考试必刷测试卷汇编
- 光伏电站试运行验收报告
- 出庭培训课件
- 2025至2030年中国水光针行业市场全景调研及投资前景研判报告
- 父母帮忙带娃协议书
- 中小学思政课教师培训
- 模切行业的应用与发展
- 去冰岛旅游景点
- 2025【英文合同】英文版国际租房合同模板
- 南京农业大学2017博士研究生入学考试英语试题
- 土地证补办申请书
- 教育强国建设的时代意蕴与实践路径研究
评论
0/150
提交评论