【教学课件】第三章IBMPC机的指令系统和寻址方式.ppt

上传人:小飞机 文档编号:5660639 上传时间:2023-08-07 格式:PPT 页数:98 大小:264KB
返回 下载 相关 举报
【教学课件】第三章IBMPC机的指令系统和寻址方式.ppt_第1页
第1页 / 共98页
【教学课件】第三章IBMPC机的指令系统和寻址方式.ppt_第2页
第2页 / 共98页
【教学课件】第三章IBMPC机的指令系统和寻址方式.ppt_第3页
第3页 / 共98页
【教学课件】第三章IBMPC机的指令系统和寻址方式.ppt_第4页
第4页 / 共98页
【教学课件】第三章IBMPC机的指令系统和寻址方式.ppt_第5页
第5页 / 共98页
点击查看更多>>
资源描述

《【教学课件】第三章IBMPC机的指令系统和寻址方式.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第三章IBMPC机的指令系统和寻址方式.ppt(98页珍藏版)》请在三一办公上搜索。

1、1,第三章 IBM PC机的指令系统和寻址方式,指令系统:一组指令集(page 388),指令:,一地址指令:INC AX DEC CX二地址指令:MOV AX,2000H ADD AH,BL,寻址方式:取得操作数地址的方式,2,3.1 IBM PC机的寻址方式,与数据有关的寻址方式与转移地址有关的寻址方式,3.1.1 与数据有关的寻址方式 以 MOV 指令为例,1.立即寻址方式*操作数在指令中给出 MOV AL,5 MOV AX,3064H*只能用于SRC字段*SRC 和 DST的字长一致 MOV AH,3064H,3,2.寄存器寻址方式*操作数在指定的寄存器中 MOV AX,BX MOV

2、AL,BH*字节寄存器只有 AH AL BH BL CH CL DH DL*SRC 和 DST的字长一致 MOV AH,BX*CS不能用MOV指令改变 MOV CS,AX,4,3.直接寻址方式*有效地址EA由指令直接给出 有效地址EA:操作数的偏移地址 物理地址PA=16d(DS)+EA 例:MOV AX,2000H EA=2000H,假设(DS)=3000H,那么(PA)=32000H 例:操作数地址可由变量(符号地址)表示 MOV AH,VALUE(VALUE DB 10),50,30,32000,AH AL,30,50,(AX)=3050H,5,3.直接寻址方式*隐含的段为数据段 DS*

3、可使用段跨越前缀 MOV AX,ES:2000H*使用变量时,要注意变量的属性 VALUE DB 10 MOV AX,VALUE MOV AX,WORD PTR VALUE*适于处理单个变量,6,4.寄存器间接寻址方式*EA在基址寄存器(BX/BP)或变址寄存器(SI/DI)中 BX,SI,DI(DS)物理地址=16d(DS)+BP(SS)物理地址=16d(SS)+(BP)MOV AX,BX PA=16d(DS)+(BX)MOV AX,ES:BX PA=16d(ES)+(BX)MOV AX,BP PA=16d(SS)+(BP),(BX)(SI)(DI),7,4.寄存器间接寻址方式*不允许使用A

4、X、CX、DX存放EA MOV AX,CX*SRC 和 DST的字长一致 MOV DL,BX;BX指示一个字节单元 MOV DX,BX;BX指示一个字单元*适于数组、字符串、表格的处理,8,5.寄存器相对寻址方式*例:MOV AX,COUNTSI 或 MOV AX,COUNT+SI 假设(DS)=3000H,(SI)=2000H,COUNT=3000H 那么 PA=35000H 假设(35000H)=1234H,那么(AX)=1234H*适于数组、字符串、表格的处理,有效地址=,(BX)(BP)(SI)(DI),+,8位16位,位移量,9,6.基址变址寻址方式*MOV AX,BXDI 或 MO

5、V AX,BX+DI MOV AX,ES:BXSI*适于数组、字符串、表格的处理*必须是一个基址寄存器和一个变址寄存器的组合 MOV AX,BXBP MOV AX,SIDI,有效地址=,(BX)(BP),+,(SI)(DI),10,7.相对基址变址寻址方式*MOV AX,MASKBXSI 或 MOV AX,MASKBX+SI 或 MOV AX,MASK+BX+SI*适于堆栈处理和数组处理,有效地址=,(BX)(BP),+,(SI)(DI),+,8位16位,位移量,11,例:编写一段显示字符串STRING的程序 DATA SEGMENT STRING DB HAPPY NEW YEAR!,0DH

