第3章8086指令系统2009_第1页
第3章8086指令系统2009_第2页
第3章8086指令系统2009_第3页
第3章8086指令系统2009_第4页
第3章8086指令系统2009_第5页
已阅读5页,还剩123页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、黄玉清制作第三章第三章 8086 8086指令系统指令系统3.1 概述概述3.2 指令格式指令格式3.3 8086的操作数的寻址方式的操作数的寻址方式3.3.1 立即数寻址立即数寻址3.3.2 寄存器寻址寄存器寻址3.3.3 存储器操作数寻址方式存储器操作数寻址方式3.4 IA-32通用通用指令指令3.4.1 数据传送指令数据传送指令 3.4.2 算术运算指令算术运算指令 3.4.3 逻辑运算、移位逻辑运算、移位 3.4.4 串操作指令串操作指令 3.4.5 控制转移指令控制转移指令 3.4.6 处理器控制指令处理器控制指令本章小节本章小节思考题思考题黄玉清制作本章重点本章重点基本数据类型基本

2、数据类型8086/80888086/8088寻址寻址8086 8086 的指令系统的指令系统本章难点本章难点8086 8086 的指令系统应用的指令系统应用黄玉清制作3.1 概述概述80 x86结构的基本数据类型结构的基本数据类型字节:字节:8位位字:字:16位,位,2个字节个字节双字:双字:32位,位,4个字节个字节四字:四字:64位,位,8个字节个字节(80486CPU引入)引入)双四字:双四字:128位,位,16个字节个字节(Pentium III)数据在内存中的字节顺序数据在内存中的字节顺序80X86多字节数据的存放原则是低位字节在低端地址,多字节数据的存放原则是低位字节在低端地址,高

3、位字节在高端地址。高位字节在高端地址。而最低地址就是操作数的地址而最低地址就是操作数的地址。 黄玉清制作例如例如,1B23H存放在存放在2000H与与2001H地址单元地址单元中,中,2000H即为该操作数的地址;即为该操作数的地址; 黄玉清制作本讲要解决的问题本讲要解决的问题: 8086/8088: 8086/8088寻址寻址指令系统指令系统?指令格式指令格式?寻址概念寻址概念?寻址方式寻址方式?操作数寻址的方法操作数寻址的方法?黄玉清制作3.2 3.2 指令格式指令格式指令格式指令格式通用格式如下:通用格式如下:操作码域:操作码域: 存放指令的操作码,即指明计算机所要执行存放指令的操作码,

4、即指明计算机所要执行的操作。的操作。地址域地址域 :指出在指令执行过程中所需要的操作数或操作:指出在指令执行过程中所需要的操作数或操作数所在的地址。数所在的地址。操作码域操作码域 操作数或操作数地址操作数或操作数地址黄玉清制作立即数立即数位移量位移量寄存器寄存器方式方式操作码操作码1-21-2字节字节低低字字节节1-21-2字节字节1 1字节字节(寻址方式)(寻址方式)1 1字节字节高高字字节节高高字字节节低低字字节节r/mr/m3 3位位regreg3 3位位modmod2 2位位opcodeopcode8086 CPU指令格式指令格式黄玉清制作机器指令机器指令:计算机能识别和执行的指令的二

5、进制:计算机能识别和执行的指令的二进制代码。如:代码。如:10110000011000101011000001100010汇编指令汇编指令:用:用助记符助记符表示表示机器指令机器指令的操作码和操的操作码和操作数,例如上面指令的汇编指令是作数,例如上面指令的汇编指令是 MOV AL,62HMOV AL,62H黄玉清制作指令执行时间指令执行时间指令执行时间:由时钟周期长短和执行指令所需要指令执行时间:由时钟周期长短和执行指令所需要的时钟周期数决定。的时钟周期数决定。MOV AX,BX ;执行时间最短执行时间最短MOV AX,1000HMOV 2000H,CX黄玉清制作 3-3 8086 3-3 8

6、086的操作数的寻址方式的操作数的寻址方式寻址寻址根据指令内容确定操作数地址的过程,称为寻址。根据指令内容确定操作数地址的过程,称为寻址。有效地址有效地址根据寻址方式计算所得到的地址叫做根据寻址方式计算所得到的地址叫做有效地址有效地址EAEA,也就是段内偏移地址。有效地址还需要与相应的段也就是段内偏移地址。有效地址还需要与相应的段基地址组合才是基地址组合才是2020位的物理地址,该工作由位的物理地址,该工作由CPUCPU完完成。成。寻址方式在两种方式下被涉及:寻址方式在两种方式下被涉及:操作数的寻址方式操作数的寻址方式和和对调用或转移指令对调用或转移指令的寻址方式的寻址方式。本讲只介绍对操作数

7、的寻址本讲只介绍对操作数的寻址!黄玉清制作计算机中操作数数按存放的方法分为:计算机中操作数数按存放的方法分为:立即数(指令中)立即数(指令中)寄存器数寄存器数存储器数存储器数I/O端口端口操作数操作数寻址方式寻址方式立即数立即数立即数寻址立即数寻址寄存器数寄存器数寄存器寻址寄存器寻址串操作寻址串操作寻址存储器数存储器数直接寻址直接寻址寄存器间接寻址寄存器间接寻址基址变址寻址基址变址寻址变址寻址变址寻址端口寻址端口寻址直接寻址直接寻址寄存器间接寻址寄存器间接寻址黄玉清制作3.3.1 3.3.1 立即数寻址立即数寻址操作数由指令提供操作数由指令提供. 例例: MOV AL,80 H MOV AX,

