收藏 分享(赏)

微机原理第3章.ppt

上传人:ysd1539 文档编号:7875905 上传时间:2019-05-28 格式:PPT 页数:194 大小:1.14MB
下载 相关 举报
微机原理第3章.ppt_第1页
第1页 / 共194页
微机原理第3章.ppt_第2页
第2页 / 共194页
微机原理第3章.ppt_第3页
第3页 / 共194页
微机原理第3章.ppt_第4页
第4页 / 共194页
微机原理第3章.ppt_第5页
第5页 / 共194页
点击查看更多>>
资源描述

1、2019/5/28,1,第3章 8086/8088指令系统,2,2019/5/28,第3章 8086/8088指令系统,3.1 8086/8088指令格式 3.2 8086/8088寻址方式 3.3 8086/8088指令系统,3,2019/5/28,3.1 8086/8088指令格式,4,2019/5/28,3.2 8086/8088寻址方式,一条指令包含操作码(OP)和操作数两部分: 操作码指明该指令进行什么操作 操作数指出该指令在执行规定操作时所需的信息 规定操作数的方法,即指令中用于说明操作数所在地址的方法称为寻址方式。8086/8088 的寻址方式分为两类: 数据寻址方式 转移地址寻

2、址方式,5,2019/5/28,3.2.1 数据寻址方式,指令中用于说明操作数所在地址的方 法,6,2019/5/28,1. 立即寻址,当数据为 8 位或 16 位时,可直接放在指令本身的最后一个字节(8位)或两个字节(16 位)中。这样的数据常称为立即操作数 MOV AL, 80H; 将8位立即数80H送入AL寄存器中MOV AX, 1234H ; 将16位立即数1234H送入AX寄存器中,其中 (AX)=1234H,7,2019/5/28,立即数寻址方式举例,8,2019/5/28,2. 寄存器寻址,数据存放在指令规定的寄存器中 对于 16 位数据,寄存器可以是AX,BX,CX,DX,SI

3、,DI,SP或者BP 对于 8 位数据,寄存器可以是AL,AH,BL,BH,CL,CH,DL或DH MOV CL,DLMOV AX,BX如果(DL)=50H,(BX)=1234H,执行结果为:(CL)=50H,(AX)=1234H,9,2019/5/28,寄存器寻址方式的指令执行情况,10,2019/5/28,3. 直接寻址,操作数在存储单元中,其 16 位有效地址,即段内偏移地址在指令码之中,占两个字节。此存储单元的实际物理地址是由段寄存器内容和指令码中直接给出的有效地址之和形成的MOV AL,1064H如果(DS)=2000H,执行结果为:(AL)=45H。,11,2019/5/28,直接

4、寻址示意图,12,2019/5/28,4. 寄存器间接寻址,操作数在存储单元中,其有效地址在指令码指明的基址寄存器BX、BP或变址寄存器SI或DI之中 寄存器间接寻址的操作数一定存放在存储单元中。BX、SI和DI间接寻址默认的段寄存器为DS,而BP间接寻址默认的段寄存器为SS 有效地址,13,2019/5/28,举例,MOV AX,SI MOV BX,AL 如果(DS)=3000H,(SI)=2000H,(BX)=1000H,(AL)=64H,执行结果为:(AX)=4050H,(31000H)=64H,14,2019/5/28,5. 寄存器相对寻址,有效地址,在一般情况下,若指令中指定的寄存器

5、是BX、SI、DI,则操作数默认为存放在数据段(DS)中;若指令中指定的寄存器是BP,则操作数默认为存放在堆栈段(SS)中,15,2019/5/28,举例,MOV SI+10H,AX MOV CX,BX+COUNT 如果(DS)=3000H,(SI)=2000H,(BX)=1000H,COUNT=1050H,(AX)=4050H,执行结果为:(32010H)=4050H,(CX)=4030H。,16,2019/5/28,6. 基址变址寻址,有效地址,在一般情况下,由基址寄存器决定操作数在哪个段中。若用BX的内容作为基地址,则操作数在数据段(DS)中;若用BP的内容作为基地址,则操作数在堆栈段(

6、SS)中。,17,2019/5/28,举例,MOV BX+DI,AX MOV CX,BPSI 设当前(DS)=3000H,(SS)=4000H,(BX)=1000H,(DI)=1100H,(AX)=0050H,(BP)=2000H,(SI)=1200H,执行结果为:(32100H)=0050H,(CX)=3412H。,18,2019/5/28,7. 基址变址且相对寻址,有效地址,当基址寄存器为BX时,操作数在数据段(DS)中;基址寄存器为BP时,操作数在堆栈段(SS)中。基址变址相对寻址方式同样也允许段超越。,19,2019/5/28,举例,MOV AX,BX+DI+1200HMOV BP+S

