微机原理指令系统的学习_第1页
微机原理指令系统的学习_第2页
微机原理指令系统的学习_第3页
微机原理指令系统的学习_第4页
微机原理指令系统的学习_第5页
已阅读5页,还剩127页未读 继续免费阅读

下载本文档

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

文档简介

1、1微型计算机原理及应用微型计算机原理及应用2第二章第二章 8086/8088 8086/8088指令系统指令系统3 2.1 2.1 寻址方式寻址方式 2.2 8086/8088 2.2 8086/8088指令系统指令系统 2.2.1 2.2.1 数据传送指令数据传送指令 2.2.2 2.2.2 算术运算指令算术运算指令 2.2.3 2.2.3 逻辑运算和移位指令逻辑运算和移位指令 2.2.4 2.2.4 程序控制指令程序控制指令 2.2.5 2.2.5 串操作指令串操作指令 2.2.6 2.2.6 标志处理与标志处理与CPUCPU控制指令控制指令42.1 8086/8088寻址方式寻址方式指令

2、格式:指令格式: 操作码操作码 操作数操作数操作码:计算机所要执行的操作,或指出操操作码:计算机所要执行的操作,或指出操作类型,是一种助记符。作类型,是一种助记符。操作数:操作的对象,可以是操作数本身或操作数:操作的对象,可以是操作数本身或存放操作数的内存存放操作数的内存(I/O端口端口)地址地址或其它有关或其它有关操作数的信息操作数的信息 。5汇编语言汇编语言是一种符号语言,它用助记符是一种符号语言,它用助记符来表示操作码,用符号或符号地址来表来表示操作码,用符号或符号地址来表示操作数或操作数地址,它与机器指令示操作数或操作数地址,它与机器指令是一一对应的。是一一对应的。6寻址方式:是指令中

3、用于说明如何寻找寻址方式:是指令中用于说明如何寻找操作数的方法。操作数的方法。计算机中操作数常存放在以下几个地方:计算机中操作数常存放在以下几个地方:指令代码中指令代码中,存放常量;,存放常量;MOV AX, 2070H寄存器中寄存器中:MOV AX, BX内存中内存中: MOV AX, 2000HI/O端口中(仅对端口中(仅对IN/OUT指令)指令): IN AL, 40H780868088的基本寻址方式有六种:的基本寻址方式有六种:寄存器寻址寄存器寻址 ;操作数存放在寄存器中操作数存放在寄存器中立即寻址立即寻址 ;操作数存放在内存代码段操作数存放在内存代码段直接寻址直接寻址 ;操作数存放在

4、内存操作数存放在内存寄存器间接寻址;寄存器间接寻址;操作数存放在内存操作数存放在内存变址寻址变址寻址 ;操作数存放在内存操作数存放在内存基址加变址寻址基址加变址寻址 ;操作数存放在内存操作数存放在内存8一、一、 寄存器寻址寄存器寻址操作数放在操作数放在CPU内部的寄存器中,可以是内部的寄存器中,可以是8位位或或16位寄存器,位寄存器,注意源操作数和目的操作数的注意源操作数和目的操作数的位数应一致。位数应一致。MOV AX, BX ;将将 BX中的内容传送到中的内容传送到AX中去中去MOV AL, BH ;将将 BH中的内容传送到中的内容传送到AL中去中去MOV CL, AX错误错误! 不匹配不

5、匹配9二、二、 立即寻址立即寻址操作数直接放在指令中,紧跟在操作码的后面,操作数直接放在指令中,紧跟在操作码的后面,与操作码一起放在存储器的代码段中(与操作码一起放在存储器的代码段中(8/16位)。位)。MOV AX, 2030H 对应机器码对应机器码: B8H 2030H4004H4003H4002H4001H4000H20H30HB8H4004H4003H4002H4001H4000H20H30HB8H内存偏移内存偏移地址地址单元内容单元内容注意注意别错别错!高字节高字节 高地址高地址低字节低字节 低地址低地址AXAHAL20H30H10三、三、 直接寻址直接寻址 操作数存放在内存中,在指

6、令中给出存放单元的操作数存放在内存中,在指令中给出存放单元的偏移地址偏移地址,如果不加说明,操作数,如果不加说明,操作数默认在数据段默认在数据段。MOV AX, 0020H;将将 数据段偏移地址为数据段偏移地址为0020H的地址中的内容传的地址中的内容传送到送到AX中去,相当于中去,相当于: MOV AX, DS:0020H注意:书写时加方括号。注意:书写时加方括号。物理地址物理地址: (DS)16指令中给的指令中给的16位偏移地址位偏移地址1112H34H56H码段码段堆栈段堆栈段数据段数据段0000H0001H0020H0021H0022HDS:0000H偏移地址偏移地址内存内容内存内容M

7、OV AX, 0020HAXAHAL3412AX: 3412H12也可以指向内存中其他段的数据,这时要在相也可以指向内存中其他段的数据,这时要在相应的偏移地址前加段超越符和应的偏移地址前加段超越符和“ :”。MOV AL, ES:0020H;将将 扩展段中偏移地址为扩展段中偏移地址为0020H单元中的内容传单元中的内容传送到送到AL中去中去MOV SS:0100H, BX;将将 BX中的内容传送到堆栈段中偏移地址为中的内容传送到堆栈段中偏移地址为0100H、0101H的单元中去的单元中去13四、四、 寄存器间接寻址寄存器间接寻址操作数存放在内存中,但其操作数存放在内存中,但其偏移地址偏移地址存