8、1090 H MOV CX,1003.3.2 3.3.2 寄存器寻址寄存器寻址操作数在寄存器中。操作数在寄存器中。 MOV AH,BL MOV AX,BX MOV CX,AX1090H AH ALAXBX黄玉清制作3.3.3 3.3.3 存储器操作数寻址方式存储器操作数寻址方式规定段寄存器规定段寄存器正常来源其他来源偏移地址取 指 令CS无IP堆 栈 操 作SS无SP串 操 作 源 地 址DSCS、SS、ESSI串操作目的地址ES无DI用BP 间 接 寻 址SSCS、SS、ES有效地址EA一 般 数 据 存 取DSCS、SS、ES有效地址EA操作类型段基址黄玉清制作任何内存任何内存实际地址(实

9、际地址(PAPA)都由两部分组成:都由两部分组成:PAPA段基址段内偏移地址(此单元与段基址的距离)段基址段内偏移地址(此单元与段基址的距离)段内的段内的偏移地址偏移地址又称为又称为有效地址(有效地址(EAEA). . 黄玉清制作A1H70H10H.代码段代码段直接寻址直接寻址 操作数在存储器中,其地址由指令提供操作数在存储器中,其地址由指令提供。例例:MOV AXMOV AX, 1070 H 1070 H ( (DS) = 2000 HDS) = 2000 H,物理地址为:,物理地址为: PA=2000PA=20000 0H+1070H=21070 H H+1070H=21070 H 20

10、H 30 H 数据段数据段2000:10702000:10712000:1072AH ALAX黄玉清制作8086执行某种操作时,预先规定了采用的段和段寄执行某种操作时,预先规定了采用的段和段寄存器,即有基本的段约定,如果要存器,即有基本的段约定,如果要改变默认的段改变默认的段约定约定(即段超越即段超越),则需要在指令中,则需要在指令中明确指出明确指出来来. 例如:例如: MOV BX,ES:3400H;将附加段将附加段ES段中偏移地址为段中偏移地址为3400H和和3401H两单元两单元的内容送的内容送BX中。中。若用若用DATA代替偏移地址代替偏移地址3400H : MOV BX,ES:DAT

11、A黄玉清制作指令指令 寄存器寄存器 内存内存寄存器寄存器数据数据EA寄存器间接寻址寄存器间接寻址 操作数在存储器中操作数在存储器中,寻址方式同直接寻址相似,寻址方式同直接寻址相似,但偏移地址由指针寄存器提供但偏移地址由指针寄存器提供.黄玉清制作BX SIBP DIEA=8 或 16 位移量+EA=8 或16 位移量BX BP SI DI +8086CPU,有效地址有效地址EA计算计算:黄玉清制作1、以、以BX寄存器进行间接寻址寄存器进行间接寻址数据段基址寻址数据段基址寻址例:例: MOV AX,BX 若若 (DS) = 2000 H,(BX) = 1000 H 操作数操作数物理地址物理地址PA

12、: PA=2000H*16+1000H=21000H 将将 21000 H、21001 H 单元的内容送单元的内容送 AX。 执行结果:执行结果: (AX) = 5B40 H 40 5B 2000:1000 H2000:1001 H8BH07H.代码段数据段AH AL5B 40黄玉清制作2、以、以BP寄存器进行间接寻址寄存器进行间接寻址堆栈段基址寻址堆栈段基址寻址例:例: MOV AX,BP 若若 (SS) = 5000 H,(BP) = 3000 H, 操作数物理地址:操作数物理地址: PA=5000H*16+3000H=53000H 将将 53000 H、53001 H 单元的内容送单元的

13、内容送 AX。 执行结果:执行结果: (AX) = 4A56 H3、以、以SI、DI寄存器进行间接寻址寄存器进行间接寻址变址寻址变址寻址例:例: MOV AX,SI 若若 (DS) = 3000 H,(SI) = 4000 H, 物理地址物理地址PA=34000H, 执行结果:执行结果: (AX)=201A H 34000 H34001 H1A H20 H 56 H 4A H53000H53001H黄玉清制作寄存器相对寻址寄存器相对寻址例:例:MOV AL,BX+5; 若若(DS)=6000H,(BX)=2000H,6000H 9AHA AX X D DS S操作码操作码05H9AH2000H

14、 B BX X数据段代码段EA2000H+05H=2005H62005 60000黄玉清制作例如:例如:MOV AL,COUNT SI 或或 MOV AX,COUNT +SI设设(DS)= 6000H,(SI)= 1000H,COUNT=05H 有效地址有效地址EA1000H05H=1005H 物理地址物理地址PA=6000H16 + 1000H + 05H = 61005H 黄玉清制作 基址变址寻址方式基址变址寻址方式例:例:MOV AX, BPSI 设(设(SS)=2000H,(,(SI)= 1000H,(,(BP)= 5000H,有效地址有效地址EA1000H+5000H= 6000H。

15、 黄玉清制作相对基址变址寻址方式相对基址变址寻址方式4000H50H A AL LA AX X D DS S34H12H 50H0200H B BX X数据段代码段EA0200H+00101234H=1444H41444H 40000H EA0010H D DI I 操作码操作码黄玉清制作例例:设:设 (BX )= 1000H,(DI) = 2000H,(DS) = 3000H, 位移量位移量 = 0020H H。1)直接寻址)直接寻址: MOV AX,2100H 有效地址有效地址EA = 2100 H 物理地址物理地址 PA= 3000 H*16+2100 H =32100H2)寄存器间接寻

16、址)寄存器间接寻址: MOV AX,BX EA = 1000H PA =30000H +1000H =31000H3)BX寄存器相对间接寻址寄存器相对间接寻址: MOV AX,BX+0020H EA =1000H +0020H = 1020H PA =30000H +1020H = 31020H黄玉清制作4)变址寻址)变址寻址: MOV AX,DI EA=? PA=?5)DI寄存器相对变址寻址寄存器相对变址寻址: MOV AX,DI+1B57H EA=? PA =? 6)基址加变址的寻址)基址加变址的寻址 : MOV AX,BX + DI 7)相对的基址加变址的寻址:)相对的基址加变址的寻址:

17、 MOV AX,BX + DI+1B57 H 思考题:思考题:黄玉清制作3.3.4 I/O3.3.4 I/O端口寻址端口寻址寻址个数寻址个数:最多可达:最多可达216=65536个个 8位位I/O端口(也可以定义端口(也可以定义16位或位或32位)位)直接寻址直接寻址地址编号地址编号256,可寻址可寻址I/O端口前端口前256个;个;IN AL, 60H ;将;将60H端口中的数据输入到端口中的数据输入到AL中。中。IN AX, 80H;将;将80H与与81H相邻两个端口的相邻两个端口的16位数据输入到位数据输入到AX中。中。用用DX寄存器寻址寄存器寻址地址范围可达地址范围可达FFFFH,可寻

18、址可寻址64KI/O端口。端口。MOVDX, 333H;将端口地址送入;将端口地址送入DXOUTDX, AL;将;将AL中的数据输出到中的数据输出到DX所指的端口中所指的端口中MOVDX, 330H;将端口地址送入;将端口地址送入DXIN AL, DX ;将;将DX所指的端口中的数据输入到所指的端口中的数据输入到AL中中黄玉清制作3.4 通用指令重点介绍重点介绍8086 8086 的指令系统的指令系统指令系统是一台计算机能识别和执行的全部指令的集指令系统是一台计算机能识别和执行的全部指令的集合。合。 8086汇编指令系统,分为汇编指令系统,分为6类:类:数据传送指令数据传送指令 14条条算术运

19、算指令算术运算指令 20逻辑运算、移位逻辑运算、移位 13串操作指令串操作指令 13控制转移指令控制转移指令 28处理器控制指令处理器控制指令 12黄玉清制作3.4.1 3.4.1 数据传送指令数据传送指令(14(14条条) )MOV LEAPUSH LDSPOP LES XCHG LAHF PUSHFXLAT SAHF POPF IN OUT黄玉清制作数据传送指令数据传送指令: :传送指令把数据从一个位置传送到另一个位置传送指令把数据从一个位置传送到另一个位置除标志寄存器传送指令外,均不影响标志位除标志寄存器传送指令外,均不影响标志位重点掌握重点掌握MOV XCHG XLAT PUSH PO

20、P LEA黄玉清制作MOV传送指令传送指令格式:格式:MOV dst,src 操作操作: dst src把一个字节或字的操作数从源地址传送至目的地址把一个字节或字的操作数从源地址传送至目的地址【例【例3.8】 MOV CX,AX 若若(AX)1A90H,执行该指令后,执行该指令后, (CX)1A90H,(AX)1A90H不变不变【例【例3.9】 MOV DI,BX20H 执行指令前执行指令前,若若(DS)=1000H,(BX)2000H, 则则EA=2000H+20H=2020H, 而而(12020H)=56,(12021H)=78H 执行指令后,执行指令后,(DI)=7856H ( (一一)

21、.).通用型传送指令通用型传送指令黄玉清制作注意注意:1、源和目的操作数不能都是存储器数、源和目的操作数不能都是存储器数2、目的操作数不能是立即数,也不能是、目的操作数不能是立即数,也不能是CS寄存器寄存器3、不允许两个段寄存器之间传送数据、不允许两个段寄存器之间传送数据4、立即数不能直接送段寄存器、立即数不能直接送段寄存器5、不影响标志位、不影响标志位 ( (一一).).通用型传送指令通用型传送指令黄玉清制作例如例如:MOV指令寄存器传送:指令寄存器传送:MOV AL,BL; (AL) (BL)MOV CX,AX; (CX) (AX)MOV SP,AX; (SP) (AX)MOV指令立即数传

22、送:指令立即数传送:MOV CL,4;(CL)4,字节传送,字节传送MOV DX,0FFH;(DX)00FFH,字传送,字传送MOV SI,200H ;(SI)0200H,字传送,字传送( (一一).).通用型传送指令通用型传送指令黄玉清制作例如例如:MOV指令寄存器与存储器之间传送指令寄存器与存储器之间传送MOV DX, AX ;(DX)AX MOV AL,BX ;(AL) DS:(BX) MOV DX,BP+4 ;(DX) SS:(BP+4) MOV AL,BUFFER ;BUFFER是已定义的存储单元符号地址是已定义的存储单元符号地址MOV指令段寄存器传送指令段寄存器传送MOV SS,