7、I+200H,CX若(DS)=8000H,(SS)=6000H,(BX)=1000H,(DI)=1500H,(BP)=1000H,(SI)=1600H,(CX)= 7856H,执行结果为:(AX)=8056H,(62800H)=7856H,20,2019/5/28,8. 隐含寻址,有些指令的指令码中不包含指明操作数地址的部分,而其操作码本身隐含地指明了操作数地址 字符串操作类指令就属于这种寻址,21,2019/5/28,举例,若(BX)=1200H, (SI)=0A00H, 位移量=0710H, (DS)=3200H, (SS)=5000H, (BP)=2200H, 段寄存器按默认段寄存器,则

8、相对于各种寻址方式的有效地址和物理地址,22,2019/5/28,举例(续),(1) 直接寻址:EA=0710H物理地址=32000H+0710H=32710H (2) 寄存器间接寻址(假设寄存器为BP):EA=2200H物理地址=50000H+2200H=52200H (3) 寄存器相对寻址(假设寄存器为BX):EA=1200H+0710H=1910H物理地址=32000H+1910H=33910H (4) 基址变址寻址(假设寄存器为BP和SI):EA=2200H+0A00H=2C00H物理地址=50000H+2C00H=52C00H (5) 基址变址且相对寻址(假设寄存器为BX和SI):E

9、A=1200H+0A00H+0710H=2310H物理地址=32000H+2310H=34310H,23,2019/5/28,3.2.2 转移地址寻址方式,程序转移是在程序转移指令的控制下实现的 程序转移指令通过改变IP和CS的内容,就可以改变程序的正常执行顺序 转移地址的寻址方式有 4 种,24,2019/5/28,1. 段内直接寻址,指令码中包括一个位移量disp,转移的有效地址为(IP)+disp disp在指令码中都是用补码表示的有正负符号的数。当位移量是8位时,称为短转移,转移范围为128+127;位移量是16位时,称为近转移,转移范围为32768+32767 位移量是相对于当前IP

10、的内容来计算的,所以又称为相对寻址 JMP NEAR PTR PROGIAJMP SHORT QUEST其中,PROGIA和QUEST均为转向的目标地址,在机器指令中,用位移量来表示,25,2019/5/28,2. 段内间接寻址,在同一代码段内,要转移到的地址的 16 位段内偏移地址(即有效地址)在一个 16 位寄存器中或在存储器相邻两个单元中 存放转移地址寄存器或相邻两个单元的第一个单元的地址,是在指令码中以上面讨论的数据的寻址方式给出的JMP BXJMP WORD PTR BP+10H其中WORD PTR为操作符,用以指出其后的寻址方式所取得的目标地址是一个字的有效地址,26,2019/5

11、/28,3. 段间直接寻址,令码中直接给出 16 位的段地址和 16 位的有效地址JMP FAR PTR LABEL_NAME其中,LABEL_NAME是一个在另外的代码段内已定义的远标号,27,2019/5/28,4. 段间间接寻址,与段内间接寻址相似,转移地址为 32 位(16 位段地址和 16 位有效地址) 指令中一定给出某种访问内存单元的寻址方式。 用这种寻址方式计算出的存储单元地址开始的连续4个单元的内容就是要转移的地址,其中前两个单元内的16位值为有效地址,后两个单元内的 16 位值为段地址JMP VAR_DOUBLEWORDJMP DWORD PTR BX上面第一条指令中,VAR