8、放在指令存放在指令中给出的寄存器中。中给出的寄存器中。MOV AX, BXBX中存放操作中存放操作数的偏移地址数的偏移地址其中,作为间接寻址的寄存器只能有其中,作为间接寻址的寄存器只能有4个:个:BX, SI, DI, BP,其他寄存器无此功能。其他寄存器无此功能。141、对、对DI、SI、BX间接寻址间接寻址2、对、对BP间接寻址间接寻址注意:用注意:用BP间接寻址,操作数默认在堆栈段间接寻址,操作数默认在堆栈段,用其余用其余3个寄存器时,操作数默认在数据段个寄存器时,操作数默认在数据段。物理地址物理地址: (DS)16DI/SI/BX中给的中给的16位偏移地址位偏移地址物理地址物理地址:

9、(SS)16BP中给的中给的16位偏移地址位偏移地址1578H00H56H码段码段堆栈段堆栈段数据段数据段0000H0001H1100H1101H1102HDS:0000H偏移地址偏移地址内存内容内存内容MOV AX, BXAXAHAL0078AX: 0078HMOV BX, 1100H16例例1:MOV AX, ES:BX;传送的操作数在附加段中,偏移地址存放在传送的操作数在附加段中,偏移地址存放在BX中。中。例例2:MOV BP, BX;将将BX中的内容传送到堆栈段中,其目的地的偏中的内容传送到堆栈段中,其目的地的偏移地址存放在移地址存放在BP中。中。例例3: MOV CX, 2000H;

10、错,不能对错,不能对CX间接寻址间接寻址17五、五、 变址寻址变址寻址操作数在内存中,由指定的寄存器内容,加上指操作数在内存中,由指定的寄存器内容,加上指令中给出的令中给出的8位或位或16位偏移量作为操作数的偏移地位偏移量作为操作数的偏移地址,计算方法:址,计算方法:偏移地址偏移地址寄存器内容寄存器内容指令中给定的偏移量指令中给定的偏移量同样,作为变址的寄存器只能有同样,作为变址的寄存器只能有4个:个:BX, SI, DI, BP,其他寄存器无此功能。其他寄存器无此功能。181、对、对DI、SI、BX变址寻址变址寻址2、对、对BP变址寻址变址寻址物理地址物理地址: (DS)16计算出的偏移地址

11、计算出的偏移地址物理地址物理地址: (SS)16计算出的偏移地址计算出的偏移地址注意:用注意:用BP变址寻址,操作数默认在堆栈段变址寻址,操作数默认在堆栈段,用其余用其余3个寄存器时,操作数默认在数据段个寄存器时,操作数默认在数据段。19MOV AX, TABDI变址寻址可以有多种格式:变址寻址可以有多种格式:MOV AX, BX+0A00H如:如:MOV AX, 0200H+BX假设假设DS:3000H, BX: 1000H 则操作则操作数所在地址:数所在地址:高高8位:位: 31201H 低低8位:位: 31200HMOV DH, SI+0200H;此时传送的操作数在此时传送的操作数在数据

12、段数据段中,其偏移地址是中,其偏移地址是SI寄存器中的内容加上寄存器中的内容加上0200H20六、六、 基址加变址寻址基址加变址寻址操作数存放在内存中,但其操作数存放在内存中,但其偏移地址偏移地址是由三部分是由三部分相加而成:相加而成: 基址寄存器内容基址寄存器内容变址寄存器内容变址寄存器内容偏移量偏移量基址寄存器只有基址寄存器只有2个:个:BX,默认的操作数在数据段默认的操作数在数据段;BP,默认的操作数在堆栈段默认的操作数在堆栈段。 变址寄存器只有变址寄存器只有2个:个:SI和和DI。 偏移量同样由指令给出。偏移量同样由指令给出。211、BX作为基地址作为基地址2、BP作为基地址作为基地址

13、物理地址物理地址: (DS)16计算出的偏移地址计算出的偏移地址物理地址物理地址: (SS)16计算出的偏移地址计算出的偏移地址22MOV AX, VALBX+SIMOV AX, 0200HBXSIMOV AX, 0200HBXBP;错误错误MOV AX, 0200HSIDI;错误错误MOV AX, COUNTBP+SI;欲取的数据在堆栈段欲取的数据在堆栈段MOV AX, BX+SI+0200H;欲传送的操作数在欲传送的操作数在数据段数据段中,其偏移地址是中,其偏移地址是BX寄寄存器中的内容存器中的内容加上加上SI寄存器中的内容寄存器中的内容加上加上0200H2312H34H56H78H9AH

14、BCHDEHF0H21000H21001H21002H21003H21004H21005H21006H21007H10H20H30H40H50H60H70H80H23000H23001H23002H23003H23004H23005H23006H23007H1AH2AH3AH4AH5AH6AH7AH8AH31000H31001H31002H31003H31004H31005H31006H31007H1BH2BH3BH4BH5BH6BH7BH8BH33000H33001H33002H33003H33004H33005H33006H33007HDS= 2000H SS=3000H BX=1000H