23、AX ;(SS) (AX)MOV DS,DATSI+BX MOV BP+DI,ES( (一一).).通用型传送指令通用型传送指令黄玉清制作例题:例题:判断下列指令是否正确:判断下列指令是否正确:MOV DS, ES;非法指令;非法指令MOV DS, 100H;非法指令;非法指令修正:修正:mov ax,es mov ds,ax修正:修正:mov ax,100h mov ds,axMOV AX,BL MOV 100H,DXMOV DI,200修正:修正:MOV AX,BX修正:修正:MOV 0100H,DX 修正:修正:MOV BYTE PTRDI,200BYTE PTR说明是字节操作说明是字节

24、操作( (一一).).通用型传送指令通用型传送指令黄玉清制作MOV DATBX+DI,AX MOV AREA2, AREA1;假设;假设AREA和和AREA是两个字变量是两个字变量修正:修正:MOV AX,AREA2MOV AREA1,AX问题:如何在存储器中传送一个数据块?问题:如何在存储器中传送一个数据块?黄玉清制作MOV SI,OFFSET AREA1MOV DI,OFFSET AREA2MOV CX,100AGAIN: MOV AL,SI MOV DI,AL INC SI INC DI DEC CX JNZ AGAIN 103045D79AAREA1AREA2例例31:数据块传送。:数

25、据块传送。黄玉清制作2.交换指令交换指令格式格式: XCHG DST,SRC注意:注意:例:例:XCHG AX,BX XCHG BX,1000H 例例: 读下列程序段读下列程序段,写出写出AX,BX的内容的内容. MOV AX,1234H MOV BX,5678H PUSH AX POP BX XCHG AX,BX HLT( (一一).).通用型传送指令通用型传送指令黄玉清制作3.堆栈操作指令堆栈操作指令堆栈是一个堆栈是一个“后进先出后进先出FILO”FILO”(或说(或说“先进后先进后出出FILO”FILO”)的主存区域,位于堆栈段中;)的主存区域,位于堆栈段中;SSSS段段寄存器寄存器记录