12、_DOUBLEWORD应是一个已定义为32位的存储器变量;第二条指令中,利用操作符PTR将存储器操作数的类型定义为DWORD(双字),28,2019/5/28,程序转移地址的寻址方式,(a)段内直接(相对)寻址; (b) 段内间接寻址; (c) 段间直接寻址; (d) 段间间接寻址,29,2019/5/28,3.3 8086/8088指令系统,数据传送(Data Transfer)指令; 算术运算(Arithmetic)指令; 逻辑运算(Logic)指令; 控制转移(Control Transfer)指令; 串操作(String Manipulation)指令; 处理器控制(Processor

13、 Control)指令。,30,2019/5/28,3.3.1 数据传送指令,通用数据传送指令; 地址传送指令; 累加器专用传送(输入/输出指令); 标志传送指令。,31,2019/5/28,1. 通用数据传送指令,传送指令MOV 数据交换指令XCHG 堆栈指令PUSH和POP,32,2019/5/28,(1)通用传送指令MOV(MOVe),格式:MOV DST, SRC;(DST)(SRC) DST:目的操作数,SRC:源操作数。 功能:把一个字节或字从源操作数SRC传送至目的操作数DST 源和目的操作数不允许同时为存储器操作数; 源和目的操作数数据类型必须一致; 源和目的操作数不允许同时为

14、段寄存器; 目的操作数不允许为CS和立即数; 当源操作数为立即数时,目的操作数不允许为段寄存器; 传送操作不影响标志位。,33,2019/5/28,通用传送指令数据流,34,2019/5/28,举例,MOV AL,DH ;(AL)(DH) MOV DS,AX ;(DS)(AX) MOV BX,AX ;(BX)(AX) MOV AL,BLOCK ;BLOCK为字节型变量名 MOV BLOCK,12H ;(BLOCK)12H MOV AX,1234H ;(AX)1234H,35,2019/5/28,(2)交换指令XCHG(Exchange),格式:XCHG DST,SRC; (DST)(SRC)

15、功能:交换操作数DST和SRC的值,操作数数据类型为字节或字。允许通用寄存器之间,通用寄存器和存储器之间交换数据。 操作数DST和SRC不允许同为存储器操作数; 操作数数据类型必须一致; 交换指令不影响标志位。,36,2019/5/28,举例,XCHG AX,BX ;通用寄存器之间交换数据 XCHG BX,SI;通用寄存器和存储器之间交换数据 XCHG AL,BX;通用寄存器和存储器之间交换数据 如要实现存储器操作数交换,若BLOCK1和BLOCK2为已定义字变量,可用如下指令实现: MOV AX,BLOCK1 XCHG AX,BLOCK2 MOV BLOCK1,AX,37,2019/5/28

16、,(3)堆栈操作指令,堆栈是以后进先出(LIFO)的规则存取信息的一种存储机构 堆栈通常是存储器的一部分 为了保证堆栈区的存储器能按后进先出的规则存取信息,用堆栈指针SP来管理该存储区的存取地址 在信息的存与取的过程中,栈顶是不断移动的,也称它为堆栈区的动端,而堆栈区的另端则是固定不变的,这端又称其为栈底 堆栈操作指令不影响标志位,38,2019/5/28,举例,39,2019/5/28, 压栈指令PUSH(Push onto the stack),格式:PUSH SRC; (SP)(SP)-2,(SP)+1,(SP)(SRC) 功能:将源操作数SRC压下堆栈,源操作数允许为16位通用寄存器、

17、存储器和段寄存器,但不允许是立即数。操作数数据类型为字类型,压栈操作使SP值减2。,40,2019/5/28,举例,PUSH AX ;通用寄存器操作数入栈 PUSH SI ;存储器操作数入栈 PUSH CS,41,2019/5/28,出栈指令POP(Pop from the stack),格式:POP DST; (DST)(SP+1),(SP), (SP)(SP)+2 功能:从栈顶弹出操作数送入目的操作数。目的操作数允许为16位通用寄存器、存储器和段寄存器,但不允许是CS和立即数。操作数数据类型为字类型,出栈操作使SP加2,42,2019/5/28,举例,POP AX ;操作数出栈送寄存器 P

18、OP BX ;操作数出栈送存储器 POP DS,43,2019/5/28,2.地址传送指令,地址传送指令对标志位无影响,44,2019/5/28,(1)取有效地址指令LEA(Load effective address),格式:LEA REG,SRC;(REG)SRC的有效地址 功能:将源操作数SRC的有效地址传送到通用寄存器,操作数REG为16位通用寄存器,源操作数为存储器操作数,45,2019/5/28,举例,LEA BX,1200H; (BX)=1200H MOV BX, 1200H; (BX)=58A0H,图3-12 LEA和MOV指令示意图,46,2019/5/28,(2)指针送寄存