15、 BP=3000H MOV AX, BXMOV AX, 3000HMOV AX, BXMOV AL, BPMOV SI, 0002HMOV CX, BXSIMOV DL, BX+06HAX= 1000HAX= 2010HAX= 3412HAL= 1BHSI= 0002HCX= 7856HDL= DEH242.2 8086/8088指令系统指令系统8088/8086指令系统可以分为以下六个功能组:指令系统可以分为以下六个功能组: 数据传送数据传送(Data Transter) 算术运算算术运算(Arithmetic) 逻辑运算逻辑运算(Logic) 程序控制程序控制(Program Contro

16、l) 串操作串操作(String Menipulation) 标志处理标志处理 和和CPU控制控制(Processor Control)25一、数据传送指令一、数据传送指令1. 通用数据传送指令通用数据传送指令格式:格式:MOV OPRD1, OPRD2功能功能: (OPRD2) OPRD1CPU内部寄存器之间数据的传送内部寄存器之间数据的传送(除除CS、IP)立即数传送至立即数传送至CPU内部的通用寄存器组内部的通用寄存器组CPU内部的寄存器内部的寄存器(除除CS、IP)与存储器与存储器(所有寻所有寻址方式址方式)之间之间能实现用立即数给存储单元赋值能实现用立即数给存储单元赋值26 CS,I

17、P不能作为目的操作数不能作为目的操作数 MOV CS, AX 两个段寄存器间不能直接传送两个段寄存器间不能直接传送 MOV SS, DS 立即数不能直接传送给段寄存器立即数不能直接传送给段寄存器 MOV DS,2000H 内存单元间不能直接传送内存单元间不能直接传送 MOV SI, 2000H 立即数不能作为目的操作数立即数不能作为目的操作数 MOV 1000H, AX注意:注意:27MOV BL, AXMOV 100, CXMOV SI, DIMOV CS, AXMOV SI, DIMOV BH, 2DIMOV AX, CSMOV SS, 2400HMOV BP+4, AX错误,不匹配错误,

18、不匹配错误,立即数不能赋值错误,立即数不能赋值正确正确错误,错误,CS不能赋值不能赋值错误,内存间不能直接传送错误,内存间不能直接传送正确正确正确正确错误,段寄存器不能赋立即数错误,段寄存器不能赋立即数正确正确282. 堆栈指令堆栈指令 堆栈是按先进后出的原则组织的一段内存区堆栈是按先进后出的原则组织的一段内存区域,一般作临时存储器用域,一般作临时存储器用(仓库仓库)。其指针。其指针SP为为16位位的寄存器,始终指向栈顶的寄存器,始终指向栈顶(货物堆放的位置货物堆放的位置)。堆栈。堆栈的空间大小可用户指定。如:的空间大小可用户指定。如:SS的值为的值为 2000H 表示堆栈从表示堆栈从2000

19、0H处开始处开始20000H假设用户定义堆栈为假设用户定义堆栈为100个字节,个字节,则则SP自动设置为自动设置为0064H20064H100个字节个字节SP:0064H291、格式:格式:PUSH OPRD 功能功能: (OPRD)入栈入栈 FFH20000H20064H100个字节个字节SP(1) SP-1SP AHSPSP12H(2) SP-1SP ALSPSP34H先减指针先减指针, 再压数据再压数据, 先高后低先高后低(1) SPBL SP+1SP(2) SPBH SP+1SP先出数据先出数据, 再加指针再加指针,先低后高先低后高弹出低字节弹出低字节弹出高字节弹出高字节SPSP堆栈的

20、操作有两种堆栈的操作有两种:入栈入栈/出栈出栈例:例: MOV AX, 1234H PUSH AX;入栈入栈2、格式:格式:POP OPRD 功能功能: 栈顶内容送栈顶内容送OPRD30注意:注意:只能对只能对16位数进行操作,一次压入弹出一个字位数进行操作,一次压入弹出一个字PUSH AH;错错必须对寄存器的内容或内存单元的内容进行操作必须对寄存器的内容或内存单元的内容进行操作PUSH 2000H;错错 PUSH 2000H; 对对例:设例:设SP为为0100H,SS为为2000H, PUSH BX后,后,栈顶的物理地址是:栈顶的物理地址是: 20100H2H=200FEH而执行而执行POP

21、 BX后,栈顶的物理地址是:后,栈顶的物理地址是:20100H2H=20102H31MOV AX, 1000HPUSH AXMOV BX, AXPUSH BX POP 1002HPOP BX12H34H56H78H9AHBCHDEHF0H21000H21001H21002H21003H21004H21005H21006H21007H30000H30001H30060H30061H30062H30063H30064H例:设例:设DS 2000H SS3000H SP0064H,执行下列程序:执行下列程序:SP10H00HBX 1000H34H12H34H12HBX1000HSPSPSP323.