26、其段地址记录其段地址堆栈只有一个出口,即当前栈顶;用堆栈只有一个出口,即当前栈顶;用堆栈指针堆栈指针寄存器寄存器SPSP指定指定堆栈只有两种基本操作:进栈和出栈堆栈只有两种基本操作:进栈和出栈两条指令两条指令PUSH和和POP黄玉清制作(1)入栈指令入栈指令PUSH 指令格式:指令格式:PUSH src执行操作执行操作:(1)(SP)(SP)-2, (2) (SP) (src)L,(SP+1) (src)H标志位:不影响。标志位:不影响。【例【例3.11】 PUSH AX指令执行前,若(指令执行前,若(SS)= 2000H,(,(SP)= 0008H,(AX)= 12C3H。指令执行后指令执行

27、后: 栈顶指针(栈顶指针(SP)()(SP)-2 = 0008-2 = 0006H,栈顶字单元为栈顶字单元为12C3H, ( (一一).).通用型传送指令通用型传送指令指令指令黄玉清制作( (一一).).通用型传送指令通用型传送指令PUSH AX入栈操作过程示意图入栈操作过程示意图 黄玉清制作(2)出栈指令出栈指令POP 指令格式:指令格式:POP dst执行操作:(执行操作:(dst )L (SP), (dst)H(SP+1),(,(SP)(SP)+2标志位:不影响。标志位:不影响。POP mem16/reg16/segreg【例【例3.14】 POP BX 指令执行前,若(指令执行前,若(

28、SS)= 2000H,(,(SP)0006H,栈顶内容为栈顶内容为1278H,即,即:(20006H)=78H,(,(20007H)= 12H。指令执行后指令执行后: (BX) 1278H 栈顶指针(栈顶指针(SP)()(SP)+20008H 黄玉清制作POP BX出栈操作过程示意图出栈操作过程示意图 黄玉清制作例例:设(设(SS)=2000H,(,(SP)=00C0H,执行下述指,执行下述指令后,令后,SP的值的值=?物理地址?物理地址PA=?1) PUSH AX ; SP=SP-2=00C0H-2=00BEH,PA=200BEH2) PUSH BX ; SP=00BE-2=00BCH,PA

29、=200BCH3) POP ; SP=00BC+2=00BEH,PA=200BCH ( (一一).).通用型传送指令通用型传送指令黄玉清制作1.换码指令换码指令:格式格式: XLAT 操作操作:(AL)(AL+BX)例例:读下列程序段读下列程序段,写出写出AL,BX的内容的内容 MOV BX, 2000H MOV AL,2 XLAT HLT303132392000H2001H2009HTABLE( (二二) ) 累加器专用传送指令累加器专用传送指令黄玉清制作2.输入输出指令输入输出指令1)、直接寻址:)、直接寻址:寻址空间为:寻址空间为:0 255 字节字节格式格式: IN AL,n OUT

30、n,AL IN AX,N OUT N,AX2)、间接寻址:)、间接寻址:寻址空间为:寻址空间为:0000H FFFFH 格式格式: IN AL,DX OUT DX,AL IN AX,DX OUT DX,AX 注注:1、只能用累加器作为执行输入、只能用累加器作为执行输入/输出过程的机构。输出过程的机构。 2、用直接输入、用直接输入/输出指令时,寻址范围为输出指令时,寻址范围为 1255。 ( (二二) ) 累加器专用传送指令累加器专用传送指令黄玉清制作1.1.取有效地址取有效地址 格式:格式:LEA reg16,memLEA reg16,mem【例【例3.18】 设(设(BX)=1000H,(,

31、(BP)=6000H,(,(SI)3500H,DAT的偏移地址为的偏移地址为20H,指出分别执行下列指令,指出分别执行下列指令后的结果。后的结果。LEABX,BX+50H; 执行指令后,(执行指令后,(BX)= 1050HLEADI,DATBPSI; 执行指令后,(执行指令后,(DI)= 6000H+3500H+20H = 9520HLEA BP,3456H; 执行指令后(执行指令后(BP)= 3456HLEABX,DAT; 执行指令后(执行指令后(BX)= 0020H黄玉清制作2.传送指针到传送指针到ES格式:格式:LES reg16,mem32 reg(EA), ES (EA+2)3.传送

32、指针到传送指针到DS格式:格式:LDS reg16,mem32 reg(EA), DS (EA+2)( (三三) ) 目标地址传送指令目标地址传送指令黄玉清制作 例题例题:LDS DI,2000H(DS)=1000H 12000H12001H12002H12003H5AH34 H00H30 H(DI)=345AH (DS)=B521H( (三三) ) 目标地址传送指令目标地址传送指令黄玉清制作1 读标志:读标志:LAHF 2.设置标志:设置标志:SAHF3.标志寄存器入栈标志寄存器入栈 : PUSHF 把标志推入堆栈。把标志推入堆栈。 SP SP-2,PSW(FLAGH)入栈入栈 4.标志寄存

33、器出栈标志寄存器出栈: POPF PSW(FLAG ) SP+1,SP SP SP+2D7 D6 D5 D4 D3 D2 D1 D0 SF ZF AF PF CFFLAG( (四四) ) 标志传送标志传送黄玉清制作例例:下面这些指令哪些是正确的?哪些是错误的?下面这些指令哪些是正确的?哪些是错误的?如是错误的,请说明原因。如是错误的,请说明原因。1) MOV DS,AX ( )2) MOVBX,1000 ( )3) PUSHCS ( )4) POP CS ( )5) IN BX,DX ( )6) MOV 1000H,AX ( )7) MOV AX,BL ( )8) OUT 300H,AX (

34、)9) OUT 20H,AL ( )黄玉清制作 例例:说明下面程序执行后说明下面程序执行后,AX,CX,DI的内容是什么的内容是什么? MOV DI, 3500H MOV CX, 0010H MOV AX, 0000H PUSH DI POP CX XCHG AX, CX (AX)=3500H, (CX)=0000H, (DI)=3500H黄玉清制作3.4.2 3.4.2 算术运算指令算术运算指令加法:加法:ADD、ADC、INC减法:减法:SUB、SBB、DEC、DAS乘法:乘法:MUL、IMUL、AAM除法除法:DIV、IDIV、AAMAAA、DAA、AAS 、DAS、AAM、AAD黄玉清

35、制作1.不带进位位的加法不带进位位的加法格式:格式:ADD DST,SRC ; DST DST+SRC例例: ADD AL,50H ; (AL) AL)+50H ADD BX+DI,AX2.带进位位的加法带进位位的加法格式:格式:ADC DST,SRC ;DST DST+SRC+CF例:例: ADC AX,SI ; (AX) (AX)+(SI)+CF ADC DX,SI 注意:指令影响标志注意:指令影响标志AF、OF、PF、SF、ZF,CF。 ( (一一) ) 加法指令加法指令黄玉清制作3.加一指令加一指令格式:格式:INC src ; src src+1 将操作数内容加一,再回送操作数。将操

36、作数内容加一,再回送操作数。 例:例: INC AX ;(AX) (AX)+1 INC BL ;(BL) (BL)+1注意:注意:INC指令影响标志指令影响标志AF、OF、PF、SF、ZF, 但但不影响不影响进位标志进位标志CF。例例:读程序读程序:MOV AL, 1 MOV BL, 0FFH ADD AL, BL执行指令序列后执行指令序列后,(AL)= 00H), CF= 1 , OF= 0 。( (一一) ) 加法指令加法指令黄玉清制作例例2.在数据段在数据段1000H开始存有连续开始存有连续4个字节个字节,编程编程求和求和,并将和存在并将和存在SUM单元单元,不考虑溢出问题不考虑溢出问题