19、器DS指令 LDS(Load DS with pointer),格式:LDS REG,SRC; (REG)(SRC),(DS)(SRC+2) 功能:根据源操作数SRC指定的偏移地址,在数据段中取出段地址和偏移地址分别送指定的段寄存器DS和指定的通用寄存器,47,2019/5/28,举例,LDS BX,SI;将32位地址指针分别送DS和BX DATA DD 40003500H LDS BX,DATA;(DS)4000H,(BX)3500H,48,2019/5/28,3. 累加器专用传送(输入/输出指令),输入/输出指令(IN/OUT) 查表指令XLAT(Translate),49,2019/5/

20、28,(1)输入/输出指令(IN/OUT),输入IN指令是将数据(字节/字数据)从一个输入端口传送到累加器(AL或AX)中。 输出OUT指令是将数据(字节/字数据)从累加器(AL或AX)传送到一个输出端口中。 输入/输出指令可以分为两大类:一类是直接端口(Port)寻址的输入/输出指令;另一类是通过DX寄存器间接寻址的输入/输出指令。在直接寻址的指令中只能寻址0255个端口,而间接寻址的指令中可寻址整个64K(0000FFFFH)个端口。 输入/输出指令不影响标志位。,50,2019/5/28,输入指令IN(Input),直接寻址格式:IN Acc, Port。 此指令是将8/16位数据经输入

21、端口Port(地址号0255)送入AL/AX累加器中; 间接寻址格式:IN Acc,DX。此指令是从DX寄存器内容指定的端口中将8/16位数据送入AL/AX寄存器中。这种寻址方式端口地址可由16位地址号表示,执行此指令前应将16位地址号存入DX寄存器中,51,2019/5/28,输出指令OUT(Output),直接寻址格式:OUT Port, Acc。 此指令是从AL或AX累加器输出8/16位数据到指令直接指定的I/O端口Port中; 间接寻址格式:OUT DX,Acc。此指令是从AL或AX累加器中输出8/16位数据到由DX寄存器内容指定的I/O端口中,52,2019/5/28,举例,IN A

22、L,10H OUT 20H,AX OUT DX,AL IN AL,DX,53,2019/5/28,(2)查表指令XLAT(Translate),格式:XLAT; (AL)(BX)+(AL) 功能:将寄存器AL中的内容转换成存储器表格中的对应值。实现直接查表功能。 查表指令不影响标志位,54,2019/5/28,举例,【例 3-1】内存中有一起始地址为TABLE的编码表,试编程将表中顺序号为3的存储单元内容送寄存器AL。 TABLE DB 10H,20H,30H,40H,50H,60H 编码表 MOV AL,3 ;(AL)3 LEA BX,TABLE ;BXTABLE表首地址 XLAT ;结果在

23、AL中,(AL)=40H,55,2019/5/28,4.标志寄存器传送指令 (1)标志送AH指令 LAHF(Load AH with flags),格式:LAHF;(AH)(PSW)低8位 功能:将标志寄存器中低8位送AH中。不影响标志位,图3-13 LAHF指令示意图,56,2019/5/28,(2)AH送标志寄存器指令SAHF(Store AH into flags),格式:SAHF;(PSW)低8位(AH) 功能:将AH中内容送标志寄存器中低8位。影响标志位,57,2019/5/28,(3)标志进栈指令PUSHF(Push the flags),格式:PUSHF;(SP)(SP)-2,(

24、SP)+1,(SP)(PSW) 功能:将标志寄存器内容压入堆栈,(SP)(SP)-2。不影响标志位,58,2019/5/28,(4)标志出栈指令POPF(Pop the flags),格式:POPF;(PSW)(SP)+1,(SP),(SP)(SP)+2, 功能:将当前栈顶一个字传送到标志寄存器中,(SP)(SP)+2。影响标志位,59,2019/5/28,3.3.2 算术运算指令,包括加、减、乘、除四种基本算术运算操作及符号扩展指令和十进制算术运算调整指令 二进制加、减法指令,带符号操作数采用补码表示时,无符号数和带符号数据运算可以使用相同的指令 二进制乘、除法指令分带符号数和无符号数运算指