22、交换指令交换指令XCHG格式:格式:XCHG OPRD1, OPRD2功能功能:(OPRD1) (OPRD2) 完成完成通用寄存器之间,通用寄存器与累加器之通用寄存器之间,通用寄存器与累加器之间、与存储器之间间、与存储器之间8位位,16位位数据的相互交换。数据的相互交换。例如:例如:XCHG BL, AHXCHG AX, BX 内存之间的数据、累加器之间不可相互交换内存之间的数据、累加器之间不可相互交换 CS,IP不能参与交换不能参与交换 段寄存器和立即数不能作为一个操作数段寄存器和立即数不能作为一个操作数334. 累加器专用指令累加器专用指令(只与只与AX或或AL有关,与有关,与AH无关无关

23、)1)输入输出指令输入输出指令CPU存储器存储器输入输入输出输出INOUTAX或或AL格式:格式:IN AL , PORT IN AX, PORT功能:从功能:从PORT口输入数据到口输入数据到AL(AX)。格式:格式:OUT PORT , AL OUT PORT, AX功能:将功能:将AL(AX)中的内容从中的内容从PORT口输出口输出。34IN AL, 40H OUT 40H , AL IN AX, 40H OUT 40H , AX8位位16位位(40H) AL(41H) AHAL (40H) AH (41H)当端口地址大于当端口地址大于8位位(0FFH)时,要用时,要用DX间接寻址间接寻

24、址MOV DX, 352HIN AL, DXMOV DX, 400HOUT DX, ALIN, OUT只能对只能对AL, AX操作,若传送的数据为操作,若传送的数据为16位,位,则端口地址只能取偶数。则端口地址只能取偶数。352) 换码(查表)指令换码(查表)指令 XLAT将累加器将累加器AL中的内容变换为存储器(默认数据段)表格中的内容变换为存储器(默认数据段)表格中的某一个值,常用来实现编码码制的转换。中的某一个值,常用来实现编码码制的转换。要求:要求:BX指向表的首地指向表的首地址的偏移地址址的偏移地址,AL中的中的内容为表中某一项与首内容为表中某一项与首地址之间的偏移量。地址之间的偏移

25、量。 在执行查表指令时,在执行查表指令时,CPU将将BX与与AL的值相的值相加作为偏移地址,将它加作为偏移地址,将它所对应单元中的内容取所对应单元中的内容取出送到出送到AL中去。中去。DS段段表格首地址表格首地址11H20H33H22HBX AL+BX+0BX+ALBX+2BX+1AL36注意:注意:使用该指令前,应先建立一张表,该表的使用该指令前,应先建立一张表,该表的最大容量为最大容量为256字节。(默认在数据段)字节。(默认在数据段)例例: 将十进制数将十进制数09转换成七段数码管的显示编码转换成七段数码管的显示编码+5Vabcdefgabcdefgabcdefg0100 00000ab

26、cdefg0111 1001 140H79H40H79H24H30H19H12H02H78H00H10H012345678937例例: 从从5号端口输入十进制数,转换为显示编码号端口输入十进制数,转换为显示编码后从后从20号端口输出。号端口输出。40H79H24H30H19H12H02H78H00H10H01234567892000H2001H2002H2003H2004H2005H2006H2007H2008H2009HDS段段MOV BX, 2000HIN AL, 5HXLATOUT 20H, AL如果改为:如果改为: MOV BX, 2000H MOV AL, 5H;不同?不同? XLA

27、T OUT 20H, AL38例:向端口例:向端口40H送字符送字符35的显示编码。的显示编码。40H79H24H30H19H12H02H78H00H10H01234567892000H2001H2002H2003H2004H2005H2006H2007H2008H2009HDS段段MOV BX, 2000HMOV AL, 3XLATOUT 40H, ALMOV AL, 5XLATOUT 40H, AL395. 地址传送指令地址传送指令1) 取偏移地址指令取偏移地址指令 LEA格式:格式:LEA OPRD1,OPRD2功能:将源操作数的偏移地址送到目的操作数中功能:将源操作数的偏移地址送到目的

28、操作数中。要求源操作数必须为存储器操作数,目的操作数必须为一要求源操作数必须为存储器操作数,目的操作数必须为一个个16位的通用寄存器。位的通用寄存器。该指令通常用来使一个寄存器作为地址指针。该指令通常用来使一个寄存器作为地址指针。LEA BX, TAB ; 将将TAB标号所指位置的偏移地址送标号所指位置的偏移地址送 BXMOV AL, BX ; 以以BX为地址指针取一个数据为地址指针取一个数据402) LDS 将指定内存中的将指定内存中的4个字节个字节(32位位)分别装入指定的寄分别装入指定的寄存器和段寄存器存器和段寄存器DS中。中。30H19H79H40H24H2133H2134H2131H

29、2130H2132HDS段段例:数据段例:数据段2130H2133H单元中存放一个地址单元中存放一个地址2130H 2131H 为该地址的偏移地址为该地址的偏移地址2132H 2133H 为该地址的段地址为该地址的段地址LDS DI, 2130H执行后:执行后:DI 7940H DS 3024H413) LES将指定内存中的将指定内存中的4个字节个字节(32位位)分别装入指定的寄分别装入指定的寄存器和段寄存器存器和段寄存器ES中。中。例:例:DS1000H DI 0400H 10400H=FFH 10401H=00H 10402H=AAH 10403H=00H LEA SI, DI; SI=

30、0400HLES AX, DI; AX= 00FFH ES=00AAH426. 标志寄存器传送指令标志寄存器传送指令1)LAHF(Load AH with Flags):读取标志读取标志 标志寄存器标志寄存器PSW中的低中的低8位位AHOF DF IF TF SF ZFAFPFCF15 14 13 12 11 109876543210D7 D6D4D2D0AH2)SAHF(Set Flags with AH): 设置标志设置标志 AH标志寄存器中的低标志寄存器中的低8位位433)PUSHF: 标志寄存器入栈命令标志寄存器入栈命令4)POPF:将栈顶内容送标志寄存器将栈顶内容送标志寄存器PSW注