37、. MOV SI,1000H MOV AL,SI ADD AL,SI+1 ADD AL,SI+2 ADD AL,SI+3 ADD AL,SI+4 MOV SUM,AL HLT( (一一) ) 加法指令加法指令黄玉清制作4.非组合非组合BCD码十进制校正码十进制校正AAA操作:执行操作:执行AAA,若,若AL低低4位的值大于位的值大于9或或 AF=1, 则在低则在低4位加位加6,同时置,同时置CF=1, AH+1。注意:注意:AAA指令影响标志指令影响标志AF、CF.例例: 8+7=15 MOV AL,8H MOV BL,7H ADD AL,BL ;(;(AL)=0FH,AF=0 AAA ;(;

38、(AL)=15H,AF=1,CF=1 AF1,CFAF 0000 1000(8) + 0000 0111(7) 0000 1111(FH) + 0000 0110 0001 0101( (一一) ) 加法指令加法指令黄玉清制作5.组合组合BCD码十进制校正码十进制校正DAA操作:执行操作:执行DAA,若,若AL的低的低4位的值大于位的值大于9或或 AF=1, 则加则加06H;若;若AL的高的高4位的值大于位的值大于9,则加,则加60H。注意:注意:DAA指令影响标志指令影响标志AF、CF、PF、SF、ZF。例例: 89+75=16489+75=164 MOV AL,89H MOV BL,75H

39、 ADD AL,BL ;(AL)=0FEH,AF=0,CF=0 DAA ;(ALAL)=64H=64H,CF=1CF=1 ( (一一) ) 加法指令加法指令 1000 1001(89) + 0111 0101(75) 1111 1110(FEH) + 0110 0110 1 0110 0100 黄玉清制作例例3-1:两个十进制数两个十进制数2964,4758放在放在BCD1和和BCD2开始开始的单元的单元,低位在前低位在前,高位在后高位在后,结果放在结果放在BCD3中中. BCD1 DB 64H,29H BCD2 DB 58H,47H BCD3 DB ?,? MOV AL,BCD1 ADD A

40、L,BCD2;(AL)=0BCH DAA ;(AL)=22H, MOV BCD3,AL MOV AL,BCD1+1 ADC AL,BCD2+1 DAA MOV AL,BCD3+1 29 64+ 47 5877 22( (一一) ) 加法指令加法指令黄玉清制作1.不带借位的减法不带借位的减法格式:格式:SUB DSTSUB DST,SRCSRC ; DST ; DST DST-SRC DST-SRC例例: SUB BXSUB BX,CX CX ;(BX)(BX)( (BX)-(CX)BX)-(CX) SUB WORD PTR DI SUB WORD PTR DI,1000H1000H2.带借位的

41、减法带借位的减法格式格式: : SBB DST SBB DST,SRCSRC DST DST DST DST SRC SRC CFCF 例:例: SBB AXSBB AX,2030H2030H; 执行:执行:(AX) (AX) (AX) (AX) 2030H 2030H CF CF SBB DX,BX+20H SBB DX,BX+20H ( (二二) )减法指令减法指令黄玉清制作3.减量指令减量指令 格式:格式: DEC DST ; DST DST 14.求补指令求补指令格式:格式: NEG DST ; 对对DST求补,求补,0-DST例如例如: MOV AL,1 NEG AL ;(AL)=0

42、FFH,CF=1,OF=0,SF=15.比较指令比较指令格式格式: CMP DST,SRC; DST-SRC注意:注意:CMP指令执行相减,但不回送结果,结果只影响标志位指令执行相减,但不回送结果,结果只影响标志位CF、OF、SF、ZF。( (二二) )减法指令减法指令黄玉清制作6.6.非组合非组合BCDBCD码减法十进制校正码减法十进制校正AASAAS操作:执行操作:执行AAA,若,若AL的低的低4位的值大于位的值大于9或或 AF=1, 则在则在AL的低的低4位减位减6,同时置,同时置CF=1。结果只影响标志位结果只影响标志位CFCF、AFAF。7.7.组合组合BCDBCD码减法十进制校正码

43、减法十进制校正DASDAS与与AASAAS相似相似黄玉清制作 例例3-2:假设假设AL=13H,BL=09H,读下列指令读下列指令,分析单分析单独执行这些指令后的结果独执行这些指令后的结果.程序片段程序片段:1) INC AL ;(AL)=14H2) ADD AL,BL ;(AL)=1CH3) SUB AL,BL ;(AL)=0AH 4) DEC BL ;(BL)=08H5) ADD AL,BL ;(AL)=1CH DAA ;(AL)=22H ( (二二) )减法指令减法指令黄玉清制作(三)乘法指令 二进制乘法特点二进制乘法特点: 两个两个8位数相乘,结果为位数相乘,结果为16位数。位数。 两

44、个两个16位数相乘,结果为位数相乘,结果为32位数。位数。 8086乘法指令特点:乘法指令特点: 一个乘数总是放在一个乘数总是放在AL(8位)或位)或AX (16位)中;位)中; 将将DX看成是看成是AX的扩展的扩展( (三三) )乘法指令乘法指令黄玉清制作乘法指令分:无符号数乘法指令分:无符号数MUL 有符号数有符号数IMUL例例:3 (-2)= -6 3 14 = 42(2AH) 3的补码:的补码:0011,-2的补码的补码 :1110 14的补码:的补码:11101)直接相乘直接相乘:对无符号数,结果正确。对无符号数,结果正确。 0011(3) 1110(-2或或14) 0010 101