25、令,60,2019/5/28,1. 加法指令,加法指令ADD(Add) 带进位加法指令ADC(Add with carry),61,2019/5/28,(1)加法指令ADD(Add),格式:ADD DST,SRC; (DST)(DST)+(SRC) 功能:ADD是将源操作数与目的操作数相加,结果传送到目的操作数。 源操作数SRC可以是通用寄存器、存储器或立即数。目的操作数DST可以是通用寄存器或存储器操作数。SRC和DST都不能为段寄存器,62,2019/5/28,(2)带进位加法指令ADC(Add with carry),格式:ADC DST,SRC;(DST)(DST)+(SRC)+CF

26、功能:ADC是将源操作数与目的操作数以及CF(低位进位)值相加,结果传送到目的操作数。 ADD,ADC指令影响标志位为OF,SF,ZF,AF,PF,CF,63,2019/5/28,举例,MOV AX,9876H ADD AH,AL;(AX)=0E76H CF=1 SF=0 OF=0 ZF=0 AF=0 PF=0 ADC AH,AL;(AX)=8576H CF=0 SF=1 OF=1 ZF=0 AF=1 PF=0,64,2019/5/28,2. 减法指令,减法指令SUB(Subtract) 带借位减法指令SBB(Subtract with borrow),65,2019/5/28,(1)减法指令

27、SUB(Subtract),格式:SUB DST,SRC;(DST)(DST)-(SRC) 功能:SUB将目的操作数减源操作数,结果送目的操作数。 源操作数SRC可以是通用寄存器、存储器或立即数。目的操作数DST可以是通用寄存器或存储器操作数。SRC和DST都不能为段寄存器,66,2019/5/28,(2)带借位减法指令SBB(Subtract with borrow),格式:SBB DST,SRC;(DST)(DST)-(SRC)-CF 功能:SBB将目的操作数DST减源操作数SRC,还要减CF(低位借位)值,结果送目的操作数。 SUB,SBB指令影响标志位为OF,SF,ZF,AF,PF,C

28、F,67,2019/5/28,举例,MOV AX,9966H; (AX)=9966H SUB AL, 80H; (AL)=0E6H,CF=1,SF=1,OF=1,ZF=0,AF=0,PF=0 SBB AH, 80H; (AH)=18H,CF=0,SF=0,OF=0,ZF=0,AF=0,PF=1,68,2019/5/28,3. 增量和减量指令,增量指令INC(Increment) 减量指令DEC(Decrement),69,2019/5/28,(1)增量指令INC(Increment),格式:INC DST;(DST)(DST)+1 功能:INC指令将目的操作数加1,结果送目的操作数DST。目的

29、操作数为通用寄存器或存储器操作数。DST不能为立即数和段寄存器,70,2019/5/28,(2)减量指令DEC(Decrement),格式:DEC DST;(DST)(DST)-1 功能:DEC指令将目的操作数DST减1,结果送目的操作数。 INC,DEC指令影响标志位为OF,SF,ZF,AF,PF,71,2019/5/28,举例,INC BL;(BL)(BL)+1 DEC AX;(AX)(AX)-1 INC WORD PTR BX;(BX)(BX)+1,72,2019/5/28,4.比较指令CMP(Compare),格式:CMP DST,SRC;(DST)-(SRC)只影响标志位 功能:目的

30、操作数DST减源操作数SRC,结果不回送,只影响标志位。源操作数为通用寄存器、存储器和立即数。目的操作数为通用寄存器、存储器操作数。 CMP指令影响标志位为OF,SF,ZF,AF,PF,CF,73,2019/5/28,举例,CMP CX,DX CMP WORD PTR SI,3 CMP AX,BLOCK; BLOCK为已定义字变量,74,2019/5/28,应用,若(AX)和(BX)中已存储有数,执行比较指令后,对于两个数的比较(AX)-(BX)有以下2种情况: 两个无符号数比较,使用CF标志位判断。 CF=0,则(AX)(BX),若ZF=1,则(AX)=(BX) CF=1,则(AX)(BX)

31、 两个带符号数比较,使用OF标志位判断。 当OF=0,SF=0,则(AX)(BX),若ZF=1,则(AX)=(BX) SF=1,则(AX)(BX) 当OF=1,SF=0,则(AX)(BX) SF=1,则(AX)(BX),75,2019/5/28,5.求补指令NEG(Negate),格式:NEG DST;(DST)0-(DST) 功能:对目的操作数DST求补,用零减去目的操作数,结果送目的操作数。目的操作数为通用寄存器、存储器操作数。 NEG指令影响标志位为OF,SF,ZF,AF,PF,CF,76,2019/5/28,6.乘法指令,无符号数乘法指令MUL(Unsigned multiple) 带