31、意:这个命令将改变注意:这个命令将改变PSW的内容。的内容。44二、算术运算指令二、算术运算指令 80868088提供加、减、乘、除四种基本算术提供加、减、乘、除四种基本算术操作。这些操作都可用于字节或字的运算,也可操作。这些操作都可用于字节或字的运算,也可以用于带符号数与无符号数的运算。以用于带符号数与无符号数的运算。 带符号数用带符号数用补码表示。补码表示。 同时同时80868088也提供了各种校正操作,故可也提供了各种校正操作,故可以进行十进制算术运算。以进行十进制算术运算。 45参与加、减运算的操作数可如图所示。参与加、减运算的操作数可如图所示。 461、加法指令、加法指令1) 不带进

32、位的加法不带进位的加法格式:格式:ADD OPRD1, OPRD2功能:功能:(OPRD1) + (OPRD2)OPRD1 结果影响标志位结果影响标志位ADD BX+DI, 2000H;错错 ADD BX+DI, 2000H;存储器与立即数相加存储器与立即数相加 ADD DX, 50HBX+SI;通用寄存器与存通用寄存器与存 储单元内容相加储单元内容相加 47设设 BX=C588H, 执行执行 ADD BH, BL后后? 11000101+10001000 101001101 CF=1, OF=1, ZF=0, SF=0, PF=1, AF=0MOV AL, 49HADD AL, 0D7H 0

33、1001001+11010111 100100000结果:结果:CF=1, OF=0, ZF=0, SF=0, PF=0, AF=1482) 带进位的加法带进位的加法格式:格式:ADC OPRD1, OPRD2功能:功能:(OPRD1) + (OPRD2)+CFOPRD1 结果影响标志位结果影响标志位该指令主要用于多字节数相加该指令主要用于多字节数相加49例:两个四字节无符号数相加,这两个数分别放在数据段例:两个四字节无符号数相加,这两个数分别放在数据段以以2000H和和3000H开始的存储单元内,高位在高地址,低开始的存储单元内,高位在高地址,低位在低地址,要求运算结果放在位在低地址,要求运

34、算结果放在2000H开始的单元内。开始的单元内。40H79H24H30H2000H2001H2002H2003H40HB9HA4H30H3000H3001H3002H3003HCLCMOV SI, 2000HSIMOV AX, SI ADD AX, 3000HMOV SI, AXMOV AX, SI+2ADC AX, 3000H2MOV SI+2, AX503) 增量指令增量指令格式:格式:INC OPRD功能:功能:(OPRD) +1OPRD不影响不影响CF, 影响影响AF, OF, PF, SF和和ZFINC ALINC BXMOV AL, 0FFH; ZF=1512、 减法指令减法指令1

35、) 不带借位的减法不带借位的减法格式:格式:SUB OPRD1, OPRD2功能:功能: (OPRD1) ( OPRD2) OPRD1 结果影响标志位结果影响标志位SUB BX+DI, 2000H;错错SUB BX, DX; 通用寄存器之间通用寄存器之间 SUB AL, BX+SI; 累加器和累加器和存储器之间存储器之间 52MOV CX, 5049HSUB CX, 0E2D7H 5 0 4 9-E 2 D7 6 D 7 2结果:结果:CF=1, OF=0, ZF=0, SF=0, PF=1, AF=0532) 带借位的减法带借位的减法格式:格式:SBB OPRD1, OPRD2功能:功能:

36、(OPRD1)(OPRD2)CFOPRD1 结果影响标志位结果影响标志位LEA BX, BUFFSUB AL, BXSBB AH, BX+1该指令主要用于多字节数相减该指令主要用于多字节数相减543) 减量指令减量指令格式:格式:DEC OPRD功能:功能:(OPRD) - 1OPRD不影响不影响CF, 影响影响AF, OF, PF, SF和和ZFMOV CX, 1 DEC CX; ZF=1554) 求补指令求补指令格式:格式:NEG OPRD; 对操作数取补码后送回对操作数取补码后送回功能:功能:0 (OPRD) OPRDNEG ALNEG COUNT指令影响标志位指令影响标志位AF,CF,

37、OF,PF,SF和和ZF, 此指令执行此指令执行时时, 只有当操作数为只有当操作数为0时时, CF为为0, 否则否则CF总为总为1。若操作数为若操作数为80H或或8000H,执行求补指令后,结果执行求补指令后,结果没有变化,但没有变化,但OF置置1。565) 比较指令比较指令格式:格式:CMP OPRD1, OPRD2 功能:功能:(OPRD1) - (OPRD2) 不送回结果,只影响标志位不送回结果,只影响标志位 CMP AX, 2000H; 将将AX内容与内容与2000H相比较相比较CMP AX, BX+DI+100; 将将AX内容与存储单元内容与存储单元的值相比较的值相比较比较结果影响标

38、志位比较结果影响标志位AF,CF,OF,PF,SF和和ZF。57 比较指令主要用于比较两个数之间的关系比较指令主要用于比较两个数之间的关系 若两者相等若两者相等,相减以后结果为零,相减以后结果为零,ZFZF标志为标志为1 1,否则为否则为0 0。 大小的比较大小的比较( 假设假设CMP AX,BX ) 对无符号数,对无符号数,若结果没有产生借位若结果没有产生借位(CF=0),则则AXBX;若产生了借位(若产生了借位(CF1),),则则AXBX。 对带符号数,对带符号数,则可根据则可根据OF与与SF异或运算的结果来异或运算的结果来判断,结果为判断,结果为1,则,则AXBX,结果为结果为0,则,则

