汇编语言程序设计-80x86的指令系统课件.ppt

上传人(卖家):晟晟文业 文档编号:4504317 上传时间:2022-12-15 格式:PPT 页数:124 大小:652KB
下载 相关 举报
汇编语言程序设计-80x86的指令系统课件.ppt_第1页
第1页 / 共124页
汇编语言程序设计-80x86的指令系统课件.ppt_第2页
第2页 / 共124页
汇编语言程序设计-80x86的指令系统课件.ppt_第3页
第3页 / 共124页
汇编语言程序设计-80x86的指令系统课件.ppt_第4页
第4页 / 共124页
汇编语言程序设计-80x86的指令系统课件.ppt_第5页
第5页 / 共124页
点击查看更多>>
资源描述

1、0Assembly Language Programming汇编语言程序设计汇编语言程序设计1l2.1 指令格式l2.2 寻址方式l2.3 数据传送类指令l2.4 算术运算类指令l2.5 位操作类指令l2.6 串操作类指令l2.7 控制转移类指令l2.8 处理机控制类指令2 计算机是通过执行指令序列来解决问题的。计算机的指令系统就是指该计算机能够执行的全部指令的集合。指令的一般格式:标号:操作符 OPD,OPS ;注释 算术运算和位操作类指令的部分单操作数指令的格式:标号:操作符 OPD ;注释3l2.2.1 立即寻址l2.2.2 寄存器寻址l2.2.3 直接寻址l2.2.4 寄存器间接寻址l

2、2.2.5 变址寻址l2.2.6 基址加变址寻址l2.2.7 跨段问题l2.2.8 与转移地址有关的寻址方式4l立即寻址方式中,指令操作码和操作数都在存储器代码段中。l立即数可以是用8位或16位二进制补码表示的有符号数。l功能:常用于给寄存器赋初值,只能用于源操作数字段,且源操作数与目的操作数长度应一致。5l【例】MOV AX,10l执行后(AX)=?l该例中源操作数为立即寻址方式,立即数为10,存放在指令的下一单元。l图形表示:l执行:10AXl执行后:(AX)=000AH 6l寄存器寻址方式的操作数在指令指明的寄存器中。【例】下列程序执行后,(AX)=?,(BX)=?MOV AX,1234

3、H MOV BX,5678H ADD AX,BX 该程序中MOV指令为数据传送指令操作符,ADD指令为加法指令操作符,三条指令皆为双操作数指令。第一、二条指令AX、BX皆为目的操作数地址,为寄存器寻址方式。第三条指令中,AX为目的操作数地址,BX为源操作数地址。源地址和目的地址皆为寄存器寻址方式。7图形表示:l执行:1234HAX 5678HBX (AX)+(BX)AXl执行后:(AX)=68ACH,(BX)=5678H8l汇编格式:含有变量的地址表达式。段寄存器名:EA。l功能:指令下一字单元的内容是操作数的有效(偏移)地址EA。l图形表示:9l【例】寄存器和存储器内容为:(AX)=1212

4、H,BUF为数据段定义的变量,其偏移地址是2000H,(DS)=3000H,(32000H)=4545H。l执行指令:MOV AX,BUF(MOV AX,2000H)l执行后:(AX)=?l图形表示:l执行:(32000H)AXl执行后:(AX)=4545H10l寄存器间接寻址方式中,寄存器的内容为操作数的偏移地址EA,操作数在存储器中。l汇编格式:Rl功能:操作数存放在存储器,寄存器R存放操作数的偏移地址EA。11偏移地址偏移地址EA计算方法如下:计算方法如下:EA=SISI作间址寄存器。DIDI作间址寄存器。BX BX作间址寄存器。BP BP作间址寄存器。12l执行指令:MOV AX,BP

