微机原理及接口技术第三章.ppt

上传人:小飞机 文档编号:6161624 上传时间:2023-10-01 格式:PPT 页数:48 大小:331KB
返回 下载 相关 举报
微机原理及接口技术第三章.ppt_第1页
第1页 / 共48页
微机原理及接口技术第三章.ppt_第2页
第2页 / 共48页
微机原理及接口技术第三章.ppt_第3页
第3页 / 共48页
微机原理及接口技术第三章.ppt_第4页
第4页 / 共48页
微机原理及接口技术第三章.ppt_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《微机原理及接口技术第三章.ppt》由会员分享,可在线阅读,更多相关《微机原理及接口技术第三章.ppt(48页珍藏版)》请在三一办公上搜索。

1、二、8086/8088的指令系统(续),二、8086/8088的指令系统(续)内容:3、逻辑运算和移位指令(一)逻辑运算指令(二)移位指令(三)循环移位指令 4、串操作指令(一)与REP相配合工作的MOVS、STOS、LODS指令(二)与REPE/REPZ和REPNE/REPNZ联合工作的CMPS和 SCAS指令,(一)逻辑运算指令1、AND(Logical and)逻辑“与”指令2、TEST(Test or non-destructive logical and)测试指令3、OR(Lgical inclusive or)逻辑“或”指令4、XOR(Logical exclusive or)逻辑