32、符号数乘法指令IMUL(Signed multiple),77,2019/5/28,(1)无符号数乘法指令MUL(Unsigned multiple),格式:MUL SRC;字节操作数:(AX)(AL)(SRC)字操作数:(DX:AX)(AX)(SRC) 功能:MUL为无符号数乘法指令。源操作数为通用寄存器或存储器操作数。目的操作数为AL或AX,乘积存AX或DX:AX中,78,2019/5/28,(2)带符号数乘法指令IMUL(Signed multiple),格式:IMUL SRC;字节操作数:(AX)(AL)(SRC) 字操作数:(DX:AX)(AX)(SRC) 功能:IMUL为带符号数乘

33、法指令,与MUL相同,但必须是带符号数。积采用补码形式表示。 MUL,IMUL指令执行后,CF=OF=0,表示乘积高位无有效数据;CF=OF=1表示乘积高位含有效数据,对其它标志位无定义,79,2019/5/28,举例,MUL BL MUL WORD PTR SI IMUL BYTE PTR DI,80,2019/5/28,7.除法指令,无符号数除法指令DIV(Unsigned divide) 带符号数除法指令IDIV(Signed divide),81,2019/5/28,(1)无符号数除法指令DIV(Unsigned divide),格式:DIV SRC;字节除法:(AL)(AX)/(SR

34、C)商,(AH)余数 字除法:(AX)(DX:AX)/(SRC)商,(DX)余数 功能:DIV为无符号数除法。源操作数作为除数,为通用寄存器或存储器操作数。被除数为AX或(DX:AX),82,2019/5/28,(2)带符号数除法指令IDIV(Signed divide),格式:IDIV SRC;字节除法:(AL)(AX)/(SRC)商,(AH)余数 字除法:(AX)(DX:AX)/(SRC)商,(DX)余数 格式:IDIV为带符号数除法,与DIV相同,但必须是带符号数。商和余数采用补码形式表示,余数与被除数同符号,83,2019/5/28,举例,DIV DATA; DATA为已定义字节变量

35、IDIV BX,84,2019/5/28,注意,对于除法,当除数为零或商超过了规定数据类型所能表示的范围时,将会出现溢出现象,产生一个中断类型码为“0”的中断。执行除法指令后,标志位无定义,85,2019/5/28,8.符号扩展指令,字节转换为字指令CBW(Convert byte to word) 字转换为双字指令CWD(Contert word to double word) 符号扩展指令对标志位无影响,86,2019/5/28,(1)字节转换为字指令CBW(Convert byte to word),格式:CBW;(AL)内容扩展至(AX) 功能:AL的内容符号扩展到AH。即如果(AL)

36、的最高有效位为0,则(AH)=00;如(AL)的最高有效位为1,则(AH)=0FFH 例如:(AL)=55H,执行CBW指令后,(AX)=0055H。(AL)=0A5H,执行CBW指令后,(AX)=0FFA5H。,87,2019/5/28,(2)字转换为双字指令CWD(Contert word to double word),格式:CWD;(AX)内容扩展至(DX:AX) 功能:AX的内容符号扩展到DX。即如(AX)的最高有效位为0,则(DX)=0;否则(DX)=0FFFFH,88,2019/5/28,9.压缩BCD码算术运算指令,压缩BCD数是以一个字节存储2位BCD码,用BCD码来表示十进

37、制数。BCD加减法是在二进制加减运算的基础上,对其二进制结果进行调整,将结果调整成BCD码表示形式,89,2019/5/28,(1)压缩BCD码加法调整指令DAA (Decimal adjust for addition),格式:DAA 功能:将存放在AL中的二进制和数,调整为压缩格式的BCD码表示形式。 调整方法:如果(AL)0FH)9或(AF)=1则(AL)(AL)+06H,(AF)1如果(AL)9FH或(CF)=1则(AL)(AL)+60H,(CF)1 DAA指令一般紧跟在ADD或ADC指令之后使用,影响标志位为SF,ZF,AF,PF,CF。OF无定义,90,2019/5/28,举例,A