39、AXBX583、乘法指令、乘法指令约定:约定: 两个两个8位数相乘,有一个乘数在位数相乘,有一个乘数在AL中,另一个中,另一个乘数在寄存器或内存中,乘积在乘数在寄存器或内存中,乘积在AX中;中; 两个两个16位数相乘,有一个乘数在位数相乘,有一个乘数在AX中,另一个中,另一个乘数在寄存器或内存中,乘积的乘数在寄存器或内存中,乘积的高高16位在位在DX中,中,低低16位在位在AX中。中。1) 乘法有乘法有有符号数有符号数和和无符号数无符号数两套指令两套指令8位数位数8位数位数 16位数位数16位数位数16位数位数 32位数位数59 无符号数乘法指令无符号数乘法指令格式:格式:MUL OPRD;

40、不出现不出现 AL 或或 AX功能:功能:AL/AXOPRD AX / DX, AXMUL BL; AL BL AXMUL CX; AX CX DX(高位高位) , AX(低位低位)MUL BYTE PTR DI; AL ? AXMUL WORD PTR SI; AX ? ?602) 有符号数乘法指令有符号数乘法指令格式:格式:IMUL OPRD; 不出现不出现 AL 或或 AXIMUL BL; AL BL AXIMUL CX; AX CX DX(高位高位) , AX(低位低位)IMUL BYTE PTR DI; 功能上与功能上与MUL相似相似, 要求两个乘数必须为有符号数要求两个乘数必须为有

41、符号数61乘法运算时,结果影响乘法运算时,结果影响CF和和OF,AF, PF, SF, ZF标标志位无意义。志位无意义。对对MUL指令指令:当乘积的高半部分不为当乘积的高半部分不为0,CF=1, OF=1;否则,否则,CF=0, OF=0 。对对IMUL指令:指令:当乘积的高半部分是低半部分最高位的扩展,当乘积的高半部分是低半部分最高位的扩展,乘乘积的高半部分每位与低半部分最高位相同时:积的高半部分每位与低半部分最高位相同时:CF=0, OF=0;否则,否则,CF=1, OF=1 。CF=1, OF=1表示高半部表示高半部分包含有结果的有效数分包含有结果的有效数62例例:MOV AL, 0FB

42、HMOV BH, 02HIMUL BH结果:结果:AX=0FFF6H, 即即-10, CF=0, OF=0MOV AL, 0FBHMOV BH, 02HMUL BH结果:结果:AX=01F6H, 即即502, CF=1, OF=1634、除法指令、除法指令约定:约定:除数必须为被除数的一半字长除数必须为被除数的一半字长 被除数为被除数为16位,放在位,放在AX中,除数为中,除数为8位,在寄位,在寄存器或内存中,存器或内存中, 8位商在位商在AL中中, 8位余数位余数AH中中; 被除数为被除数为32位,放在位,放在DX(高位高位), AX(低位低位)中,除中,除数为数为16位,在寄存器或内存中,

43、位,在寄存器或内存中, 16位商在位商在AX中中, 16位余数位余数DX中中。1) 除法有除法有有符号数有符号数和和无符号数无符号数两套指令两套指令16位数位数8位数位数 8位数位数32位数位数 16位数位数 16位数位数641)无符号数除法指令)无符号数除法指令格式:格式:DIV OPRD; 不出现不出现 AX 或或 DX AX功能:功能:DX,AX/AX OPRD AX/AL,DX/AHDIV BL; AXBL AL(商商) , AH(余数余数)DIV CX; ? CXAX(商商) , DX(余数余数)DIV BYTE PTR DI; AX? AL(商商) AH(余余数数)652) 有符号

44、数乘法指令有符号数乘法指令IDIV OPRD; 不出现不出现 AX 或或 DX AX功能上与功能上与DIV相似相似, 要求被除数,除数必须为有符要求被除数,除数必须为有符号数。号数。IDIV BL; AXBL AL(商商) , AH(余数余数)66注意注意: 除法运算后,所有的标志位都是不确定的,没除法运算后,所有的标志位都是不确定的,没有意义;有意义; 用用IDIV指令时,如果是双字除以一个字,则商指令时,如果是双字除以一个字,则商的范围为的范围为-3276832767,如果是一个字除以一,如果是一个字除以一个字节,则商的范围为个字节,则商的范围为-128127。如果超出这。如果超出这个范围

45、,会作为除数为个范围,会作为除数为0来处理,产生来处理,产生0号中断;号中断; 8086系统规定余数的符号和被除数相同;系统规定余数的符号和被除数相同;1) 当当8位数除以位数除以8位数,位数,16位数除以位数除以16位数时,必位数时,必须对被除数进行扩展。须对被除数进行扩展。67将字节扩展成字的指令:将字节扩展成字的指令:CBW将将AL中的符号位扩展到中的符号位扩展到AH中。当中。当AL=80H时,时,AH=0FFH。当遇到两个字节或字相除时,要预先执行当遇到两个字节或字相除时,要预先执行CBW指指令或令或CWD指令,扩展被除数,否则不能正确执行指令,扩展被除数,否则不能正确执行除法操作。除