6、,0AH,$COUNT DW 17 DATA ENDS(1)直接寻址 mov dl,string;mov dl,H mov ah,2 int 21h;显示字符H mov dl,string+1;mov dl,A mov ah,2 int 21h;显示字符A.,12,(2)寄存器间接寻址 mov cx,count;mov cx,17 mov bx,offset string;string的偏址 bx next:mov dl,bx mov ah,2 int 21h;显示一个字符 inc bx loop next;循环指令,(3)寄存器相对寻址 mov cx,count;mov cx,17 mov

7、si,0 next:mov dl,stringsi;mov dl,string+si mov ah,2 int 21h;显示一个字符 inc si loop next;循环指令,13,(4)基址变址寻址 mov cx,count;mov cx,17 mov bx,offset string;string的偏址 bx mov si,0 next:mov dl,bxsi;mov dl,bx+si mov ah,2 int 21h;显示一个字符 inc si loop next;循环指令(5)DOS显示字符串功能 mov dx,offset string;string的偏址 dx;lea dx,st

8、ring mov ah,9 int 21h;显示一串字符,14,3.1.2 与转移地址有关的寻址方式,用来确定 转移指令 及 CALL指令 的转向地址。,段内寻址段间寻址,段内直接寻址段内间接寻址,段间直接寻址段间间接寻址,以 转移(条件转移/无条件转移)指令 为例,段内:转移指令与转向的目标指令在同一代码段中,(CS)不变。段间:转移指令与转向的目标指令在两个代码段中,(CS)变化。,15,1.段内直接寻址 转向的有效地址EA=物理地址=16d(CS)+(IP)新 例:JMP AGAIN(IP)当前 MOV BX,AX AGAIN:例:JMP NEAR PTR NEXT 近转移-32768+

9、32767 JMP SHORT NEXT 短转移-128+127,(IP)当前+位移量(8bit/16bit),(IP)新,(IP)新,16,2.段内间接寻址 转向的有效地址EA是一个寄存器或存储单元的内容。(可用除立即数以外的任何一种数据寻址方式得到)物理地址=16d(CS)+EA 例:(BX)=1256H(SI)=528EH TABLE=20A2H(DS)=2000H(232F8H)=3280H(264E4H)=2450H JMP BX;(IP)=1256H JMP TABLEBX JMP WORD PTR TABLEBX;(IP)=3280H JMP BXSI JMP WORD PTR

10、BXSI;(IP)=2450H,17,3.段间直接寻址 用指令中提供的转向段地址和偏移地址取代CS和IP。物理地址=16d(CS)+(IP)例:,code1 segment jmp far ptr next code1 ends,code2 segment next:.code2 ends,18,4.段间间接寻址 用存储器中的两个相继字的内容取代CS和IP。(存储单元的地址可用除立即数和寄存器以外的任何一种 数据寻址方式得到)物理地址=16d(CS)+(IP)例:JMP DWORD PTR INTERS+BX,19,3.3 IBM PC机的指令系统,数据传送指令 算术指令 逻辑指令 串处理指令

11、 控制转移指令 处理机控制指令,注意:1.指令的基本功能 2.指令的执行对标志位的影响 3.对寻址方式或寄存器使用的限制和隐含使用的情况,20,数据传送指令 通用数据传送指令 累加器专用传送指令 地址传送指令 标志寄存器传送指令,21,通用数据传送指令 传送指令:MOV DST,SRC 执行操作:(DST)(SRC)注意:*DST不能是CS*不影响标志位*DST、SRC不同时为段寄存器 MOV DS,ES*立即数不能直接送段寄存器 MOV DS,2000H,22,例:MOV AX,DATA_SEG MOV DS,AX例:MOV AL,E;MOV AL,45H例:MOV BX,OFFSET TA

12、BLE例:MOV AX,YBPSI,返回,23,进栈指令:PUSH SRC 执行操作:(SP)(SP)-2(SP)+1,(SP)(SRC)出栈指令:POP DST 执行操作:(DST)(SP)+1,(SP)(SP)(SP)+2堆栈:“先进后出”的存储区,存在于堆栈段中,SP在任何 时候都指向栈顶。注意:*堆栈操作必须以字为单位。*不影响标志位*不能用立即寻址方式 PUSH 1234H*DST不能是CS POP CS,24,例:假设(AX)=2107 H,执行 PUSH AX,(SP),低地址,高地址,(SP),07H 21H,低地址,高地址,进栈方向,*,*,*,*,PUSH AX 执行前,P