45、0(2A) ( (三三) )乘法指令乘法指令黄玉清制作2)有符号相乘有符号相乘:负数复原为原码,并去掉符号:负数复原为原码,并去掉符号位,相乘后,结果添上符号位,再取补码。位,相乘后,结果添上符号位,再取补码。 0011(3) 0010(2) 0000 0110(6) 结果添上负号,结果添上负号,1 000 0110, 再取补码:再取补码:1111 1001+1=1111 1010=FAH= -6 3 (-2)= - 6,结果正确,结果正确 对于对于3 14,结果错误。,结果错误。( (三三) )乘法指令乘法指令黄玉清制作1 1、无符号数乘法、无符号数乘法 格式:格式: MUL src ;(A

46、X) (AL)src,字节,字节 ;(DX,AX) (AX) src,字,字 8位乘法位乘法 16位乘法位乘法 AX操作数操作数DX AX(16位)位)(16位)位)(32位)位)AL操作数操作数AH AL(8位)位)(8位)位)(16位)位) ( (三三) )乘法指令乘法指令黄玉清制作2、带符号数的乘法、带符号数的乘法 格式格式 :IMUL src 字节乘字节乘: ( AX ) (AL)*src, 字乘字乘 : (DX,AX) (AX)*src,字乘,字乘 例例:IMUL BL;AL的内容乘以的内容乘以BL的内容,结果送的内容,结果送AX IMUL DI ;AX的内容乘以的内容乘以DI的内容

47、,结果送的内容,结果送DX.AX IMUL BYTE PTR DI; AL的内容乘以的内容乘以DI所指单元的内容,结果送所指单元的内容,结果送AX ( (三三) )乘法指令乘法指令黄玉清制作例例:4902H403AH,结果送,结果送0510H0513H单元单元. MOV AX,4902H MOV BX,403AH MUL BX MOV 0510H,AX MOV 0512H,DX ( (三三) )乘法指令乘法指令黄玉清制作( (四四) ) 除法指令除法指令1 1、无符号数除法、无符号数除法 格格 式:式: DIV src: 字节除字节除: (AX) src, (AL) 商商, (AH) 余数余数

48、 字字 除除: (DX. AX) src, (AX) 商商, (DX) 余数余数 注注 意:意:被除数在累加器中,且必须是除数的被除数在累加器中,且必须是除数的两倍字长。两倍字长。 ( (四四) )除法指令除法指令黄玉清制作 8位除法: 被除数被除数(16位位) 除数除数(8位位) 余数(8位) 商(8位)AH AL操作数操作数AH AL( (四四) )除法指令除法指令黄玉清制作DX AX操作数操作数DX AX 16位除法: 被除数(32) 除数(16) 余数(16) 商(16)( (四四) )除法指令除法指令黄玉清制作2、有符号数除法、有符号数除法 格式:格式: IDIV src 字节除:字

49、节除:(AL) AX src(商商),(AH) 余数,余数, 字除:字除: (AX) (DX AX) src(商)(商) (DX) 余数余数 3、扩展字节为字、扩展字节为字 CBW 将将AL寄存器的符号位扩展到寄存器的符号位扩展到AH中。中。 (AL)=80H,执行执行CBW后后,(AH)=FFH。( (四四) )除法指令除法指令黄玉清制作4、扩展字为双字、扩展字为双字 CWD (DX,AX )(AX)将将AX寄存器的符号位扩展到寄存器的符号位扩展到DX中。中。 (AX)=8000H,执行执行CWD后后,(DX)=FFFFH。黄玉清制作例例3-3:设设AL=-2,BL=-1,编程求编程求-2/

50、-1=?,将商存将商存DL单元。单元。MOV AL, -2 ;(AL)=0FEHMOV BL, -1 ;(BL)=0FFHCBW ; (AX)=0FFFEHIDIV BL ;(AL)=2,(AH)=0MOV DL,ALHLT ( (四四) )除法指令除法指令黄玉清制作例例3-4:试计算试计算(X*Y+Z)/X,X,Y,Z都是都是16位无符号数位无符号数,结果存结果存在在S开始的单元开始的单元. X DW 304 Y DW 10 Z DW 200 S DW ?,? MOV AX,X MUL Y ADD AX,Z ADC DX,0 DIV X MOV S,AX MOV S+2,DX 304100B

51、E0DX AX2000CA8( (四四) )除法指令除法指令黄玉清制作5. 5. 非组合非组合BCDBCD码的乘法校正码的乘法校正 要求乘数和被乘数用非组合的要求乘数和被乘数用非组合的BCD码表示。码表示。 AAM ;(AH ) (AL)/(0AH)(商)(商) ;(AL) 余数余数 注意:注意:AAM指令紧跟指令紧跟MUL之后。之后。6. 6. 非组合非组合BCDBCD码除法校正码除法校正 AAD (AL) 10*(AH)+(AL),), (AH) 0 被除数为被除数为二位二位的非压缩的非压缩BCD码,存码,存AX中,中, 除数为除数为一位一位的非压缩的非压缩BCD码。码。注意注意:AAD指

52、令应该在除法指令之前。指令应该在除法指令之前。( (四四) )除法指令除法指令黄玉清制作 例例3-5:编写编写7乘以乘以9的程序段(的程序段(BCD码)。码)。 MOV AL,07H MOV BL,09H MUL BL AAM HLT 执行执行MUL后,后,AL=3FH 执行执行AAM后,后,AH=06H,AL=03H。( (四四) )除法指令除法指令黄玉清制作例例3-6:编写编写65 8 8的程序段。的程序段。 MOV AX,0605H ;65的的BCD码送码送AX MOV BL,08H ;8的的BCD码送码送BL AAD ;BCD码校正码校正 DIV BL 执行执行AAD后:后:AX=00