46、法操作。将将AX中的符号位扩展到中的符号位扩展到DX中。当中。当AX=8000H时时,DX=0FFFFH。将字扩展成双字的指令:将字扩展成双字的指令:CWD685、十进制调整指令十进制调整指令压缩压缩BCD码码: 一个字节中有两一个字节中有两位位BCD码码 0100 0101非压缩非压缩BCD码:一个字节只用码:一个字节只用低低4位表示一位位表示一位BCD码,高码,高4位位为为0。 0000 0100 0000 0101BCD码:用二进制形式表示的十进制码。每一位十进制码:用二进制形式表示的十进制码。每一位十进制数用数用4位二进制表示,运算规则是逢十进一。位二进制表示,运算规则是逢十进一。十进

47、制十进制BCD码码00000100012001030011401005010160110701118100091001BCD码运算时,先用一般的二进制码运算时,先用一般的二进制运算,然后再进行运算,然后再进行BCD码码调整调整。69BCD码加法十进制码加法十进制调整调整指令指令1) 非压缩的非压缩的BCD码加法调整指令码加法调整指令 AAA两个非压缩的两个非压缩的BCD码相加,结果在码相加,结果在AL中,执行该中,执行该指令后将结果调整为十进制,放在指令后将结果调整为十进制,放在AX中。中。MOV AL, 7HADD AL, 5HAAA; AL: 0CH; AX: 0102H CF=AF=1调

48、整原则:调整原则:在调整前若在调整前若AL低半部包含的数值大于低半部包含的数值大于9或或AF=1, 则则AAA完成下列操作:完成下列操作: AL加加6,AF和和CF置置1,AL的高的高4位清零位清零。707+5=12 用非压缩的用非压缩的BCD码表示运算过程:码表示运算过程:0000 01110000 0101 0000 1100BCD码逢十进一,码逢十进一,16进制逢进制逢16进进1,因为低,因为低4位大位大于于9,所以在个位上加,所以在个位上加6,使其产生进位,同时,使其产生进位,同时AF=1,CF=1。0000 11000000 0110 0001 001016进制加法进制加法AAA指令

49、调整为指令调整为10进制结果进制结果712) 压缩压缩BCD码加法调整指令码加法调整指令 DAA两个压缩的两个压缩的BCD码相加,结果在码相加,结果在AL中,执行该指中,执行该指令后将结果调整为十进制,放在令后将结果调整为十进制,放在AL中。中。MOV AL, 56HADD AL, 47HDAA; AL: 9DH; AL: 03H CF=1调整原则:调整原则:如果如果AF=1或或AL的低的低4位大于位大于9, 则则AL加加06H并置并置AF=1如果如果CF=1或或AL的高的高4位大于位大于9, 则则AL加加60H并置并置CF=1。1. 如果满足上述如果满足上述2条条, 则则AL加加66H, 并

50、置并置AF=1,CF=1。72MOV AX, 1234HMOV BX, 5678HADD AL, BLDAAMOV CL, ALMOV AL, AHADC AL, BHDAAMOV AH, ALMOV AL, CL; AL : ACH; AL : 12H CF=1; CL : 12H; AL : 12H; AL : 69H; AL : 69H CF=0; AX :6912H CF=073BCD码减法调整指令与加法调整指令类似,只是码减法调整指令与加法调整指令类似,只是分别将加分别将加06H, 60H, 66H改为改为减减 06H, 60H, 66H。AAS: 对非压缩的对非压缩的BCD码减法调

51、整码减法调整DAS: 对压缩的对压缩的BCD码减法调整码减法调整注意:注意:调整指令使用时,必须紧跟在相对应的调整指令使用时,必须紧跟在相对应的加减法指令后进行。加减法指令后进行。74BCD码乘法十进制调整指令码乘法十进制调整指令 AAM1) BCD码均为无符号数,故只有用码均为无符号数,故只有用MUL乘法指令乘法指令才能调整;才能调整;2) BCD码乘法调整指令只能对非压缩的码乘法调整指令只能对非压缩的BCD码相码相乘结果进行调整;乘结果进行调整;MOV AL, 05HMOV BH, 06HMUL BHAAM; AX : 001EH ; AX : 0300H 751) BCD码均为无符号数,

52、故只有用码均为无符号数,故只有用DIV除法指令除法指令才能调整,并且在两个数相除前进行调整;才能调整,并且在两个数相除前进行调整;2) BCD码除法调整指令只能对非压缩的码除法调整指令只能对非压缩的BCD码相码相乘结果进行调整;乘结果进行调整;MOV AX, 0300HMOV BL, 05HAADDIV BL; AX : 001EH ; AX : 0006H BCD码除法十进制调整指令码除法十进制调整指令 AAD76三、逻辑运算指令三、逻辑运算指令1) NOT格式:格式:NOT OPRD 功能:功能:OPRD按位取反按位取反设:设:AX=73H DX= 85HMOV AX, DXNOT AX0