13、USH AX 执行后,25,例:POP BX,(SP),低地址,高地址,(SP),07H 21H,低地址,高地址,出栈方向,07H21H,(BX)=2107H,POP BX 执行前,POP BX 执行后,*,*,*,*,26,例:PUSH DS SUB AX,AX PUSH AX RET例:PUSH AXPUSH BX POP BXPOP AX,;其间用到AX和BX寄存器,27,交换指令:XCHG OPR1,OPR2 执行操作:(OPR1)(OPR2)注意:*不影响标志位*不允许使用段寄存器 例:XCHG BX,BP+SI XCHG AL,BH,28,累加器专用传送指令(只限于使用AX或AL)

14、输入指令(I/O CPU)长格式:IN AL,PORT(字节)IN AX,PORT(字)执行操作:(AL)(PORT)(字节)(AX)(PORT+1,PORT)(字)短格式:IN AL,DX(字节)IN AX,DX(字)执行操作:(AL)(DX)(字节)(AX)(DX)+1,(DX)(字),29,输出指令(CPU I/O)长格式:OUT PORT,AL(字节)OUT PORT,AX(字)执行操作:(PORT)(AL)(字节)(PORT+1,PORT)(AX)(字)短格式:OUT DX,AL(字节)OUT DX,AX(字)执行操作:(DX)(AL)(字节)(DX)+1,(DX)(AX)(字),3

15、0,注意:*不影响标志位*前256个端口号00HFFH可直接在指令中指定(长格式)*如果端口号 256,端口号 DX(短格式)例:IN AX,28H;MOV DX,28H;IN AX,DX MOV DATA_WORD,AX例:MOV DX,3FCH 例:OUT 5,AL IN AX,DX例:测试某状态寄存器(端口号27H)的第2位是否为1 IN AL,27H TEST AL,00000100B JNZ ERROR;若第2位为1,转到ERROR处理,31,例 8.1Sound程序(page 204),mov dx,100 in al,61h and al,11111100bsound:xor a

16、l,2 out 61h,al mov cx,140hwait1:loop wait1 dec dx jne sound,设备控制寄存器,端口61H,1/0 0,控制其它外部设备,与门,放大器,2号定时器门控,1 0,32,换码指令:XLAT 或XLAT OPR执行操作:(AL)(BX)+(AL)例:MOV BX,OFFSET TABLE;(BX)=0040H MOV AL,3 XLAT TABLE 指令执行后(AL)=33H注意:*不影响标志位*字节表格(长度不超过256)首地址(BX)*需转换代码(AL),33,地址传送指令 有效地址送寄存器指令:LEA REG,SRC 执行操作:(REG)

17、SRC 指针送寄存器和DS指令:LDS REG,SRC 执行操作:(REG)(SRC)(DS)(SRC+2)4个相继字节 寄存器(通常是SI)、DS 指针送寄存器和ES指令:LES REG,SRC 执行操作:(REG)(SRC)(ES)(SRC+2)4个相继字节 寄存器(通常是DI)、ES,34,例:LEA BX,BX+SI+0F62H 例:LDS SI,10H例:LES DI,BX例:,(DS):1000H 40 H,00 H,00 H,30 H,TABLE,MOV BX,TABLE;(BX)=0040HMOV BX,OFFSET TABLE;(BX)=1000HLEA BX,TABLE;(

18、BX)=1000HLDS BX,TABLE;(BX)=0040H;(DS)=3000HLES BX,TABLE;(BX)=0040H;(ES)=3000H,注意:*不影响标志位*REG不能是段寄存器*SRC必须为存储器寻址方式,35,标志寄存器传送指令 标志送AH指令:LAHF 执行操作:(AH)(PSW的低字节)AH送标志寄存器指令:SAHF 执行操作:(PSW的低字节)(AH)标志进栈指令:PUSHF 执行操作:(SP)(SP)-2(SP)+1,(SP)(PSW)标志出栈指令:POPF 执行操作:(PSW)(SP)+1,(SP)(SP)(SP)+2*影响标志位,36,3.3.2 算术指令