38、DD AL,BL DAA,91,2019/5/28,(2)压缩BCD码减法调整指令DAS (Decimal adjust for subtraction),格式:DAS 功能:将存放在AL中的二进制差数,调整为压缩的BCD码表示形式。 调整方法:如果(AL)0FH)9或(AF)=1则(AL)(AL) 06H,(AF)1如果(AL)9FH或(CF)=1则(AL)(AL) 60H,(CF)1 DAS指令一般紧跟在SUB或SBB指令之后使用,影响标志位为SF,ZF,AF,PF,CF。OF无定义,92,2019/5/28,举例,SUB AL,BL DAS,93,2019/5/28,10.非压缩BCD码

39、算术运算,非压缩BCD数是以一个字节存储1位BCD码,用BCD码来表示十进制数。BCD码的算术运算是在二进制运算基础上进行调整 调整指令有加、减、乘、除四种调整指令,94,2019/5/28,(1)非压缩BCD码加法调整指令AAA (ASCII adjust for addition),格式:AAA 功能:将存放在AL中的二进制和数,调整为ASCII码表示的结果。 调整方法:如果((AL)0FH)9或(AF)=1则(AL)(AL)+06H,(AH)(AH)+1,(AF)1,(CF)(AF)(AL)(AL)0FH)否则(AL)(AL)0FH) AAA指令一般紧跟在ADD或ADC指令之后使用,影响

40、标志位为AF,CF。其它标志位无定义,95,2019/5/28,举例,MOV AX,0006H ADD AL,05H AAA;(AX)=0101H,96,2019/5/28,(2)非压缩BCD码减法调整指令AAS (ASCII Adjust for subtraction),格式:AAS 功能:将存放在AL中的二进制差数,调整为ASCII码表示形式。 调整方法:如果((AL)0FH)9或(AF)=1则(AL)(AL)06H,(AH)(AH) 1,(AF)1,(CF)(AF)(AL)(AL) 0FH)否则(AL)(AL) 0FH) AAS指令一般紧跟在SUB,SBB指令之后使用,影响标志位为AF

41、,CF。其它标志位无定义,97,2019/5/28,(3)非压缩BCD码的乘法调整指令AAM (ASCII Adjust for multiply),格式:AAM 功能:将存放在AL中的二进制积数,调整为ASCII码表示形式。 调整方法:(AH)(AL)/0AH的商,即(AL)除以10,商送(AH)。(AL)(AL)/0AH的余数,即(AL)除以10,余数送(AL)。 AAM指令一般紧跟在MUL指令之后使用,影响标志位为SF,ZF,PF。其它标志位无定义,98,2019/5/28,举例,MOV AL,07H MOV BL,09H MUL BL;(AX)=003FH AAM;(AX)=0603H

42、,99,2019/5/28,(4)非压缩BCD码的除法调整指令AAD (ASCII Adjust for division),格式:AAD 功能:将AX中两位非压缩BCD码(一个字节存放一位BCD码),转换为二进制数的表示形式。 调整方法:(AL)(AH) 0AH+(AL),(AH)0 AAD指令用于二进制除法DIV操作之前,影响的标志位为SF,ZF,PF。其它标志位无定义,100,2019/5/28,举例,MOV AX,0605H MOV BL,09H AAD;AX=0041H DIV BL;AX=0207H,101,2019/5/28,使用算术运算类指令应注意,如果没有特别规定,参与运算的

43、两个操作数数据类型必须一致,且只允许一个为存储器操作数; 如果参与运算的操作数只有一个,且为存储器操作数,必须使用PTR伪指令说明数据类型; 操作数不允许为段寄存器;目的操作数不允许为立即数; 如果是存储器寻址,则存储器各种寻址方式均可使用。,102,2019/5/28,3.3.3逻辑运算指令,逻辑运算指令 移位指令 循环移位指令,103,2019/5/28,1.逻辑运算指令 (1)逻辑与指令AND(And),格式:AND DST,SRC;(DST)(DST)(SRC) 功能:目的操作数DST和源操作数SRC按位进行逻辑与运算,结果存目的操作数中。源操作数可以是通用寄存器、存储器或立即数。目的