53、000 0000 1000 01011111 1111 0111 1010 对标志位没有影响对标志位没有影响772) AND、 OR、XOR格式:格式:AND(OR/XOR) OPRD1, OPRD2功能功能:OPRD1 AND(OR/XOR) OPRD2 OPRD1 这三条指令执行后,这三条指令执行后,CF=0, OF=0, SF, PF, ZF发生发生变化。变化。MOV AX, 2050HAND AX, 0FFH;取取AX的低的低8位位 AX0050H PF=1, SF=0, ZF=0OR AL, 0FH; 结果?结果? AL=5FH78AL: 00001111XOR AL, 0FFH00

54、00 11111111 11111111 0000XOR AL, 00H0000 11110000 00000000 1111与与0异或,状态不变;与异或,状态不变;与1异或,状态相反。异或,状态相反。对某些位置对某些位置1用用OR;对某些位清零用对某些位清零用AND;对某些位取反用对某些位取反用XOR。793) TEST格式:格式:TEST OPRD1, OPRD2功能:功能:(OPRD1) AND (OPRD2) 结果影响标志结果影响标志TEST CX, 0FFFFHJZ P1TEST AL, 01HJNZ AGAIN; 检验检验CX是否为零是否为零; 若标志若标志ZF=1即即CX为为0,

55、转向,转向 P1; 检验检验AL最低位是否为零最低位是否为零; 不为零则转移不为零则转移804) 移位指令移位指令非循环移位指令非循环移位指令(3条条)格式:格式:SAL OPRD, M: 功能:功能:OPRD算术左移算术左移M位位格式:格式:SHL OPRD, M: 功能:功能:OPRD逻辑左移逻辑左移M位位0CF左移一位进左移一位进CF,右边补右边补0,相当于乘相当于乘2。影响标志影响标志若移位后最高位与若移位后最高位与CF不同,则不同,则OF=1,表示移位前表示移位前后数据变号。后数据变号。若移位位数大于若移位位数大于1,所移的位数用,所移的位数用CL存放。存放。81MOV AL, 02

56、HSAL AL, 1;AL: 0000 0010;AL: 0000 0100MOV AL, 02HSAL AL, 4 ;错错MOV AL, 02HMOV CL, 4SHL AL, CL;AL: 0000 0010;AL: 0010 000082格式:格式:SAR OPRD, M: 功能:功能:OPRD算术右移算术右移M位位CF最低位进最低位进CF, 左边重复最高位左边重复最高位, 即操作数符号不变。即操作数符号不变。一般用于有符号数的右移,符号扩展。一般用于有符号数的右移,符号扩展。若移位位数大于若移位位数大于1,所移的位数用,所移的位数用CL存放。存放。MOV AL, -4SAR AL, 1

57、;AL: 1111 1100;AL: 1111 1110-283格式:格式:SHR OPRD, M: 功能:功能:OPRD逻辑右移逻辑右移M位位CF最低位进最低位进CF, 左边补左边补0。一般用于无符号数的右移。一般用于无符号数的右移。若移位位数大于若移位位数大于1,所移的位数用,所移的位数用CL存放。存放。MOV AL, 8SHR AL, 1;AL: 0000 1000;AL: 0000 01004084MOV AL, 48HMOV AH, AL AND AL, 0FH MOV CL, 4SHR AH, CLMOV NUM, AX;AL: 0100 1000;AL: 0000 1000;AH

58、: 0000 0100; NUM: 0000 1000 NUM+1: 0000 0100该程序的功能:完成了将该程序的功能:完成了将AL中的压缩中的压缩BCD码码变成非压缩变成非压缩BCD码存放在码存放在NUM开始的存区。开始的存区。85试分析下面程序完成什么任务?试分析下面程序完成什么任务? 设(设(DL)=12H,(BL)=34HMOV CL, 4SHL DL, CLSHR BL, CLOR DL, BL该程序的功能:完成了将原该程序的功能:完成了将原DL中的低中的低4位与原位与原BL中的高中的高4位拼起来放在位拼起来放在DL中中 。 此时,(此时,(DL) 23H 86循环移位指令循环移

59、位指令(4条条)格式:格式:ROL OPRD,M : 功能:不带进位循环左移功能:不带进位循环左移CF若移位后最高位与若移位后最高位与CF不同,则不同,则OF=1,表示移位前表示移位前后数据变号。后数据变号。若移位位数大于若移位位数大于1,所移的位数用,所移的位数用CL存放。存放。87格式:格式:ROR OPRD,M : 功能:不带进位循环右移功能:不带进位循环右移CF若移位位数大于若移位位数大于1,所移的位数用,所移的位数用CL存放。存放。88格式:格式:RCL OPRD,M : 功能:带进位循环左移功能:带进位循环左移CF可实现多字节的移位,将可实现多字节的移位,将DX, AX左移左移1位

60、位SAL AX, 1RCL DX, 1CFAX0CFDXCF89格式:格式:RCR OPRD,M : 功能:带进位循环右移功能:带进位循环右移CF同样可实现多字节的移位。同样可实现多字节的移位。90四、程序控制指令四、程序控制指令所有的程序控制转移类指令均不影响标志位所有的程序控制转移类指令均不影响标志位JMP LL64KB内内段内转移:段内转移:目标指令与目标指令与转移指令在转移指令在同一代码段同一代码段中中,只改变只改变IP的值的值LL:新新CS :IP分为两种情况:分为两种情况:段内转移和段间段内转移和段间转移转移CS:IP91JMP LL可以超过可以超过64KB段间转移,目标指令段间转

温馨提示

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

评论

0/150

提交评论