2、“异或”指令5、NOT(Logical not)逻辑“非”指令,1、AND(Logical and)逻辑“与”指令格式:AND dest,src;B/W,(dest)(dest(src)src:立即数、寄存器、存储器。dest:寄存器、存储器。执行操作:进行“与”运算,两位中有一位为0(或二位都为0),则结 果 为0,否则为1。操作类型举例:AND AL,0FH;寄存器 立即数AND CX,DI;寄存器 寄存器AND SI,MEM_NAME;寄存器 存储器AND ALPHA DI,AX;存储器 寄存器 AND WORD PTR BXSI,0FFFEH;存储器 立即数,注意:“与”指令中操作数不

3、能同时为存储器;影响条件码:CF0F=0,A未定义,SF ZF PF“与”指令的用途:(1)清CF,自己“与”自己.操作数不变,CF=0 例:AND AL;结果:操作数不变,CF=0。(2)使操作数中若干位保持不变,若干位与“1”相与;而若干位置为“0“的场合,若干位与“0”相与。例:若(AL)=43H AND AL,0FH;(AL)=03H,(AL)03不变;;(AL)47=00H,屏蔽高4位。,“与”指令应用举例:例1:将英文小写字母ASCII转换成大写。小写英文字母ASCII为:az 61H7AH大写英文字母ASCII为:AZ 41H5AH程序:MOV AL,zAND AL,0DFH;(

4、AL)=5AH例2:判断键盘按下的字符是不是Y?MOV AH,7INT 21H;键入无回显,(AL)=输入键的字符码AND AL,0DFHCMP AL,YJE YES YES:,0110 0001,0100 0001,1101 1111,61H,41H,DFH,2、TEST(Test or non_destructive logical and)测试指令 格式:TEST dest,src;(dest)(src)src:立即数、寄存器、存储器。dest:寄存器、存储器。执行操作:二个操作数相与的结果不存,置条件码。操作类型举例:TEST BH,7;寄存器 立即数TEST SI,BP;寄存器 寄存

5、器TEST DI,TABLEBX;寄存器 存储器TEST SI,CH;存储器 寄存器TEST word ptr BXDI,6ACEH;存储器 立即数,用途:常常用来检测一些条件是否满足,但又不希望改变原有的操作数的情况下,常在此指令后边加一条 条件转移指令。例:判断A单元中数据的奇偶性设:(A)=0AEH程序:MOV AL,A;(AL)=0AEH TEST AL,01H JZ EVEN;结果=0为偶数转EVEN 奇数处理 EVEN:偶数处理检测(AL)的最低位是否为0,若为0转EVEN,3、OR(Lgical inclusive or)逻辑“或”指令格式:OR dset,src;(dset)(

6、dset)(src)dest:寄存器、存储器。src:立即数、寄存器、存储器。执行操作:进行按位“或”运算 两位操作数中任一位为1(或都为1),则该位(结果)=1,否则为0。操作类型举例:OR BL,0F6H;寄存器 立即数OR AH,BL;寄存器 寄存器OR CL,BETABXDI;寄存器 存储器OR GAMMASI,DX;存储器 寄存器OR BYTE PTR MEM_BYTE,80H;存储器 立即数,注意:“或”指令中操作数不能同时为存储器;影响条件码:CF0F=0,A未定义,SF ZF PF 用途:(1)清CF,自己与自己“或”,操作数不变,CF=0 例:OR AL;(AL)不变,CF=

7、0(2)使某个操作数若干位保持不变,若干位与“0”或;而若干位置1。若干位与“1”或。(3)将两个操作数信息组合。若(AL)=03H 用OR指令组合使(AL)=33H=3。OR AL,30H;(AL)=33H,4、XOR(Logical exclusive or)逻辑“异或”指令格式:XOR dset,src;B/W(dset)(dset)(src)dest:寄存器、存储器。src:立即数、寄存器、存储器。执行的操作:对指令的两个操作数进行按位“异或”运算。二位不相同时为1,相同时为0。操作类型举例:XOR DI,23F6HH;寄存器 立即数XOR SI,DX;寄存器 寄存器XOR CL,BU

8、FFER;寄存器 存储器XORMEMBX,AX;存储器 寄存器XORbyte ptrTABLEBPSI,3DH;存储器 立即数,注意:“或”指令中操作数不能同时为存储器;影响条件码:CF0F=0,A未定义,SF ZF PF 用途:对某些特定位求反,某些特定位与“1”其余位保持不变,保持不变与“0”。应用举例:例1:将(AL)中的第1、3、5、7位求反 0、2、4、6位保持不变。MOV AL,0FHXOR AL,0AAH,例2:比较三条(AX)清“0”指令:XOR AX,AX;清AX,清CF,2个字节,3个T。SUB AX,AX;清AX,清CF,2个字节,3个T。MOV AX,0;清AX,不影响

9、标志位,3个字节,4个T。,5、NOT(Logical not)逻辑“非”指令格式:NOT dest;B/W 指令操作数只有一个,指令对操作数按位求反。执行操作:字节求反:(dest)0FFH-(dest)字求反:(dest 0FFFFH-(dest)源操作数:寄存器、存储器。不能是立即数。影响标志位:对标志位无影响。操作类型举例:NOT AH;8位寄存器求反 NOT CX;16位寄存器求反 NOT BYTE PTR BP;8位存储器求反 NOT WORD PTR COUNT;16位存储器求反,综合举例:1使某些位置“0”。IN AL,61H;(AL)=B 设备控制寄存器 想使此位为0执行指令

10、:AND AL,0FDH 即可。2.使某些位置“1”。IN AL,61H;(AL)=执行指令:OR AL,02 想使此位为“1”3.使某些位求反:IN AL,61H;(AL)=0 XOR AL,02H 0 0 0 0 0 0 1 0 1 4.测试某些位(测奇偶性):测试“奇”“偶”性。见TEST指令的用途例子。,(二)移位指令(8086有8条移位指令):1、算逻移位指令(4条):SHL,SHR,SAL,SAR。(1)、SHL/SAL(Shift logical left/shift arithmetic left)逻辑左移/算术左移指令(2)、SHR(Shift logical right)逻

11、辑右移指令(3)、SAR(Shift arithmetic right)算术右移指令2、循环移位(4条):ROL,ROR,RCL,RCR。(1)、ROL(Rotate left)不含CF循环左移指令(2)、ROR(Rotate right)不含CF循环右移指令(3)、RCL(Rotate left through carry)含CF循环左移指令(4)、RCR(Rotate right through carry)含CF循环右移指令,共同点:所有移位指令都可以作B/W操作。指令中的 dest:寄存器、存储器寻址方式。cnt:表示移位次数 cnt=1,1可写在指令中,不能是1以外的常数。cnt1,

12、用CL存放移位次数,不能是其他寄存器。如:SAL AX,1 MOV CL,4 SAL AX,CL 利用移位指令编制*,/程序,执行时间比直接用*,/指令快,速度可提高5-6倍。,1、算逻移位指令(4条):SHL,SHR,SAL,SAR(1)、SHL/SAL(Shift logical left/shift arithmetic left)逻辑左移/算术左移指令格式:SHL dest,cnt;逻辑左移指令,B/W SAL dest,cnt;算术左移指令,B/W dest:寄存器、存储器寻址方式。cnt:表示移位次数 cnt=1,1可写在指令中。cnt1,用CL存放移位次数。,执行操作:相当于无符

13、号数的2功能。SHL/SAL指令操作示意图如下图所示:指令格式举例:SHL AH,1 SAL SI,CL SAL WORD PTR BX+5,1 SHL BYTE PTR,CL,0,CF,dest,(2)、SHR(Shift logical right)逻辑右移指令格式:SHR dest,cnt;逻辑右移指令,B/W执行操作:相当于无符号数的2功能。SHR指令操作示意图如下图所示:,dest:寄存器、存储器寻址方式。指令格式举例:SHR BL,1SHR AX,CLSHR BYTE PTR DI+BP,1SHR WORD PTR BLOCK,CL,dest,CF,0,(3)、SAR(Shift

14、arithmetic right)算术右移指令格式:SAR dest,cnt;算术右移指令,B/W执行操作:相当于带符号数的2功能 SAR指令操作示意图如下图所示,dset,dest:寄存器、存储器寻址方式。指令格式举例:SAR AL,1SHR DL,CLSHR WORD PTR TABLESI,1SHR BYTE PTR STATUS,CL,CF,2、循环移位(4条):ROL,ROR,RCL,RCR。共同点:ROL、ROR 不含CF循环移位指令,操作数移动8次后还原。RCL、RCR 含CF循环移位指令,操作数移动9次后还原。影响标志OF、CF ROL、RCL影响标志OF、CF情况相同;ROR

15、、RCR影响标志OF、CF情况相同。SF、ZF、PF、AF不影响。,(1)、ROL(Rotate left)不含CF循环左移指令格式:ROL dest,cnt;不含CF循环左移指令,B/W执行操作:ROL指令操作示意图如下图所示 移动8次后操作数还原。,CF,dest,指令格式举例:ROL BH,1ROL DX,CLROL WORD PTR TABLEDI,1ROL BYTE PTR ALPHA,CL,(2)、ROR(Rotate right)不含CF循环右移指令格式:ROR dest,cnt;不含CF循环右移指令,B/W执行操作:ROR指令操作示意图如下图所示 右移8次后操作数还原。,des

16、t,指令格式举例:ROR CX,1ROL BH,CLROL BYTE PTRBETA,1ROL WORD PTR COUNT,CL,(3)、RCL(Rotate left through carry)含CF循环左移指令格式:RCR dest,cnt;含CF循环左移指令,B/W执行操作:RCL指令操作示意图如下图所示 左移9次后操作数还原。,CF,dest,指令格式举例:RCL BX,1RCL DL,CLRCL BYTE PTR ARRAYDI,1RCL WORD PTR SI+BP,CL影响标志:RCL 与ROL 影响标志OF、CF情况相同,(4)、RCR(Rotate right throu

17、gh carry)含CF循环右移指令格式:RCR dest,cnt;含CF循环左移指令,B/W执行操作:RCR指令操作示意图如下图所示 右移9次后操作数还原。,dest,指令格式举例:RCR DI,1RCR SI,CLRCR WORD PTRSI+BX+3,1RCL BYTE PTRPORT,CL影响标志:RCR 与 ROR 影响标志OF、CF情况相同,循环移位指令(Rotate)与移位指令(Shift)不同点:循环移位指令移位后,操作数中原来各数位的信息不会丢失,这是移动了位置,必要时可以恢复。循环移位指令可以对操作数进行测试。例:测试(AL)5=?0MOV CL,3ROL AL,CLJNC

18、 ZEROZERO:,4、串操作指令(String manipulation)“串”就是内存中一段地址相连的字节或字。串操作对串中各项进行操作,也叫数据块操作。8086有5种基本操作:(1)MOVS(Move string)串传送指令(2)CMPS(Compare string)串比较指令(3)SCAS(Scan string)串扫描指令(4)LODS(Load from string)从串取指令(5)STOS(Store in to string)存入串指令,共同点:可以只有源操作数,可以只有目标操作数,可能二者都有。源操作数用SI 寻址,隐含DS值为段地址,可以用段跨越前缀指定其它段。目标

19、操作数用DI寻址,隐含ES为段地址。每次操作对SI、DI 调整:DF=1,DI、SI自动-1(字节)或-2(字);DF=0,DI、SI自动+1(字节)或+2(字)。与上述指令基本配合使用前缀有:REP(Repeat)重复。REPE/REPZ(Repeat while equal/zero)相等/为零则重复。REPNE/REPNZ(Repeat while not equal/not zero)不相等/不为零则重复。,下面分二种情况来讨论:(一)与REP相配合工作的MOVS、STOS、LODS指令 REP 重复串操作直到(CX)=0为止(二)与REPE/REPZ和REPNE/REPNZ联合工作的

20、CMPS和SCAS 指令 REPE/REPZ 当相等/为零时重复串操作 REPNE/REPNZ 当不相等/不为零时重复串操作,(一)与REP相配合工作的MOVS、STOS、LODS指令 REP 重复串操作直到(CX)=0为止 格式:REP String Primitive 串指令 String Primitive 可为:MOVS、STOS、LODS。MOVS(Move String)串传送LODS(Load from String)从串取指令STOS(Store into String)存入串指令,REP 重复串操作执行过程:(1)当(CX)=0,结束REP,执行REP后的下一条指令。(2)当

21、(CX)0,(CX)(CX)-1,(3)执行REP后的串指令,(4)重复(1)(3)。,REP 执行流程图,MOVS(Move string)串传送串传送有3种格式:(1)MOVS dest,src;(ES):(DI))(DS)(SI)MOVSB(字节);(SI)(SI)1,(DI)(DI)1MOVSW(字);(SI)(SI)2,(DI)(DI)2 当方向标志 CLD,DF=0时 用“+”STD,DF=1时 用“-”该指令不影响条件码。*MOV单指令不能完成 存储单元之间的数据传送;MOVS指令就是为解决 存储单元之间数据传送而设置的。,例:将内存的数据段中以AREA1为首地址的100个数据,

22、传送到附加段中的AREA2为首地址的区域。用MOVS串操作指令编程:MOV AX,SEG AREA1MOV DS,AX MOV AX,SEG AREA2MOV ES,AX MOV SI,OFFSET AREA1 MOV DI,OFFSET AREA2 MOV CX,100 CLD;DF=0,增址传送 REP MOVS AREA1,AREA2,应用MOV指令编程:MOV AX,SEG AREA1 MOV DS,AX MOV AX,SEG AREA2 MOV ES,AX MOV SI,OFFSET AREA1;将ARE1偏移地址SI MOV DI,OFFSET AREA2 MOV CX,100LO

23、OP1:MOV AL,SI;(AL)(DS):(SI)MOV ES:DI,AL;(ES):(DI)(AL)INC SI INC DI DEC CX JNE LOOP1,归纳在执行MOVS指令时,应该先做好以下准备工作:(1)数据段中源串首地址(或反向传送末地址)存入SI寄存中。(2)附加段中目的串首地址(或反向传送末地址)存入DI寄存中。(3)数据串长度存入CX寄存器。(4)建立方向标志 建立方向标志介绍两条指令:CLD(clear direction flag)功能:DF=0,执行串处理指令时 可以使地址自动+1或+2。STD(set direction flag)功能:DF=1,执行串处理

24、指令时可以使地址自动-1或-2。,LODS(Load from string)从串取指令从串取指令有3种格式:LODS src;(字节)(AL)(DS):(SI),(SI)(SI)1(字)(AX)(DS):(SI),(SI)(SI)2LODS B(字节);(AL)(DS):(SI),(SI)(SI)1LODS W(字);(AX)(DS):(SI),(SI)(SI)2功能:该指令把由(SI)指定的数据段中某单元内容(AL)或(AX)中。DF=0,(SI)(SI)+1或+2DF=1,(SI)(SI)-1或-2,LODS应用注意:(1)指令允许用段跨越前缀来指定非数据段的存储区。(2)该指令不影响条

25、件码。一般说来,它不与REP联用,每重复一次,累加器的内容就改变一次。(AL)中只能保持最后一个元素。有时缓冲区中的一串字符需要多次取出测试时可用本指令。,3 STOS(Store into string)存入串指令将(AL)或(AX)(ES):(DI),(DI)1或2(DI)存入串指令有3种格式:STOS dest;(字节)(ES):(DI)(AL),(DI)(DI)1(字)(ES):(DI)(AX),(DI)(DI)2(2)STOS B(字节);(ES):(DI)(AL),(DI)(DI)1(3)STOS W(字);(ES):(DI)(AX),(DI)(DI)2用途:与REP联用时,(CX

26、)缓冲区长度。用来建立一串相同值。,例:在附加段STORE开始存5个空格程序:MOV AL,20H;_(AL)MOV CX,5 MOV DI,OFFSET STORE CLD REP STOSB;(ES):(DI)(AL)(DI)(DI)+1,(二)与REPE/REPZ和REPNE/REPNZ联合工作的CMPS和SCAS指令,REPNE/REPNZ 当不相等/不为零时重复串操作,REPE/REPZ 当相等/为零时重复串操作,执行过程:当(CX)=0,结束REPZ,执行REPZ下一条指令;(2)当(CX)0,将CX 的内容减1,执行REPZ后的串指令;(3)当ZF=1,返回(1);(4)当ZF1

27、,则结束REPZ 执行REPZ下一条指令。注意:(CX)减1操作不影响标志ZF标志由串操作决定当(CX)=0或ZF=0时退出循环,REPE/REPZ 当相等/为零时重复串操作,执行过程:当(CX)=0,结束REPNZ,执行REPNZ下一条指令。(2)当(CX)0,将CX 的内容减1,执行REPNZ后的串指令。当ZF=0,返回(1);当ZF0,则结束REPNZ,(4)执行REPNZ下一条指令。注意:(CX)减1操作不影响标志 ZF标志由串操作决定 当(CX)=0或ZF=1时退出循环,REPNZ执行流程,REPNE/REPNZ 当不相等/不为零时重复串操作,1、CM PS(Compare stri

28、ng)串比较指令(SI)作为源串地址,(DI)目的串地址串比较指令有3种格式:(1)CMPS dest,src;(ES):(DI)-(DS):(SI),结果不存,置标志CMPS B(字节);(SI)(SI)1,(DI)(DI)1CMPS W(字);(SI)(SI)2,(DI)(DI)2执行操作:(ES):(DI)-(DS):(SI),结果不存,置标志。字节操作:(SI)(SI)1,(DI)(DI)1字操作:(SI)(SI)2,(DI)(DI)2注意:两数相减,只影响标志,不影响操作数。其它操作规定与MOVS同。,学习REPZ CMPSB指令例:利用CMPS指令对STRING1和STRING2二

29、个字符串进行 比较,相同在RESULT 单元送00H,不同送0FFH。MOV SI,OFFSET STRING1 MOV DI,OFFSET STRING2 MOV CX,COUNT CLD REPZ CMPSB JNZ UNMAT;若串不同,在RESUL单元中置0FFH MOV AL,0;若串相等,在RESULT单元中置00H JMP OULPT UNMAT:MOV AL,0FFH OUTPT:MOV RESULT,AL HLT,2、SCAS(Scan string)串扫描指令,搜索指令(DI)字符串起始地址,(AL)或(AX)关键字 串扫描指令有3种格式:格式:SCAS dest SCAS

30、B(字节);(AL)-(ES):(DI),(DI)(DI)1 SCASW(字);(AX)-(ES):(DI),(DI)(DI)2注意:(AL)或(AX)-目的串两数相减,只影响标志,不影响操作数。其它特性与MOVS同。,REPNE SCASB指令应用例:要搜索的关键字 放在(AL)或(AX)中,搜索某一数据块或字符串中有无关 键字,若有,把搜索次数记下来,且记录关键字地址;若次数为0,表示没有要搜索的关键字。MOV DI,0FFSET BLOCK;设置数据块地址指针 MOV CX,COUNT;设置数据块长度MOV AL,CHAR;关键字送入AL或AXREP NE SCASB;(CX)0,Z=0 继续SCASB JZ FOUND MOV DI,0 JMP DONEFOUND:DEC DI MOV POINTR,DI MOV BX,OFFSET BLOCK SUB BX,DI MOV DI,BX;把搜索次数记下来,且记录关键字地址DONE:HLT,小结:串操作指令重复前缀,操作数,地址指针,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号