53、41H(65),),执行执行DIV后:后: AL=08H,AH=01H, 即:商为即:商为8,余数为,余数为1。( (四四) )除法指令除法指令黄玉清制作例例3-7:十进制数十进制数45除以除以7,商存,商存1000H单元中。单元中。编写程序段编写程序段: MOV AX,0405H;被除数存;被除数存AX MOV BL,07H ;除数存;除数存BL AAD ;除法;除法ASCII校正校正 DIV BL ;(AL) 商,商,(AH) 余数余数 MOV 1000H,AL;商存;商存1000H单元单元 HLT ;暂停;暂停( (四四) )除法指令除法指令黄玉清制作3.4.3 逻辑运算指令、移位指令逻

54、辑指令非循环移位指令循环移位指令黄玉清制作(一)、逻辑指令 AND dst,src OR dst,src XOR dst,src NOT dst TEST dst,src 例例: AND AX,BX AND AH,0FH OR AL,0F0H ; TEST AL , 01 ;测试测试AL的的D1=1? XOR AX , AX ;将将AX清零清零( (一)逻辑指令一)逻辑指令黄玉清制作例例3-7:设设AH=10011101,对,对AH的高四位置零,的高四位置零,低四位保持不变。低四位保持不变。 AND AH,0FH 1001 1101 AND 0000 1111 0000 1101例例3-8:

55、OR AH,00001101B OR AH,0F0H 0000 1101OR 1111 0000 1111 1101( (一)逻辑指令一)逻辑指令黄玉清制作例例3-9:使使AL中的数,第中的数,第0、1位取反。位取反。 MOV AL,01010001B ;送操作数;送操作数 XOR AL,03H ;送特征数;送特征数0000 0011 HLT ;暂停;暂停 0101 00 01 (AL) XOR 0000 00 1 1 0101 00 10 ( (一)逻辑指令一)逻辑指令黄玉清制作例例3-10:测试测试AL中的第中的第0、1、2位是否为零。位是否为零。 MOV AL,48H TEST AL,

56、07H;测;测AL的的0、1、2位位 HLT 0100 1000 AND 0000 0111 0000 0000( (一)逻辑指令一)逻辑指令黄玉清制作(二二)、非循环移位指令、非循环移位指令SHL dst,count;逻辑左移;逻辑左移SHR dst,count;逻辑右移;逻辑右移SAL dst,count;算数左移;算数左移SAR dst ,count;算数右移;算数右移CM L00M LCCM L0M LC( (二二) )非循环移位指令非循环移位指令黄玉清制作注意:移位指令影响标志位移位指令影响标志位CF、OF、PF、SF和和ZF。如果只移一位,指令中用如果只移一位,指令中用1指出移位的

57、位数,指出移位的位数,如果超过如果超过1位,必须用位,必须用CL预先指明移位的位数。预先指明移位的位数。例例: SAL DX,1 ;DX中的数左移中的数左移1位位 MOV CL,4 SAL AX,CL ;AX中的数左移中的数左移4位位 SHL AL,CL ; SHR AL, CL ;AL中的数右移中的数右移4位位( (二二) )循环移位指令循环移位指令黄玉清制作例例3-11:分析下列程序段,分析下列程序段,程序段:程序段:MOV AL,04H MOV BL,03H MOV CL,4 SHL BL,CL OR AL,BL HLT0000 0011BL0000 1000AL0011 0000BL

58、SHLOR0011 1000AL黄玉清制作例例3-11A: X乘以乘以10的例子。的例子。MOV AL,XSHL AL,1 ;X*2MOV BL,ALSHL AL,1 ;X*4SHL AL,1 ;X*8ADD AL,BL ;X*8+X*2黄玉清制作(三)、循环移位指令ROL dst,count;左小循环;左小循环ROR dst,count;右小循环;右小循环RCL dst,count;左大循环;左大循环RCR dst,count ;右大循环;右大循环例例: ROL AL,1操作操作 : AL: 1001 0001 0010 0011 ;CF=1例例: MOV CL, 2 ROL BH,CL 操

59、作操作: BH: 1010 1111;CF=0 1011 1110( (二二) )循环移位指令循环移位指令黄玉清制作 第四讲第四讲 串操作指令串操作指令 控制转移指令控制转移指令 系统功能调用系统功能调用 简单程序调试简单程序调试黄玉清制作3.4.4 串操作指令串操作指令(A)、串操作的特点、串操作的特点1)、)、SI寻址源操作数,段地址在寻址源操作数,段地址在DS,DI寻址目寻址目的操作数,段地址在的操作数,段地址在ES;2)、每次操作后,)、每次操作后,SI、DI自动修改:自动修改: DF=0,SI和和DI加加1或(或(+2),), DF=1,SI、DI减一或减二。减一或减二。3)、若源字

60、串和目的字串在同一段中,则把)、若源字串和目的字串在同一段中,则把DS和和ES设成相同数字。设成相同数字。4)、通过重复前缀实现串操作、通过重复前缀实现串操作黄玉清制作(B)、重复前缀、重复前缀:1、 REP(1). 若若(CX)=0,退出重复操作退出重复操作;(2). (CX) 0,执行串操作一次执行串操作一次,(CX) (CX)-1, 修改修改SI、 DI,转(,转(1)。)。2、相等重复前缀、相等重复前缀REPZ(REPE) (1). 若若(CX)=0,或或ZF=0,退出重复操作,退出重复操作; (2). (CX) 0,执行串操作一次执行串操作一次,(CX) (CX)-1, 修改修改SI

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论