44、操作数可以是通用寄存器或存储器操作数。 AND指令影响标志位为SF,ZF,PF,并且使OF=CF=0,104,2019/5/28,举例,AND DI,BX AND AL,0FH;(AL)(AL)0FH AND指令常用于将操作数中某位清0(称屏蔽),只须将要清0的位与0,其它不变的位与1即可,105,2019/5/28,(2)逻辑或指令OR(OR),格式:OR DST,SRC;(DST)(DST)(SRC) 功能:目的操作数DST和源操作数SRC按位进行逻辑或运算,结果存目的操作数中。源操作数可以是通用寄存器、存储器或立即数。目的操作数可以是通用寄存器或存储器操作数。 OR指令影响标志位为SF,

45、ZF,PF。并且使OF=CF=0OR指令常用于将操作数中某位置1,只需将要置1的位或1,其它不改变的位或0即可。例如:OR AL,80H;将AL中最高位置1,106,2019/5/28,(3)逻辑异或指令XOR(Exclusive or),格式:XOR DST,SRC;(DST)(DST)(SRC) 功能:目的操作数DST和源操作数SRC按位进行逻辑异或运算,结果送目的操作数。源操作数可以是通用寄存器、存储器或立即数。目的操作数可以是通用寄存器或存储器操作数。 XOR指令影响标志位为SF,ZF,PF,并且使OF=CF=0 XOR指令常用于将操作数中某些位取反,只需将要取反的位异或1,其它不改变

46、的位异或0即可。 例如:XOR AL,OFH;将AL中低4位取反,高4位保持不变,107,2019/5/28,(4)逻辑非指令NOT(NOT),格式:NOT DST;(DST) 功能:对目的操作数DST按位取反,结果回送目的操作数。目的操作数可以为通用寄存器或存储器。NOT指令对标志位无影响,108,2019/5/28,(5)测试指令TEST(Test),格式:TEST DST,SRC;(DST)(SRC)影响标志位 功能:目的操作数DST和源操作数SRC按位进行逻辑与操作,结果不回送目的操作数。源操作数可以为通用寄存器、存储器或立即数。目的操作数可以为通用寄存器或存储器操作数 TEST指令影

47、响标志位为SF,ZF,PF,并且使OF=CF=0,109,2019/5/28,举例,TEST AL,80H;测试AL中最高位 JZ NEXT;如果最高位为0,转到标志NEXT处,110,2019/5/28,2.移位指令,移位指令对操作数按某种方式左移或右移,当移位位数为1时可以由立即数直接给出,否则由CL间接给出。移位指令分移位指令和循环移位指令,111,2019/5/28,(1)移位指令,移位指令目的操作数DST可以为通用寄存器或存储器操作数,图 3-14 移位指令示意图 (a)逻辑和算术左移指令; (b)算术右移指令; (c)逻辑右移指令,112,2019/5/28,算术左移指令SAL(S

48、hift arithmetic left),格式:SAL DST,CNT 功能:按照操作数CNT规定的移位位数,对目的操作数进行左移操作,最高位移入CF中。每移动一位,右边补一位0 目的操作数可以为通用寄存器或存储器操作数,113,2019/5/28,逻辑左移指令SHL(Shift logical left),格式:SHL DST,CNT 功能:与SAL相同。 SAL,SHL指令影响标志位OF,SF,ZF,PF,CF,114,2019/5/28,举例,SHL BYTE PTR DI,1 SAL BX,CL,115,2019/5/28,算术右移指令SAR(Shift arithmetic rig

49、ht),格式:SAR DST,CNT 功能:按照操作数CNT规定的移位次数,对目的操作数进行右移操作,最低位移至CF中,最高位(即符号位)保持不变,如图3-14(b)所示。目的操作数可以为通用寄存器或存储器操作数,116,2019/5/28,逻辑右移指令SHR(Shift logical right),格式:SHR DST,CNT 功能:按照操作数CNT规定的移位位数,对目的操作数进行右移操作,最低位移至CF中。每移动一位,左边补一位0 目的操作数可以为通用寄存器或存储器操作数 SAR、SHR指令影响标志位OF,SF,ZF,PF,CF,117,2019/5/28,举例,SAR BYTE PTR SI, 1 SHR DX, CL,118,2019/5/28,应用,算术/逻辑左移,只要结果未超出目的操作数所能表达的范围,每左移一次相当于原数乘2 算术右移只要无溢出,每右移一次相当于原数除以2,

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报