5、 l执行后:(AX)=?l图形表示如下:l执行:(20030H)AXl执行后:(AX)=1234H【例】寄存器和存储器内容分别为:(【例】寄存器和存储器内容分别为:(AX)=0,(BP)=0030H,(,(SS)=2000H,(,(20030H)=1234H13l变址寻址方式操作数的偏移地址EA为寄存器的内容加位移量,操作数在存储器中,又称为寄存器相对寻址。l汇编格式:XR(X表示位移量,是8位或16位二进制补码表示的有符号数)l功能:操作数存放在存储器,寄存器R的内容加位移量X为操作数的偏移地址EA。l图形表示如下:14l偏移地址EA计算方法如下:15l【例】【例】设执行前:(AX)=004

6、0H,(BX)=0030H,(DS)=2000H,(20036H)=0050H l执行指令:ADD 6BX,AXl执行后:(AX)=?,(BX)=?,(DS)=?,(20036H)=?l图形表示如下:l执行:(执行:(20036H)+(AX)20036Hl执行后:(执行后:(AX)=0040H,(,(BX)=0030H,(,(DS)=2000H,(,(20036H)=0090H。16l基址加变址寻址方式中,操作数的偏移地址EA是指令中基址寄存器内容、变址寄存器内容、位移量三项之和,操作数在存储器中。l汇编格式:X BR+IRl功能:操作数存放在存储器,BR的内容加IR的内容加位移量X是操作数的

7、偏移地址EA。17l操作数偏移地址EA计算方法如下图形表示:18l按前述规定:若选用BP作间址基址寄存器、变址寄存器或基址寄存器,则操作数在堆栈段,操作数的物理地址PA由堆栈段寄存器SS的内容左移4位与偏移地址EA相加后形成;否则,操作数在数据段,操作数的物理地址PA由数据段寄存器DS的内容左移4位与偏移EA相加后形成。该规定为系统默认状态。当要否定默认状态,到非约定段寻找操作数时,必须用跨段前缀指明操作数的段寄存器名。19l汇编格式:段寄存器名:操作数地址。l功能:段寄存器名指明操作数属哪个段。l【例】【例】MOVAX,DS:BP MOVCX,SS:SI l该例中,DS:,SS:均为跨段前缀

8、,此时默认状态无效,操作数的物理地址PA由段寄存器内容左移4位加偏移EA形成。上述2条指令的源操作数物理地址分别为:lPA1 =(DS)左移4位+BPlPA2 =(SS)左移4位+SI20+l这种寻址方式用来确定转移指令及CALL指令的转向地址。l段内直接寻址段内直接寻址:转向的有效地址是当前IP寄存器的内容和指令中指定的8位或16位位移量之和。位移量位移量IP寄存器寄存器EA 这种方式的转向有效地址用相对于当前IP值的位移量来表示,所以它是一种相对寻址方式。21 指令中的位移量是转向的有效地址与当前IP值之差,所以当这一程序段在内存中的不同区域运行时,这种寻址方式的转移指令本身不会发生变化。

9、这种寻址方式适用于条件转移及无条件转移指令,但当它用于条件转移指令时,位移量只允许8位,无条件转移指令在位移量为8位时称为短跳转,位移量为16位时称为近跳转。例:JMP NEAR PTR PROGIA JMP SHORT QUEST 其中,PROGIA和QUEST均为转向的符号地址,在机器指令中,用位移量来表示。在汇编指令中,如果位移量为16位,则在符号地址前加NEAR PTR;如果位移量为8位,则在符号地址前加SHORT。22l段内间接寻址段内间接寻址:转向的有效地址是一个寄存器或是一个存储单元的内容。这个寄存器或存储单元的内容可以用数据寻址方式中除立即数以外的任何一种寻址方式取得,所得到的

10、转向的有效地址用来取代IP寄存器的内容。这种方式以及以下的两种段间寻址方式都不能用于条件转移指令,而JMP和CALL指令可以用四种寻址方式中的任何一种。数据寻址方式数据寻址方式根据数据寻址方根据数据寻址方式计算出式计算出EA值值转向的有效地址转向的有效地址转向的有效地址转向的有效地址或指令存储单元23 例:设(DS)=2000H,(BX)=1256H,位移量=20A1H,(232F7H)=3280H,(264E5H)=2450H.指令:JMP BX 可求得转向地址为BX寄存器的内容,执行该指令后(IP)=1256H 指令:JMP TABLEBX 执行该指令后(IP)=(16d*(DS)+BX+

11、位移量)=(20000+1256+20A1)=(232F7)=3280H24l段间直接寻址段间直接寻址:在指令中直接提供了转向段地址和偏移地址,所以只要用指令中指定的偏移地址取代IP寄存器的内容,用指令中指定的段地址取代CS寄存器的内容就完成了从一个段到别一个段的转移操作。指令的汇编语言格式可表示为:JMP FAR PTR NEXTROUTINT 其中,NEXTROUTINT为转向的符号地址,FAR PTR则是表示段间转移的操作符。偏移地址指令段地址IP寄存器CS寄存器25l段间间接寻址段间间接寻址:用存储器中的两个相继字的内容来取代IP和CS寄存器中的原始内容,以达到段间转移的目的。这里存储

12、单元的地址是由指令指定除立即数方式和寄存器方式以外的任何一种数据寻址方式取得。指令的汇编语言格式可表示为:JMP DWORD PTR INTERS+BX 其中,INTERS+BX说明数据寻址方式为直接寻址方式,DWORD PTR为双字操作符,说明转向地址需要取双字为段间转移指令。数据寻址方式根据数据寻址方式计算出EA值转向的有效地址转向的有效地址指令存储器中两个相继字IPCS26l2.3.1 通用数据传送指令l2.3.2 堆栈操作指令l2.3.3 标志寄存器传送指令l2.3.4 地址传送指令l2.3.5 输入输出指令27l1传送指令MOVl2数据交换指令XCHGl3查表转换指令 XLAT281

13、传送指令MOVl语句格式:MOV OPD,OPSl功能:将源操作数传送入目的地址,源地址内容不变。即(OPS)OPD。l下图描述了MOV指令在传送数据时允许传送的路径及类型。注:CS不允许 做目的 操作数.29lMOV AX,BUF ;BUF是变量,源操作数为直接寻址lMOV BH,DI ;源操作数为寄存器间接寻址lMOV DI,ES:3SI ;源操作数为变址寻址,使用跨段前缀lMOV BP,3BX+SI;源操作数为基址加变址寻址lMOV BUFA,DL;BUFA是一字节变量lMOV BP,AX;使用SS段寄存器lMOV DS:BP,DL;使用跨段前缀lMOV BUF,DS;BUF是个字变量l

14、MOV ES,BUF30l语句格式:XCHG OPD,OPSl功能:将源地址与目的地址中的内容互换。即(OPD)OPS,(OPS)OPD。l【例2.9】寄存器与存储器之间数据交换。lMOVAX,5678H;(AX)=5678HlMOVBX,0FFFFH;(BX)=0FFFFHlXCHGAX,BX;(AX)=0FFFFH,(BX)=5678H31l语句格式:XLAT OPS或XLATl功能:将(BX)为首址,(AL)为位移量的字节存储单元中的数据送AL寄存器。即(BX+AL)AL。32l1进栈指令PUSHl2出栈指令POP33l语句格式:PUSH OPSl功能:将寄存器、段寄存器或存储器中的一个

15、字数据压入堆栈,堆栈指针减2。l即:(SP)-SP (OPS)158SP (SP)-SP (OPS)70SP34l语句格式:POP OPDl功能:将栈顶元素弹出送至某一寄存器、段寄存器(除CS外)或存储器,堆栈指针加2。l从POP指令功能可看出,该指令为PUSH指令的逆过程。l即:(SP)(OPD)70(SP)+SP (SP)(OPD)158(SP)+SP35l1标志送AH指令LAHFl2AH送标志指令SAHFl3标志寄存器进栈指令PUSHFl4标志寄存器出栈指令POPF36l语句格式:LAHFl功能:将标志寄存器的低8位送入AH寄存器。l即(FLAGS)7-0AH。该指令的执行对标志位无影响

16、。l【例】标志寄存器传送。l执行前:(FLAGS)=0485H,(AX)=0FFFFH 执行指令:LAHFl执行后:(FLAGS)=0485H,(AX)=085FFH37l语句格式:SAHFl功能:将AH的内容送入标志寄存器的低8位,高8位不变。即(AH)FLAGS7-0。l从该指令功能可看出,SAHF为LAHF的逆过程。38l语句格式:PUSHFl功能:将标志寄存器的内容压入堆栈。即(FLAGS)(SP)。39l功能:将栈顶内容弹出送入标志寄存器中。即(SP)FLAGS。lPOPF指令与PUSHF指令互为逆过程。l【例】将标志寄存器的单步标志TF置位。lPUSHF;(FLSGS)(SP)lP

17、OP AX;(SP)AXlOR AX,0100H;设置D8=TF=1lPUSH AX;(AX)(SP)lPOPF;(SP)FLAGS,即(AX)FLAGS40l1传送偏移地址指令 LEAl2传送偏移地址及数据段首址指令LDSl3传送偏移地址及附加数据段指令LES41l语句格式:LEA OPD,OPSl功能:主存按源地址的寻址方式计算偏移地址,将偏移地址送入指定寄存器。l【例2.15】主存偏移地址的获取。lMOV BX,0100H;(BX)=0100HlMOV SI,0210H;(SI)=0210HlLEA BX,1234BX+SI;(BX)=1544H42l语句格式:LDS OPD,OPSl功

18、能:将主存中指定字单元数据送入指定存储器,下一字单元数据送DS寄存器。l即(OPS)OPD,(OPS+2)DS。43l语句格式:LES OPD,OPSl功能:将主存某字单元内容送指定寄存器。即(OPS)OPD,(OPS+2)ES。44l1输入指令INl2输出指令OUT45l输入指令用来从指定的外设寄存器取信息送入累加器。它有四种形式:(1)语句格式:INAL,PORT 功能:(PORT)AL (2)语句格式:INAX,PORT 功能:(PORT)AX (3)语句格式:INAL,DX 功能:(DX)AL (4)语句格式:INAX,DX 功能:(DX)AL46l输出指令用来把累加器的内容送往指定的

19、外设存储器,它有四种形式:(1)语句格式:OUTPORT,AL 功能:(AL)PORT (2)语句格式:OUTPORT,AX 功能:(AX)PORT (3)语句格式:OUTDX,AL 功能:(AL)DX (4)语句格式:OUTDX,AX 功能:(AX)DX47l在80 x86中,所有I/0端口与CPU之间的通信都由IN和OUT指令来完成。其中IN完成从I/0到CPU的信息传送,而OUT则完成从CPU到I/0的信息传送。CPU只能用累加器(AL或AX)接收或发送信息。外部设备最多可有65536个I/0端口,端口号为0000H-FFFFH。其中前256个端口可以直接在指令中指定,当端口大于等256

20、时,必须先把端口号放到DX寄存器中,然后再用IN或OUT来传送信息。l例:IN AX,28H MOV DA,AX 这两条指令把端口28的内容经过AX传送到存储单元DA中。l例:OUT 5,AL 这条指令从AL寄存器输出一个字节到端口5.48l2.4.1 加法指令l2.4.2 减运算指令l2.4.3 乘运算指令l2.4.4 除运算指令l2.4.5 符号扩展指令 l2.4.6 十进制调整指令49l1加1指令 INCl2加指令ADDl3带进位加指令ADC501加1指令 INCl语句格式:INC OPDl功能:将目的操作数加1,结果送目的地址。即(OPD)+1OPD。lINC指令是一个单操作数指令,操

21、作数可以是寄存器或存储器操作数。如:INC BX,即(BX)+1BX。l加1指令可用于对计数器和地址指针进行调整。512加指令ADDl语句格式:ADD OPD,OPSl功能:将目的操作数与源操作数相加,结果存入目的地址中,源地址的内容不改变。即(OPD)+(OPS)OPD。3带进位加指令ADCl语句格式:ADC OPD,OPSl功能:将目的操作数加源操作数再加低位进位,结果送目的地址。即(OPD)+(OPS)+CF OPD。52【例】无符号双字加法运算。MOV AX,4652H ;(AX)=4652H ADD AX,0F0F0H;(AX)=3742H,CF=1 MOV DX,0234H;(DX

22、)=0234H ADC DX,0F0F0H;(DX)=0F325H,CF=053l1减1指令DECl2减指令SUBl3带借位减指令 SBBl4求补指令NEGl5比较指令 CMP541减1指令DECl语句格式:DEC OPD l功能:将目的操作数减1,结果送目的地址。即(OPD)1OPD。lDEC指令是一个单操作数指令,操作数可以是寄存器或存储器操作数。如:DEC CX。即(CX)1CX。l减1指令DEC也一般用于对计数器和地址指针的调整。552减指令SUBl语句格式:SUB OPD,OPSl功能:目的操作数减源操作数,结果存于目的地址,源地址内容不变。即(OPD)(OPS)OPDl【例】减法运

23、算。MOV AX,5678H;(AX)=5678H SUB AX,1234H;(AX)=4444H MOV BX,3354H;(BX)=3354H SUB BX,3340H;(BX)=0014H563带借位减指令 SBBl语句格式:SBB OPD,OPSl功能:目的操作数减源操作数再减低位借位CF,结果送目的地址。即(OPD)(OPS)CF OPD4求补指令NEGl语句格式:NEG OPDl功能:将目的操作数的每一位求反(包括符号位)后加1,结果送目的地址。即 0FFFF-(OPD)+1OPD。57【例】求补运算。MOV AX,0FF64H;1111 1111 0110 0100 NEG AL

24、;(AX)=0FF9CH(1001 1100)SUB AL,9DH;(AX)=0FFFFH CF=1 NEG AX;(AX)=0001H DEC AL;(AX)=0000H NEG AX;(AX)=0000H585比较指令 CMPl语句格式:CMP OPD,OPSl功能:目的操作数减源操作数,结果只影响标志位,不送入目的地址。即(OPD)(OPS)。l【例】比较AL的内容数值大小。CMP AL,50;(AL)50 JBBELOW;(AL)=50,(AL)50AL INCAH;(AH)+1AHBELOW:59l1无符号数乘法指令MULl2有符号乘指令IMUL601无符号数乘法指令MULl语句格式

25、:MUL OPSl功能:若是字节数据相乘,(AL)与OPS相乘得到字数据存入AX中;若是字数据相乘,则(AX)与OPS相乘得到双字数据,高字存入DX、低字存入AX中。即字节乘法:(AL)*(OPS)AX,字乘法:(AX)*(OPS)DX,AX l【例】无符号数0A3H与11H相乘。MOVAL,0A3H;(AL)=0A3H MOVBL,11H;(BL)=11H MULBL ;(AX)=0AD3H612有符号乘指令IMUL语句l格式:IMUL OPSl功能:字节乘法:(AL)*(OPS)AX,字乘法:(AX)*(OPS)DX、AX。lIMUL指令除计算对象是带符号二进制数外,其他都与MUL一样,但

26、计算结果不同。l【例】有符号数0B4H与11H相乘。MOVAL,0B4H;(AL)=B4H MOVBL,11H;(BL)=11H IMULBL ;(AX)=0FAF4H62l1无符号除指令DIVl2有符号除指令IDIV631无符号除指令DIVl语句格式:DIV OPSl功能:字节除法:(AX)/(OPS)AL(商)、AH(余数)字除法:(DX、AX)/(OPS)AX(商)、DX(余数)l【例】写出实现无符号数0400H/0B4H运算的程序段。MOVAX,0400H;(AX)=0400H MOVBL,0B4H;(BL)=0B4H DIVBL ;商(AL)=05H,余数(AH)=7CH 642有符

27、号除指令IDIVl语句格式:IDIV OPSl功能:字节除法:(AX)/(OPS)AL(商),AH(余数)字除法:(DX,AX)/(OPS)AX(商),DX(余数)l除法指令DIV和IDIV虽然对标志的影响未定义,但可产生溢出。l【例】写出实现有符号数0400H/0B4H运算的程序段。MOVAX,0400H;(AX)=0400H MOVBX,0B4H;(BX)=0B4H IDIVBX ;(AL)=0F3H,(AH)=24H65l1字节转换成字指令CBWl2将字转换成双字指令CWD661字节转换成字指令CBWl语句格式:CBWl功能:将AL中的符号位数据扩展至AH。【例】将字节数据扩展成字数据。

28、MOVAL,0A5H;(AL)=0A5H CBW ;(AX)=0FFA5H ADDAL,70H;(AL)=25H CBW ;(AX)=0025H672将字转换成双字指令CWDl语句格式:CWDl功能:将AX中的符号位数据扩展至DX。l【例】将字数据扩展成双字数据。MOVDX,0;(DX)=0 MOVAX,0FFABH;(AX)=0FFABH CWD;(DX)=0FFFFH (AX)=0FFABH68l1压缩BCD码调整指令l2非压缩BCD码调整指令69(1)加法的十进制调整指令DAA语句l格式:DAAl功能:如果AL寄存器中低4位大于9或辅助进位(AF)=1,则(AL)=(AL)+6且(AF)

29、=1;如果(AL)=0A0H或(CF)=1,则(AL)=(AL)+60H且(CF)=1。同时,SF、ZF、PF均有影响。l【例】压缩BCD码的加法运算。MOV AL,68H;(AL)=68H,表示压缩BCD码68 MOV BL,28H;(BL)=28H,表示压缩BCD码28 ADD AL,BL;二进制加法:(AL)=68H+28H=90H DAA ;十进制调整:(AL)=96Hl ;实现压缩BCD码加法:68+28=9670l(2)减法的十进制调整指令DAS语句l格式:DASl功能:如果(AF)=1或AL寄存器中低4位大于9,则(AL)=(AL)6且(AF)=1;如果(AL)=0A0H或(CF

30、)=1,则(AL)=(AL)60H且(CF)=1。同时SF、ZF、PF均受影响。l【例】压缩BCD码的减法运算。MOVAL,67H;(AL)=67H,表示压缩BCD码67 MOVBL,28H;(BL)=28H,表示压缩BCD码28 SUBAL,BL;(AL)=67H-28H=3FH DAS ;十进制调整:(AL)=39H ;实现压缩BCD码减法:6728=3971(1)加法的非压缩BCD码调整指令AAAl语句格式:AAA l功能:如果AL的低4位大于9或(AF)=1,则:(AL)=(AL)+6 (AH)=(AH)+1 (AF)=(CF)=1 且AL高4位清零。否则:(CF)=(AF)=0 AL

31、高4位清零。72(2)减法的非压缩BCD码调整指令AASl语句格式:AAS l功能:如果AL的低4位大于9或(AF)=1,则:(AL)=(AL)6 (AH)=(AH)1 (AF)=(CF)=1 AL高4位清零。否则:(CF)=(AF)=0 AL高4位清零。其他标志位OF、PF、SF、ZF不确定。73(3)乘法的非压缩BCD码调整指令AAMl语句格式:AAM l功能:被调整的乘积在AX中,对AL按10取模,则:(AL)0AHAH(商):AL(余数)其中AH为商,AL为余数,标志位AF、CF、OF、PF、SF、ZF受影响。74(4)除法的非压缩BCD码调整指令AADl语句格式:AAD l功能:除法

32、运算前,先调整被除数AX内容,使:(AL)=(AL)+(AH)*0AH (AH)=0 即把非压缩型十进制数变成二进制数。75l2.5.1 逻辑运算指令l2.5.2 移位指令移位指令 76l1求反指令NOTl2逻辑乘指令ANDl3测试指令TESTl4逻辑加指令ORl5按位加指令XOR771求反指令NOTl语句格式:NOT OPDl功能:将目的地址中的内容逐位取反后送入目的地址。即(OPD)OPD l【例】逻辑非运算。MOV AX,878AH;(AX)=878AH ;1000 0111 1000 1010 B NOT AX,;(AX)=7875H782逻辑乘指令ANDl语句格式:AND OPD,O

33、PSl功能:将目的操作数和源操作数进行逻辑乘运算,结果存目的地址。即(OPD)(OPS)OPD。l该指令用于清除目的操作数中与源操作数置0的对应位。说明:逻辑乘的运算法则为:11=1,10=0,01=0,00=0l【例】将AL中第3位和第7位清零。MOVAL,0FFH ANDAL,77H;0111 0111 B793测试指令TESTl语句格式:TEST OPD,OPSl功能:源地址和目的地址的内容执行按位的逻辑乘运算,结果不送入目的地址。即(OPD)(OPS)。l【例】测试AX中的第12位是否为0,不为0则转L。TESTAX,1000H;0001 0000 0000 0000B JNE L80

34、4逻辑加指令ORl语句格式:OR OPD,OPSl功能:将目的操作数和源操作数进行逻辑加运算,结果存目的地址。即(OPD)(OPS)OPD。l说明:逻辑加的运算法则为:11=1,10=1,01=1,00=0。l【例】将AL寄存器中第3位和第7位置1。MOVAL,0 OR AL,88H815按位加指令XORl语句格式:XOR OPD,OPSl功能:目的操作数与源操作数做按位加运算,结果送入目的地址。即(OPD)(OPS)OPD。l说明:按位加的运算法则为;11=0,10=1,01=1,00=0。l【例】按位加运算。MOVAL,45H;(AL)=45H XORAL,31H;(AL)=74H82l移

35、位指令包括算术移位指令、逻辑移位指令和循环移位指令,分别进行左移和右移操作。这些指令均有统一的语句格式:l 标号:操作符 OPD,1 或 标号:操作符 OPD,CLl其功能为将目的操作数的所有位按操作符规定的方式移动1位或按寄存器CL规定的次数(0255)移动,结果送入目的地址。目的操作数是8位(或16位)的寄存器数据或存储器数据。831算术左移和逻辑左移指令SAL(SHL)l语句格式:SAL OPD,1 或 SHL OPD,1 SAL OPD,CL 或 SHL OPD,CLl功能:将(OPD)向左移动CL指定的次数,最低位补入相应的,CF的内容为最后移入位的值。2算术右移指令SARl语句格式

36、:SAR OPD,1或SAR OPD,CLl功能:将(OPD)向右移动CL指定的次数且最高位保持不变;CF的内容为最后移入位的值。SAL/SHLSAL/SHLSARSAR84l【例】算术右移运算。MOVBH,0F4H;(BH)=0F4H,1111 0100B MOVCL,2;(CL)=2 SARBH,CL;(BH)=0FDH,(CF)=0l该例语句“SARBH,CL”实际上完成了(BH)BH的运算,所以,用SAR指令可以实现对有符号数除2n的运算(n为移位次数)。85l3逻辑右移指令SHRl语句格式:SHR OPD,1或SHR OPD,CLl功能:将(OPD)向右移动CL规定的次数,最高位补入

37、相应个数的,CF的内容为最后移入位的值。864循环左移指令ROLl语句格式:ROL OPD,1或ROL LPD,CLl功能:将目的操作数的最高位与最低位连成一个环,将环中的所有位一起向左移动CL规定的次数。CF的内容为最后移入位的值。875循环右移指令RORl语句格式:ROR OPD,1或ROR OPD,CLl功能:将目的操作数的最高位与最低位连成一个环,将环中的所有位一起向右移动CL规定的次数,CF的内容为最后移入位的值。CF70886带进位的循环左移指令RCLl语句格式:RCL OPD,1 或 RCL OPD,CLl功能:将目的操作数连同CF标志一起向左循环移动CL规定的次数。897带进位

38、的循环右移指令RCRl语句格式:RCR OPD,1 或 RCR OD,CLl功能:将目的操作数连同CF标志一起向右循环移动所规定的次数。90l串操作指令:数据传送类指令每次只能传送一个数据,若要传送大批数据就需要重复编程,这样就浪费了大量的时间和空间。为此8086提供了一组处理主存中连续存放数据串的指令,这就是串操作指令。91l MOVS 串传送l CMPS 串比较l SCAS 串扫描l LODS 从串取l STOS 存入串l INS 串输入l OUTS 串输出与上述基本指令配使用的前缀有:l REP 重复l REPE/REPZ 相等/为零则重复l REPNE/REPNZ 不相等/不为零则重复

39、921重复前缀指令REP、REPZ、REPNZ(1)REP:REP前缀用在MOVS、STOS、LODS、INS和OUTS指令前。格式:REP string primitive 其中string primitive可为MOVS,LODS等指令。功能:(1)如果(CX)=0,则退出REP,否则往下执行。(2)(CX)=(CX)1 (3)执行其后的串指令 (4)重复(1)-(3)93(2)REPZ/REPE:该指令一般用在CMPS、SCAS指令前。格式:REPE(或REPZ)string primitive 其中string primitive可为CMPS或SCAS指令。功能:(1)如果(CX)=0

40、或ZF=0时退出,否则往下执行。(2)(CX)=(CX)1 (3)执行其后的串指令 (4)重复(1)-(3)与REP相比,除满足(CX)=0的条件可结束操作外,还增加了ZF=0的条件,也就是说,如果两数相等就可继续比较,如果遇到了两数不相等可提前结束操作。94(3)REPNZ/REPNE:该指令一般用在CMPS、SCAS指令前。格式:REPE(或REPZ)string primitive 其中string primitive可为CMPS或SCAS指令。功能:(1)如果(CX)=0或ZF=1时退出,否则往下执行。(2)(CX)=(CX)1 (3)执行其后的串指令 (4)重复(1)-(3)与REP

41、相比,除满足(CX)=0的条件可结束操作外,还增加了ZF=1的条件,也就是说,如果两数不相等就可继续比较,如果遇到了两数相等可提前结束操作。952传送指令MOVSl语句格式:MOVS DST,SRC MOVSB字节串传送 MOVSW字串传送l其中后两种明确注明是传送字节还是字,第一种格式则应在操作数中表明是字节还是字的操作.例如:MOVS ES:BYTE PTRDI,DS:SIl功能:将以SI为指针的源串中的一个字节(或字)存储单元中的数据传送至以DI为指针的目的地址中去,并自动修改指针,使之指向下一个字节(或字)存储单元。即:(DS:SI)ES:DI。当DF=0时,(SI)和(DI)增量。当

42、DF=1时,(SI)和(DI)减量。96 当操作为字节操作时,(SI)、(DI)增减量为1,当操作为字操作时,(SI)、(DI)增减量为2。当该指令与前缀REP联用时,则可将数据段中的整串数据传送到附加段中去,这里源串必须在数据段中,目的串必须在附加段中,但源串允许使用段跨越前缀来修改。在与REP联用时,还必须先把数据串的长度值送到计数寄存器中,以便控制指令结束。因此在执行该指令前,必做如下准备工作:I.把存放在数据段中的源串首地址(如反向传送则应是末地址)放入源变址寄存器中;II.把将要存放数据串的附加段中的目的串首址(反向传送时为末地址)放入目的变址寄存器;.把数据串长度放入计数寄存器;.

43、建立方向标志。97例:在数据段中有一个字符串,其长度为17,要求把它们转送到附加段中的一个缓冲区中。data segment mess1 db personal computer$data endsextra segment mess2 db 17 dup(?)extra endscode segment assume cs:code,ds:data,es:extra mov ax,data mov ds,ax mov ax,extramov es,ax lea si,mess1 lea di,mess2 mov cx,17 cld rep movsb code ends983串比较指令CMP

44、S l语句格式:CMPS SRC,DST 需指定操作类型字 CMPSB字节串比较 CMPSW字串比较l功能:将SI所指的源串中的一个字节(或字)存储单元中的数据与DI所指的目的串中的一个字节(或字)存储单元中的数据相减,并根据相减的结果设置标志,但结果并不保存。即:(SI)(DI)。修改串指针,使之指向串中的下一个元素。当DF=0时,(SI)和(DI)增量。当DF=1时,(SI)和(DI)减量。当操作为字节操作时,(SI)、(DI)增减量为1,当操作为字操作时,(SI)、(DI)增减量为2。994串搜索指令SCASl语句格式:SCAS DST SCASB字节串搜索 SCASW字串搜索l功能:A

45、L(字节)或AX(字)中的内容与DI所指的目的串中的一个字节(或字)存储单元中的数据相减,根据相减结果设置标志位,结果不保存,即:字节操作:(AL)(DI),字操作:(AX)(DI)。修改指针使之指向串中的下一个元素。当DF=0时,(DI)增量。当DF=1时,(DI)减量。当操作为字节操作时,(SI)、(DI)增减量为1,当操作为字操作时,(SI)、(DI)增减量为2。100 以上以上3 3,4 4两条串处理指令和两条串处理指令和REPEREPE或或REPNEREPNE相结合,可以用来比较两个数据串,或从一相结合,可以用来比较两个数据串,或从一个字符串中查找一个指定的字符。个字符串中查找一个指

46、定的字符。当要求从一个字符串中查找一个指定的当要求从一个字符串中查找一个指定的字符,可用指令字符,可用指令REPNZ SCASBREPNZ SCASB。当要求比较两个字符串,找出它们不相当要求比较两个字符串,找出它们不相区配的位置,则可以使用指令区配的位置,则可以使用指令REPE CMPSBREPE CMPSB。1015从源串中取数指令LODSl语句格式:LODS SRC LODSB从字节串中取数 LODSW从字串中取数l功能:将SI所指的源串中的一个字节(或字)存储单元中的数据取出来送入AL(或AX)中。即:字节操作:(SI)AL,字操作:(SI)AX。修改指针SI,使它指向串中的下一个元素

47、。当DF=0时,(SI)增量。当DF=1时,(SI)减量。当操作为字节操作时,(SI)、(DI)增减量为1,当操作为字操作时,(SI)、(DI)增减量为2。1026往目的串中存数指令STOSl语句格式:STOS DST STOSB往字节串中存数 STOSW往字串中存数l功能:将AL或AX中的数据送入DI所指的目的串中的字节(或字)存储单元中。即:字节操作:(AL)DI,字操作:(AX)DI。修改指针DI,使之指向串中的下一个元素。当DF=0时,(DI)增量)。当DF=1时,(DI)减量。当操作为字节操作时,(SI)、(DI)增减量为1,当操作为字操作时,(SI)、(DI)增减量为2。103 对

48、串处理指令,需注意:对串处理指令,需注意:(1)(1)串处理指令在不同的段之间传送或比较数据,串处理指令在不同的段之间传送或比较数据,如果需要在同一段内处理数据,可以在如果需要在同一段内处理数据,可以在DSDS和和ESES中设中设置同样的地址,或者在源操作数字段使用段跨越前置同样的地址,或者在源操作数字段使用段跨越前缀来实现。例如:缀来实现。例如:MOVS DIMOVS DI,ESES:SISI (2)(2)当使用重复前缀时,当使用重复前缀时,(CX)(CX)是每次减是每次减1 1的,因此的,因此对于字指令来说,预置时设置的值应该是字的个数对于字指令来说,预置时设置的值应该是字的个数而不是字节

49、数。而不是字节数。104l2.7.1 条件转移指令l2.7.2 无条件转移指令l2.7.3 循环指令循环指令 l2.7.4 子程序调用指令l2.7.5 中断指令1051简单条件转移指令2无符号数条件转移指令3.有符号数条件转移指令 它们都有通用的语句格式和功能。l语句格式:标号:操作符 短标号l功能:如果条件满足,则(IP)位移量IP。106107l【例】比较无符号数大小,将较大的数存放AX寄存器。CMPAX,BX ;(AX)(BX)JNBNEXT ;若AX=BX,转移到NEXT XCHGAX,BX ;若AX=BX,转移到NEXT XCHGAX,BX;若AX(IP),(EA+2)-CS(EA)

50、-(IP),(EA+2)-CS1101循环指令LOOP2相等/为零循环指令LOOPE3不相等/不为零循环指令LOOPNE 4CX为零转移指令JCXZ1111循环指令LOOPl语句格式:LOOP 短标号l功能:(CX)1 0,则程序转移(循环);否则,顺序执行。l说明:使用LOOP指令可代替两条指令:DEC CX JNE 短标号2相等/为零循环指令LOOPEl语句格式:LOOPE 短标号 LOOPZ 短标号l功能:(CX)1 0且ZF=1,则程序转移(循环);否则,顺序执行。1123不相等/不为零循环指令LOOPNEl语句格式:LOOPNE 短标号 LOOPNZ 短标号l功能:(CX)10且ZF

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(汇编语言程序设计-80x86的指令系统课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|