19、加法指令 减法指令 乘法指令 除法指令 十进制调整指令,37,加法指令 加法指令:ADD DST,SRC 执行操作:(DST)(SRC)+(DST)带进位加法指令:ADC DST,SRC 执行操作:(DST)(SRC)+(DST)+CF 加1指令:INC OPR 执行操作:(OPR)(OPR)+1,注意:*除INC指令不影响CF标志外,均对条件标志位 有影响。,38,加法指令对条件标志位(CF/OF/ZF/SF)的影响:,CF位表示无符号数相加的溢出。OF位表示带符号数相加的溢出。,39,n=8bit 带符号数(-128127)无符号数(0255),40,例:双精度数的加法(DX)=0002H

20、(AX)=0F365H(BX)=0005H(CX)=0E024H 指令序列(1)ADD AX,CX(2)ADC DX,BX(1)执行后,(AX)=0D389H CF=1 OF=0 SF=1 ZF=0(2)执行后,(DX)=0008H CF=0 OF=0 SF=0 ZF=0,41,减法指令 减法指令:SUB DST,SRC 执行操作:(DST)(DST)-(SRC)带借位减法指令:SBB DST,SRC 执行操作:(DST)(DST)-(SRC)-CF 减1指令:DEC OPR 执行操作:(OPR)(OPR)-1 求补指令:NEG OPR 执行操作:(OPR)-(OPR)比较指令:CMP OPR

21、1,OPR2 执行操作:(OPR1)-(OPR2),注意:*除DEC指令不影响 CF标志外,均对条 件标志位有影响。,42,减法指令对条件标志位(CF/OF/ZF/SF)的影响:,CF位表示无符号数减法的溢出。OF位表示带符号数减法的溢出。NEG指令对CF/OF的影响:CF位:操作数为0时,求补的结果使CF=0,否则CF=1。OF位:字节运算对-128求补或字运算对-32768求补时OF=1,否则OF=0。,或,43,例:x、y、z均为双精度数,分别存放在地址为X,X+2;Y,Y+2;Z,Z+2的存储单元中,用指令序列实现 w x+y+24-z,并用W,W+2单元存放w。MOV AX,X MO

22、V DX,X+2 ADD AX,Y ADC DX,Y+2;x+y ADD AX,24 ADC DX,0;x+y+24 SUB AX,Z SBB DX,Z+2;x+y+24-z MOV W,AX MOV W+2,DX;结果存入W,W+2单元,44,乘法指令 无符号数乘法指令:MUL SRC 执行操作:字节操作数(AX)(AL)*(SRC)字操作数(DX,AX)(AX)*(SRC)带符号数乘法指令:IMUL SRC,注意:*AL(AX)为隐含的乘数寄存器。*AX(DX,AX)为隐含的乘积寄存器。*SRC不能为立即数。*除CF和OF外,对条件标志位无定义。,45,乘法指令对CF/OF的影响:,例:(

23、AX)=16A5H,(BX)=0611H(1)IMUL BL;(AX)(AL)*(BL);A5*11 5B*11=060B F9F5;(AX)=0F9F5H CF=OF=1(2)MUL BX;(DX,AX)(AX)*(BX);16A5*0611=0089 5EF5;(DX)=0089H(AX)=5EF5H CF=OF=1,46,除法指令 无符号数除法指令:DIV SRC 执行操作:字节操作(AL)(AX)/(SRC)的商(AH)(AX)/(SRC)的余数 字操作(AX)(DX,AX)/(SRC)的商(DX)(DX,AX)/(SRC)的余数 带符号数除法指令:IDIV SRC注意:*AX(DX,

24、AX)为隐含的被除数寄存器。*AL(AX)为隐含的商寄存器。*AH(DX)为隐含的余数寄存器。*SRC不能为立即数。*对所有条件标志位均无定义。,47,符号扩展指令:CBW AL AX 执行操作:若(AL)的最高有效位为0,则(AH)=00H 若(AL)的最高有效位为1,则(AH)=0FFH CWD AX(DX,AX)执行操作:若(AX)的最高有效位为0,则(DX)=0000H 若(AX)的最高有效位为1,则(DX)=0FFFFH,注意:*无操作数指令*隐含对AL或AX进行符号扩展*不影响条件标志位,例:(AX)=0BA45H CBW;(AX)=0045H CWD;(DX)=0FFFFH(AX

25、)=0BA45H,48,例:x,y,z,v均为16位带符号数,计算(v-(x*y+z-540)/x MOV AX,X IMUL Y;x*y MOV CX,AX MOV BX,DX MOV AX,Z CWD ADD CX,AX ADC BX,DX;x*y+z SUB CX,540 SBB BX,0;x*y+z-540 MOV AX,V CWD SUB AX,CX SBB DX,BX;v-(x*y+z-540)IDIV X;(v-(x*y+z-540)/x,49,十进制调整指令 BCD码:用二进制编码的十进制数,又称二-十进制数 压缩的BCD码:用4位二进制数表示1位十进制数 例:(59)10(0

26、101 1001)BCD非压缩的BCD码:用8位二进制数表示1位十进制数例:(59)10(0000 0101 0000 1001)BCD数字的ASCII码是一种非压缩的BCD码DIGITASCIIBCD030H0011 0000131H0011 0001232H0011 0010 939H0011 1001,50,例:写出(3590)10的压缩BCD码和非压缩BCD码,并 分别把它们存入数据区PAKED和UNPAK。压缩BCD:(3590)10(0011 0101 1001 0000)BCD非压缩BCD:(3590)10(00000011 00000101 00001001 00000000)

27、BCD,51,压缩的BCD码调整指令,加法的十进制调整指令:DAA执行操作:(AL)(AL)压缩BCD减法的十进制调整指令:DAS执行操作:(AL)(AL)压缩BCD,19 压缩BCD:0001 1001,+08+0000 1000,27 0010 0001+110,(0010 0111)BCD,AF=1,问题的提出:,注意:*隐含的操作寄存器为AL*紧接在加减指令之后使用*影响条件标志位(对OF无定义),52,调整方法:AF1或(AL)03AF,则(AL)(AL)06H,AF1CF1或(AL)47AF,则(AL)(AL)60H,CF1(DAA做+,DAS做-)例:DATA SEGMENT B

28、CD1 DB34H,18H;(1834)BCD BCD2 DB89H,27H;(2789)BCD BCD3 DB2 DUP(?)DATA ENDS(1)BCD3 BCD1+BCD2;(4623)BCD(2)BCD3 BCD1-BCD2;(9045)BCD=-955,53,(1)MOV AL,BCD1;(AL)=34H ADD AL,BCD2;(AL)=34+89=BDH DAA;(AL)=BD+60+06=23H AF=CF=1 MOV BCD3,AL;(BCD3)=23HMOV AL,BCD1+1;(AL)=18H ADC AL,BCD2+1;(AL)=18+27+1=40H AF=1 CF

29、=0DAA;(AL)=40+06=46H MOV BCD3+1,AL;(BCD3+1)=46H(2)MOV AL,BCD1;(AL)=34H SUB AL,BCD2;(AL)=34-89=ABH DAS;(AL)=AB-60-06=45H AF=CF=1 MOV BCD3,AL;(BCD3)=45HMOV AL,BCD1+1;(AL)=18H SBB AL,BCD2+1;(AL)=18-27-1=F0H DAS;(AL)=F0-60=90H MOV BCD3+1,AL;(BCD3+1)=90H,54,非压缩的BCD调整指令加法调整指令:AAA(AL)(AL)非压缩BCD减法调整指令:AAS(A

30、L)(AL)非压缩BCD注意:*隐含的操作寄存器为AL*紧接在加减指令之后使用*除AF、CF外,对其它条件标志位无定义调整方法:若(AL)03=09,且AF=0,则(AL)47=0,AF CF0若(AL)03=AF,或AF=1,则(AL)(AL)6,(AL)470(AH)(AH)1,AF CF1,(AAA做+,AAS做-),55,乘法调整指令:AAM(AL)(AX)非压缩BCD 注意:*隐含的操作寄存器为AL*紧接在MUL指令之后使用*对OF、CF、AF无定义调整方法:(AL)除以0AH,商(AH),余数(AL)除法调整指令:AAD 被除数(AX)=(0000 xxxx 0000 xxxx)非

31、压缩BCD 除数=(0000 xxxx)非压缩BCD 在DIV指令之前:(AL)2 0AH(AH)+(AL)(AH)2 0,56,例:(AX)0504H(BL)03H(1)(AL)*(BL)MUL BL;(AX)=000CH AAM;(AH)=01H(AL)=02H(2)(AX)/(BL)AAD;(AH)=00H(AL)=36H DIV BL;(AH)=00H(AL)=12H AAM;(AH)=01H(AL)=08H,57,3.3.3 逻辑指令 逻辑运算指令 移位指令,58,逻辑非指令:NOT OPR*OPR不能为立即数 执行操作:(OPR)(OPR)*不影响标志位 逻辑与指令:AND DST

32、,SRC执行操作:(DST)(DST)(SRC)逻辑或指令:OR DST,SRC执行操作:(DST)(DST)(SRC)异或指令:XOR DST,SRC执行操作:(DST)(DST)(SRC)测试指令:TEST OPR1,OPR2执行操作:(OPR1)(OPR2),CF OF SF ZF PF AF 0 0*无定义,根据运算结果设置,59,例:屏蔽AL的0、1两位 AND AL,0FCH例:置AL的第5位为1 OR AL,20H 例:使AL的0、1位变反 XOR AL,3例:测试某些位是0是1 TEST AL,1 JZ EVEN,*AND 1 1 1 1 1 1 0 0*0 0,*OR 0 0

33、 1 0 0 0 0 0*1*,*XOR 0 0 0 0 0 0 1 1*,60,移位指令:逻辑左移 SHL OPR,CNT逻辑右移 SHR OPR,CNT算术左移 SAL OPR,CNT(同逻辑左移)算术右移 SAR OPR,CNT,61,循环移位指令:循环左移 ROL OPR,CNT循环右移 ROR OPR,CNT带进位循环左移 RCL OPR,CNT带进位循环右移 RCR OPR,CNT,62,注意:*OPR可用立即数以外的任何寻址方式*CNT=1,SHL OPR,1 CNT1,MOV CL,CNT SHL OPR,CL;以SHL为例*条件标志位:CF=移入的数值 1 CNT=1时,最高

34、有效位的值发生变化 0 CNT=1时,最高有效位的值不变 移位指令:SF、ZF、PF 根据移位结果设置 AF无定义 循环移位指令:不影响 SF、ZF、PF、AF,OF=,63,例:(AX)=0012H,(BX)=0034H,把它们装配成(AX)=1234H MOV CL,8 ROL AX,CL ADD AX,BX例:(BX)=84F0H(1)(BX)为无符号数,求(BX)/2 SHR BX,1;(BX)=4278H(2)(BX)为带符号数,求(BX)/2 SAR BX,1;(BX)=0C278H(3)把(BX)中的16位数每4位压入堆栈,0008,0004,000F,0000(SP),MOV

35、CH,4;循环次数 MOV CL,4;移位次数NEXT:ROL BX,CL MOV AX,BX AND AX,0FH PUSH AX DEC CH JNZ NEXT,64,3.3.4 串处理指令 串传送指令 存入串指令 从串取指令 串比较指令 串扫描指令,配合使用的前缀有:REP 重复 REPE/REPZ 相等/为零则重复 REPNE/REPNZ 不相等/不为零则重复,65,与REP配合工作的 MOVS/STOS/LODS REP MOVS/STOS/LODS 执行操作:(1)如(CX)=0则退出REP,否则转(2)(2)(CX)(CX)-1(3)执行MOVS/STOS/LODS(4)重复(1

36、)(3),66,MOVS 串传送指令MOVS DST,SRCMOVSB(字节)MOVSW(字)例:MOVS ES:BYTE PTR DI,DS:SI 执行操作:(1)(DI)(SI)(2)字节操作:(SI)(SI)1,(DI)(DI)1 字操作:(SI)(SI)2,(DI)(DI)2 方向标志DF=0时用+,DF=1时用-。REP MOVS:将数据段中的整串数据传送到附加段中。源串(数据段)目的串(附加段)执行REP MOVS之前,应先做好:(1)源串首地址(末地址)SI(2)目的串首地址(末地址)DI(3)串长度 CX(4)建立方向标志(CLD使DF=0,STD使DF=1),67,(SI),

37、低地址,高地址,数据段,附加段,(SI),(DI),(DI),DF=0,DF=1,68,例3.58datarea segmentmess1 db personal_computerdatarea endsextra segmentmess2 db 17 dup(?)extra endscode segmentlea si,mess1 lea di,mess2 mov cx,17 cld rep movsb code ends,lea si,mess1+16 lea di,mess2+16 mov cx,17 std rep movsb,69,STOS存入串指令STOS DSTSTOSB(字节)

38、STOSW(字)执行操作:字节操作:(DI)(AL),(DI)(DI)1 字操作:(DI)(AX),(DI)(DI)2 例:把附加段中的5个字节缓冲区置为20Hlea di,mess2mov al,20Hmov cx,5cldrep stosb,70,LODS从串取指令LODS SRCLODSB(字节)LODSW(字)执行操作:字节操作:(AL)(SI),(SI)(SI)1 字操作:(AX)(SI),(SI)(SI)2,注意:*LODS指令一般不与REP联用*源串必须在数据段中,目的串必须在附加段中,但源串允许使用段跨越前缀来修改。*不影响条件标志位,71,与REPE/REPZ和REPNE/R

39、EPNZ配合工作的CMPS 和SCAS REPE/REPZ(REPNE/REPNZ)CMPS/SCAS 执行操作:(1)如(CX)=0或ZF=0(ZF=1)则退出,否则转(2)(2)(CX)(CX)-1(3)执行CMPS/SCAS(4)重复(1)(3),72,CMPS串比较指令 CMPS SRC,DSTCMPSB(字节)CMPSW(字)执行操作:(1)(SI)-(DI)根据比较结果设置条件标志位:相等 ZF=1 不等 ZF=0(2)字节操作:(SI)(SI)1,(DI)(DI)1 字操作:(SI)(SI)2,(DI)(DI)2,73,SCAS串扫描指令SCAS DSTSCASB(字节)SCAS

40、W(字)执行操作:字节操作:(AL)-(DI),(DI)(DI)1 字操作:(AX)-(DI),(DI)(DI)2,74,例3.60 从一个字符串中查找一个指定的字符mess db COMPUTERlea di,messmov al,Tmov cx,8cldrepne scasb,(DI):相匹配字符的下一个地址(CX):剩下还未比较的字符个数,75,例3.61 比较两个字符串,找出它们不相匹配的位置 lea si,mess1lea di,mess2mov cx,8cldrepe cmpsb,例:反向传送,76,3.3.5 控制转移指令 无条件转移指令*条件转移指令*循环指令*子程序调用和返回

41、指令*中断指令*不影响条件标志位,77,无条件转移指令 JMP 段内直接短转移:JMP SHORT OPR 执行操作:(IP)(IP)+8位位移量(-128127)例:.JMP SHORT HELLO HELLO:MOV AL,3,78,段内直接近转移:JMP NEAR PTR OPR 执行操作:(IP)(IP)+16位位移量 段内间接转移:JMP WORD PTR OPR 执行操作:(IP)(EA)段间直接(远)转移:JMP FAR PTR OPR 执行操作:(IP)OPR的段内偏移地址(CS)OPR所在段的段地址 段间间接转移:JMP DWORD PTR OPR 执行操作:(IP)(EA)

42、(CS)(EA+2),79,条件转移指令,注意:只能使用段内直接寻址的8位位移量(-128127),根据单个条件标志的设置情况转移:格式 测试条件 JZ(JE)OPR ZF=1 JNZ(JNE)OPR ZF=0 JS OPR SF=1 JNS OPR SF=0 JO OPR OF=1 JNO OPR OF=0 JP OPR PF=1 JNP OPR PF=0 JC OPR CF=1(JB、JNAE)JNC OPR CF=0(JNB、JAE),80,比较两个无符号数,并根据比较结果转移:*格式 测试条件 JNBE(JA)OPR CFZF=0*适用于地址或双精度数低位字的比较,81,比较两个带符号

43、数,并根据比较结果转移:*格式 测试条件 JNLE(JG)OPR(SFOF)ZF=0*适用于带符号数的比较测试CX的值为0则转移:格式 测试条件 JCXZ OPR(CX)=0,返回,82,例3.64 X50,转到TOO_HIGH;计算X-Y,溢出转到OVERFLOW,否则|X-Y|RESULT,MOV AX,XCMP AX,50JG TOO_HIGHSUB AX,YJO OVERFLOWJNS NONNEGNEG AX NONNEG:MOV RESULT,AXTOO_HIGH:OVERFLOW:,83,例3.65、是双精度数,分别存于DX,AX及BX,CX中,时转X,否则转Y。,CMP DX,

44、BXJG XJL YCMP AX,CXJA XY:.X:.,84,循环指令注意:*CX中存放循环次数*只能使用段内直接寻址的8位位移量(-128127)LOOPLOOPZ/LOOPELOOPNZ/LOOPNE 执行步骤:(1)(CX)(CX)-1(2)检查是否满足测试条件,如满足则(IP)(IP)+8位位移量,实行循环;不满足则IP不变,退出循环。,85,循环指令:LOOP OPR测试条件:(CX)0为零或相等时循环指令:LOOPZ(LOOPE)OPR测试条件:ZF=1且(CX)0不为零或不相等时循环指令:LOOPNZ(LOOPNE)OPR测试条件:ZF=0且(CX)0,86,例3.67 求首

45、地址为ARRAY的M个字之和,结果存入TOTAL。,MOV CX,M MOV AX,0 MOV SI,AXSTART_LOOP:ADD AX,ARRAYSIADD SI,2LOOP START_LOOPMOV TOTAL,AX,87,例:在多重循环的程序结构中,CX计数器的保存和恢复,MOV CX,MAGAIN:PUSH CX MOV CX,NNEXT:LOOP NEXT POP CX LOOP AGAIN,MOV DI,MAGAIN:MOV CX,NNEXT:LOOP NEXT DEC DI JNZ AGAIN,88,子程序调用和返回指令,89,CALL调用指令段内直接调用:CALL DST

46、执行操作:(SP)(SP)-2(SP)+1,(SP)(IP)(IP)(IP)+16位位移量段内间接调用:CALL DST执行操作:(SP)(SP)-2(SP)+1,(SP)(IP)(IP)(EA),90,段间直接调用:CALL DST执行操作:(SP)(SP)-2(SP)+1,(SP)(CS)(SP)(SP)-2(SP)+1,(SP)(IP)(IP)偏移地址(CS)段地址段间间接调用:CALL DST执行操作:(SP)(SP)-2(SP)+1,(SP)(CS)(SP)(SP)-2(SP)+1,(SP)(IP)(IP)(EA)(CS)(EA+2),91,RET返回指令段内返回:RET执行操作:(

47、IP)(SP)+1,(SP)(SP)(SP)+2段内带立即数返回:RET EXP段间返回:RET执行操作:(IP)(SP)+1,(SP)(SP)(SP)+2(CS)(SP)+1,(SP)(SP)(SP)+2段间带立即数返回:RET EXP,92,(SP)(IP),例:带立即数返回code segmentmain proc far push ax push bx push cx call sub retmain endpsub proc near ret 6sub endpcode ends,(SP),堆栈段,(SP),93,中断指令,中断向量:中断例行程序的入口地址,存放于中断向量区。,94,

48、中断指令:INT TYPE 或 INT执行操作:(SP)(SP)-2(SP)+1,(SP)(PSW)(SP)(SP)-2(SP)+1,(SP)(CS)(SP)(SP)-2(SP)+1,(SP)(IP)(IP)(TYPE*4)(CS)(TYPE*4+2)溢出中断指令:INTO执行操作:若OF=1,(IP)(10H)(CS)(12H),95,从中断返回指令:IRET执行操作:(IP)(SP)+1,(SP)(SP)(SP)+2(CS)(SP)+1,(SP)(SP)(SP)+2(PSW)(SP)+1,(SP)(SP)(SP)+2,注意:*TYPE(0 255)是中断类型号,隐含的类型号为3。*INT(

49、INTO)指令执行完,把IF和TF置0,但不影响 其它标志位。*IRET指令执行完,标志位由堆栈中取出的值确定。,96,3.3.6 处理机控制指令,标志处理指令:CLC CF0 CMC CFCF STC CF1 CLD DF0 STD DF1 CLI IF0 STI IF1 注意:*只影响本指令指定的标志,97,其他处理机控制指令:NOP 无操作(机器码占一个字节)HLT 暂停机(等待一次外中断,之后继续执行程序)WAIT 等待(等待外中断,之后仍继续等待)ESC mem 换码(mem)数据总线)LOCK 封锁(维持总线的锁存信号,直到其后的指令执行完)注意:*不影响条件标志,98,作业:P86 3.2 3.3 3.4 3.5 3.7 3.6 3.93.12 3.143.16 3.17 3.23 3.27 3.30 3.31 3.35 3.36 3.40 3.42 3.44 3.47 3.48,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号