《微机原理》课件第02章 指令系统.ppt

上传人(卖家):momomo 文档编号:7176808 上传时间:2023-10-06 格式:PPT 页数:131 大小:3.48MB
下载 相关 举报
《微机原理》课件第02章 指令系统.ppt_第1页
第1页 / 共131页
《微机原理》课件第02章 指令系统.ppt_第2页
第2页 / 共131页
《微机原理》课件第02章 指令系统.ppt_第3页
第3页 / 共131页
《微机原理》课件第02章 指令系统.ppt_第4页
第4页 / 共131页
《微机原理》课件第02章 指令系统.ppt_第5页
第5页 / 共131页
点击查看更多>>
资源描述

1、1第二章第二章 8086/8088 8086/8088指令系统指令系统2 2.12.1 寻址方式寻址方式 2.22.2 8086/8088 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控制指令控制指令32.1 8086/8088寻址方式寻址方式指令格式:指令格式:操作码操作码 操作数操作数操作

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

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

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

5、在指令中,紧跟在操作码的后面,与操作码一起放在存储器的代码段中(与操作码一起放在存储器的代码段中(8/16位)。位)。MOV AX,2030H 对应机器码对应机器码:B8H 2030H4004H4003H4002H4001H4000H20H30HB8H4004H4003H4002H4001H4000H20H30HB8H内存偏移内存偏移地址地址单元内容单元内容注意注意别错别错!高字节高字节 高地址高地址低字节低字节 低地址低地址AXAHAL20H30H9三、三、直接寻址直接寻址 操作数存放在内存中,在指令中给出存放单元的操作数存放在内存中,在指令中给出存放单元的偏移地址偏移地址,如果不加说明,操

6、作数,如果不加说明,操作数默认在数据段默认在数据段。MOV AX,0020H;将将 数据段偏移地址为数据段偏移地址为0020H的地址中的内容传的地址中的内容传送到送到AX中去,相当于中去,相当于:MOV AX,DS:0020H注意:书写时加方括号。注意:书写时加方括号。物理地址物理地址:(DS)16指令中给的指令中给的16位偏移地址位偏移地址1012H34H56H码段码段堆栈段堆栈段数据段数据段0000H0001H0020H0021H0022HDS:0000H偏移地址偏移地址内存内容内存内容MOV AX,0020HAXAHAL3412AX:3412H11也可以指向内存中其他段的数据,这时要在相

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

8、移地址其中,作为间接寻址的寄存器只能有其中,作为间接寻址的寄存器只能有4个:个:BX,SI,DI,BP,其他寄存器无此功能。其他寄存器无此功能。131、对、对DI、SI、BX间接寻址间接寻址2、对、对BP间接寻址间接寻址注意:用注意:用BP间接寻址,操作数默认在堆栈段间接寻址,操作数默认在堆栈段,用其余用其余3个寄存器时,操作数默认在数据段个寄存器时,操作数默认在数据段。物理地址物理地址:(DS)16DI/SI/BX中给的中给的16位偏移地址位偏移地址物理地址物理地址:(SS)16BP中给的中给的16位偏移地址位偏移地址1478H00H56H码段码段堆栈段堆栈段数据段数据段0000H0001H

9、1100H1101H1102HDS:0000H偏移地址偏移地址内存内容内存内容MOV AX,BXAXAHAL0078AX:0078HMOV BX,1100H15例例1:MOV AX,ES:BX;传送的操作数在附加段中,偏移地址存放在传送的操作数在附加段中,偏移地址存放在BX中。中。例例2:MOV BP,BX;将将BX中的内容传送到堆栈段中,其目的地的偏中的内容传送到堆栈段中,其目的地的偏移地址存放在移地址存放在BP中。中。例例3:MOV CX,2000H;错,不能对错,不能对CX间接寻址间接寻址16五、五、变址寻址变址寻址操作数在内存中,由指定的寄存器内容,加上指操作数在内存中,由指定的寄存器

10、内容,加上指令中给出的令中给出的8位或位或16位偏移量作为操作数的偏移地位偏移量作为操作数的偏移地址,计算方法:址,计算方法:偏移地址偏移地址寄存器内容寄存器内容指令中给定的偏移量指令中给定的偏移量同样,作为变址的寄存器只能有同样,作为变址的寄存器只能有4个:个:BX,SI,DI,BP,其他寄存器无此功能。其他寄存器无此功能。171、对、对DI、SI、BX变址寻址变址寻址2、对、对BP变址寻址变址寻址物理地址物理地址:(DS)16计算出的偏移地址计算出的偏移地址物理地址物理地址:(SS)16计算出的偏移地址计算出的偏移地址注意:用注意:用BP变址寻址,操作数默认在堆栈段变址寻址,操作数默认在堆

11、栈段,用其余用其余3个寄存器时,操作数默认在数据段个寄存器时,操作数默认在数据段。18MOV AX,TABDI变址寻址可以有多种格式:变址寻址可以有多种格式:MOV AX,BX+0A00H如:如:MOV AX,0200H+BX假设假设DS:3000H,BX:1000H 则操作则操作数所在地址:数所在地址:高高8位:位:31201H 低低8位:位:31200HMOV DH,SI+0200H;此时传送的操作数在此时传送的操作数在数据段数据段中,其偏移地址是中,其偏移地址是SI寄存器中的内容加上寄存器中的内容加上0200H19六、六、基址加变址寻址基址加变址寻址操作数存放在内存中,但其操作数存放在内

12、存中,但其偏移地址偏移地址是由三部分是由三部分相加而成:相加而成:基址寄存器内容基址寄存器内容变址寄存器内容变址寄存器内容偏移量偏移量基址寄存器只有基址寄存器只有2个:个:BX,默认的操作数在数据段默认的操作数在数据段;BP,默认的操作数在堆栈段默认的操作数在堆栈段。变址寄存器只有变址寄存器只有2个:个:SI和和DI。偏移量同样由指令给出。偏移量同样由指令给出。201、BX作为基地址作为基地址2、BP作为基地址作为基地址物理地址物理地址:(DS)16计算出的偏移地址计算出的偏移地址物理地址物理地址:(SS)16计算出的偏移地址计算出的偏移地址21MOV AX,VALBX+SIMOV AX,02

13、00HBXSIMOV AX,0200HBXBP;错误错误MOV AX,0200HSIDI;错误错误MOV AX,COUNTBP+SI;欲取的数据在堆栈段欲取的数据在堆栈段MOV AX,BX+SI+0200H;欲传送的操作数在欲传送的操作数在数据段数据段中,其偏移地址是中,其偏移地址是BX寄寄存器中的内容存器中的内容加上加上SI寄存器中的内容寄存器中的内容加上加上0200H2212H34H56H78H9AHBCHDEHF0H21000H21001H21002H21003H21004H21005H21006H21007H10H20H30H40H50H60H70H80H23000H23001H230

14、02H23003H23004H23005H23006H23007H1AH2AH3AH4AH5AH6AH7AH8AH31000H31001H31002H31003H31004H31005H31006H31007H1BH2BH3BH4BH5BH6BH7BH8BH33000H33001H33002H33003H33004H33005H33006H33007HDS=2000H SS=3000H BX=1000H BP=3000H MOV AX,BXMOV AX,3000HMOV AX,BXMOV AL,BPMOV SI,0002HMOV CX,BXSIMOV DL,BX+06HAX=1000HAX=2

15、010HAX=3412HAL=1BHSI=0002HCX=7856HDL=DEH232.2 8086/8088指令系统指令系统8088/8086指令系统可以分为以下六个功能组:指令系统可以分为以下六个功能组:数据传送数据传送(Data Transter)算术运算算术运算(Arithmetic)逻辑运算逻辑运算(Logic)程序控制程序控制(Program Control)串操作串操作(String Menipulation)标志处理标志处理 和和CPU控制控制(Processor Control)24一、数据传送指令一、数据传送指令1.通用数据传送指令通用数据传送指令格式:格式:MOV OPR

16、D1,OPRD2功能功能:(OPRD2)OPRD1CPU内部寄存器之间数据的传送内部寄存器之间数据的传送(除除CS、IP)立即数传送至立即数传送至CPU内部的通用寄存器组内部的通用寄存器组CPU内部的寄存器内部的寄存器(除除CS、IP)与存储器与存储器(所有寻所有寻址方式址方式)之间之间能实现用立即数给存储单元赋值能实现用立即数给存储单元赋值25 CS,IP不能作为目的操作数不能作为目的操作数 MOV CS,AX 两个段寄存器间不能直接传送两个段寄存器间不能直接传送 MOV SS,DS 立即数不能直接传送给段寄存器立即数不能直接传送给段寄存器 MOV DS,2000H 内存单元间不能直接传送内

17、存单元间不能直接传送 MOV SI,2000H 立即数不能作为目的操作数立即数不能作为目的操作数 MOV 1000H,AX注意:注意:26MOV BL,AXMOV 100,CXMOV SI,DIMOV CS,AXMOV SI,DIMOV BH,2DIMOV AX,CSMOV SS,2400HMOV BP+4,AX错误,不匹配错误,不匹配错误,立即数不能赋值错误,立即数不能赋值正确正确错误,错误,CS不能赋值不能赋值错误,内存间不能直接传送错误,内存间不能直接传送正确正确正确正确错误,段寄存器不能赋立即数错误,段寄存器不能赋立即数正确正确272.堆栈指令堆栈指令 堆栈是按先进后出的原则组织的一段

18、内存区堆栈是按先进后出的原则组织的一段内存区域,一般作临时存储器用域,一般作临时存储器用(仓库仓库)。其指针。其指针SP为为16位位的寄存器,始终指向栈顶的寄存器,始终指向栈顶(货物堆放的位置货物堆放的位置)。堆栈。堆栈的空间大小可用户指定。如:的空间大小可用户指定。如:SS的值为的值为 2000H 表示堆栈从表示堆栈从20000H处开始处开始20000H假设用户定义堆栈为假设用户定义堆栈为100个字节,个字节,则则SP自动设置为自动设置为0064H20064H100个字节个字节SP:0064H281、格式:格式:PUSH OPRD 功能功能:(OPRD)入栈入栈 FFH20000H20064

19、H100个字节个字节SP(1)SP-1SP AHSPSP12H(2)SP-1SP ALSPSP34H先减指针先减指针,再压数据再压数据,先高后低先高后低(1)SPBL SP+1SP(2)SPBH SP+1SP先出数据先出数据,再加指针再加指针,先低后高先低后高弹出低字节弹出低字节弹出高字节弹出高字节SPSP堆栈的操作有两种堆栈的操作有两种:入栈入栈/出栈出栈例:例:MOV AX,1234H PUSH AX;入栈入栈2、格式:格式:POP OPRD 功能功能:栈顶内容送栈顶内容送OPRD29注意:注意:只能对只能对16位数进行操作,一次压入弹出一个字位数进行操作,一次压入弹出一个字PUSH AH

20、;错错必须对寄存器的内容或内存单元的内容进行操作必须对寄存器的内容或内存单元的内容进行操作PUSH 2000H;错错 PUSH 2000H;对对例:设例:设SP为为0100H,SS为为2000H,PUSH BX后,后,栈顶的物理地址是:栈顶的物理地址是:20100H2H=200FEH而执行而执行POP BX后,栈顶的物理地址是:后,栈顶的物理地址是:20100H2H=20102H30MOV AX,1000HPUSH AXMOV BX,AXPUSH BX POP 1002HPOP BX12H34H56H78H9AHBCHDEHF0H21000H21001H21002H21003H21004H21

21、005H21006H21007H30000H30001H30060H30061H30062H30063H30064H例:设例:设DS 2000H SS3000H SP0064H,执行下列程序:执行下列程序:SP10H00HBX 1000H34H12H34H12HBX1000HSPSPSP313.交换指令交换指令XCHG格式:格式:XCHG OPRD1,OPRD2功能功能:(OPRD1)(OPRD2)完成完成通用寄存器之间,通用寄存器与累加器之通用寄存器之间,通用寄存器与累加器之间、与存储器之间间、与存储器之间8位位,16位位数据的相互交换。数据的相互交换。例如:例如:XCHG BL,AHXCH

22、G AX,BX1)内存之间的数据、累加器之间不可相互交换内存之间的数据、累加器之间不可相互交换2)CS,IP不能参与交换不能参与交换3)段寄存器和立即数不能作为一个操作数段寄存器和立即数不能作为一个操作数324.累加器专用指令累加器专用指令(只与只与AX或或AL有关,与有关,与AH无关无关)1)输入输出指令输入输出指令CPU存储器存储器输入输入输出输出INOUTAX或或AL格式:格式:IN AL,PORT IN AX,PORT功能:从功能:从PORT口输入数据到口输入数据到AL(AX)。格式:格式:OUT PORT,AL OUT PORT,AX功能:将功能:将AL(AX)中的内容从中的内容从P

23、ORT口输出口输出。33IN AL,40H OUT 40H,AL IN AX,40H OUT 40H,AX8位位16位位(40H)AL(41H)AHAL (40H)AH (41H)当端口地址大于当端口地址大于8位位(0FFH)时,要用时,要用DX间接寻址间接寻址MOV DX,352HIN AL,DXMOV DX,400HOUT DX,ALIN,OUT只能对只能对AL,AX操作,若传送的数据为操作,若传送的数据为16位,位,则端口地址只能取偶数。则端口地址只能取偶数。342)换码(查表)指令换码(查表)指令 XLAT将累加器将累加器AL中的内容变换为存储器(默认数据段)表格中的内容变换为存储器(

24、默认数据段)表格中的某一个值,常用来实现编码码制的转换。中的某一个值,常用来实现编码码制的转换。要求:要求:BX指向表的首地指向表的首地址的偏移地址址的偏移地址,AL中的中的内容为表中某一项与首内容为表中某一项与首地址之间的偏移量。地址之间的偏移量。在执行查表指令时,在执行查表指令时,CPU将将BX与与AL的值相的值相加作为偏移地址,将它加作为偏移地址,将它所对应单元中的内容取所对应单元中的内容取出送到出送到AL中去。中去。DS段段表格首地址表格首地址11H20H33H22HBX AL+BX+0BX+ALBX+2BX+1AL35注意:注意:使用该指令前,应先建立一张表,该表的使用该指令前,应先

25、建立一张表,该表的最大容量为最大容量为256字节。(默认在数据段)字节。(默认在数据段)例例:将十进制数将十进制数09转换成七段数码管的显示编码转换成七段数码管的显示编码+5Vabcdefgabcdefgabcdefg0100 00000abcdefg0111 1001 140H79H40H79H24H30H19H12H02H78H00H10H012345678936例例:从从5号端口输入十进制数,转换为显示编码号端口输入十进制数,转换为显示编码后从后从20号端口输出。号端口输出。40H79H24H30H19H12H02H78H00H10H01234567892000H2001H2002H20

26、03H2004H2005H2006H2007H2008H2009HDS段段MOV BX,2000HIN AL,5HXLATOUT 20H,AL如果改为:如果改为:MOV BX,2000H MOV AL,5H;不同?不同?XLAT OUT 20H,AL37例:向端口例:向端口40H送字符送字符35的显示编码。的显示编码。40H79H24H30H19H12H02H78H00H10H01234567892000H2001H2002H2003H2004H2005H2006H2007H2008H2009HDS段段MOV BX,2000HMOV AL,3XLATOUT 40H,ALMOV AL,5XLAT

27、OUT 40H,AL385.地址传送指令地址传送指令1)取偏移地址指令取偏移地址指令 LEA格式:格式:LEA OPRD1,OPRD2功能:将源操作数的偏移地址送到目的操作数中功能:将源操作数的偏移地址送到目的操作数中。要求源操作数必须为存储器操作数,目的操作数必须为一要求源操作数必须为存储器操作数,目的操作数必须为一个个16位的通用寄存器。位的通用寄存器。该指令通常用来使一个寄存器作为地址指针。该指令通常用来使一个寄存器作为地址指针。LEA BX,TAB;将将TAB标号所指位置的偏移地址送标号所指位置的偏移地址送 BXMOV AL,BX;以以BX为地址指针取一个数据为地址指针取一个数据392

28、)LDS 将指定内存中的将指定内存中的4个字节个字节(32位位)分别装入指定的寄分别装入指定的寄存器和段寄存器存器和段寄存器DS中。中。30H19H79H40H24H2133H2134H2131H2130H2132HDS段段例:数据段例:数据段2130H2133H单元中存放一个地址单元中存放一个地址2130H 2131H 为该地址的偏移地址为该地址的偏移地址2132H 2133H 为该地址的段地址为该地址的段地址LDS DI,2130H执行后:执行后:DI 7940H DS 3024H403)LES将指定内存中的将指定内存中的4个字节个字节(32位位)分别装入指定的寄分别装入指定的寄存器和段寄

29、存器存器和段寄存器ES中。中。例:例:DS1000H DI 0400H 10400H=FFH 10401H=00H 10402H=AAH 10403H=00H LEA SI,DI;SI=0400HLES AX,DI;AX=00FFH ES=00AAH416.标志寄存器传送指令标志寄存器传送指令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):设置标志

30、设置标志 AH标志寄存器中的低标志寄存器中的低8位位423)PUSHF:标志寄存器入栈命令标志寄存器入栈命令4)POPF:将栈顶内容送标志寄存器将栈顶内容送标志寄存器PSW注意:这个命令将改变注意:这个命令将改变PSW的内容。的内容。43二、算术运算指令二、算术运算指令 80868088提供加、减、乘、除四种基本算术提供加、减、乘、除四种基本算术操作。这些操作都可用于字节或字的运算,也可操作。这些操作都可用于字节或字的运算,也可以用于带符号数与无符号数的运算。以用于带符号数与无符号数的运算。带符号数用带符号数用补码表示。补码表示。同时同时80868088也提供了各种校正操作,故可也提供了各种校

31、正操作,故可以进行十进制算术运算。以进行十进制算术运算。44参与加、减运算的操作数可如图所示。参与加、减运算的操作数可如图所示。451、加法指令、加法指令1)不带进位的加法不带进位的加法格式:格式:ADD OPRD1,OPRD2功能:功能:(OPRD1)+(OPRD2)OPRD1 结果影响标志位结果影响标志位ADD BX+DI,2000H;错错 ADD BX+DI,2000H;存储器与立即数相加存储器与立即数相加 ADD DX,50HBX+SI;通用寄存器与存通用寄存器与存 储单元内容相加储单元内容相加 46设设 BX=C588H,执行执行 ADD BH,BL后后?11000101+10001

32、000 101001101 CF=1,OF=1,ZF=0,SF=0,PF=1,AF=0MOV AL,49HADD AL,0D7H 01001001+11010111 100100000结果:结果:CF=1,OF=0,ZF=0,SF=0,PF=0,AF=1472)带进位的加法带进位的加法格式:格式:ADC OPRD1,OPRD2功能:功能:(OPRD1)+(OPRD2)+CFOPRD1 结果影响标志位结果影响标志位该指令主要用于多字节数相加该指令主要用于多字节数相加48例:两个四字节无符号数相加,这两个数分别放在数据段例:两个四字节无符号数相加,这两个数分别放在数据段以以2000H和和3000H

33、开始的存储单元内,高位在高地址,低开始的存储单元内,高位在高地址,低位在低地址,要求运算结果放在位在低地址,要求运算结果放在2000H开始的单元内。开始的单元内。40H79H24H30H2000H2001H2002H2003H40HB9HA4H30H3000H3001H3002H3003HCLCMOV SI,2000HSIMOV AX,SI ADD AX,3000HMOV SI,AXMOV AX,SI+2ADC AX,3000H2MOV SI+2,AX493)增量指令增量指令格式:格式:INC OPRD功能:功能:(OPRD)+1OPRD不影响不影响CF,影响影响AF,OF,PF,SF和和ZF

34、INC ALINC BXMOV AL,0FFH;ZF=1502、减法指令减法指令1)不带借位的减法不带借位的减法格式:格式:SUB OPRD1,OPRD2功能:功能:(OPRD1)(OPRD2)OPRD1 结果影响标志位结果影响标志位SUB BX+DI,2000H;错错SUB BX,DX;通用寄存器之间通用寄存器之间 SUB AL,BX+SI;累加器和累加器和存储器之间存储器之间 51MOV 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=1522)带借位的减法带借位的减法格式:格式:S

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

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

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

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

39、或 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?592)有符号数乘法指令有符号数乘法指令格式:格式:IMUL OPRD;不出现不出现 AL 或或 AXIMUL BL;AL BL AXIMUL CX;AX CX DX(高位高位),AX(低位低位)IMUL BYTE PTR DI;功能上与功能上与MUL相似相似,要求两个乘数必须为有符号数要求两个乘数必须为有符号数60乘法运算时,结果影响乘法运算时,结果影响CF和和OF,A

40、F,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表示高半部表示高半部分包含有结果的有效数分包含有结果的有效数61例例:MOV AL,0FBHMOV BH,02HIMUL BH结果:结果:AX=0FFF6H,即即-10,CF=0

41、,OF=0MOV AL,0FBHMOV BH,02HMUL BH结果:结果:AX=01F6H,即即502,CF=1,OF=1624、除法指令、除法指令约定:约定:除数必须为被除数的一半字长除数必须为被除数的一半字长1)被除数为被除数为16位,放在位,放在AX中,除数为中,除数为8位,在寄位,在寄存器或内存中,存器或内存中,8位商在位商在AL中中,8位余数位余数AH中中;2)被除数为被除数为32位,放在位,放在DX(高位高位),AX(低位低位)中,除中,除数为数为16位,在寄存器或内存中,位,在寄存器或内存中,16位商在位商在AX中中,16位余数位余数DX中中。3)除法有除法有有符号数有符号数和

42、和无符号数无符号数两套指令两套指令16位数位数8位数位数 8位数位数32位数位数 16位数位数 16位数位数631)无符号数除法指令)无符号数除法指令格式:格式: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(余余数数)642)有符号数乘法指令有符号数乘法指令IDIV OPRD;不出现不出现 AX 或或 DX AX功能上与功能上与DIV相似相似,要求被除数,除数必须为有

43、符要求被除数,除数必须为有符号数。号数。IDIV BL;AXBL AL(商商),AH(余数余数)65注意注意:1)除法运算后,所有的标志位都是不确定的,没除法运算后,所有的标志位都是不确定的,没有意义;有意义;2)用用IDIV指令时,如果是双字除以一个字,则商指令时,如果是双字除以一个字,则商的范围为的范围为-3276832767,如果是一个字除以一,如果是一个字除以一个字节,则商的范围为个字节,则商的范围为-128127。如果超出这。如果超出这个范围,会作为除数为个范围,会作为除数为0来处理,产生来处理,产生0号中断;号中断;3)8086系统规定余数的符号和被除数相同;系统规定余数的符号和被

44、除数相同;4)当当8位数除以位数除以8位数,位数,16位数除以位数除以16位数时,必位数时,必须对被除数进行扩展。须对被除数进行扩展。66将字节扩展成字的指令:将字节扩展成字的指令:CBW将将AL中的符号位扩展到中的符号位扩展到AH中。当中。当AL=80H时,时,AH=0FFH。当遇到两个字节或字相除时,要预先执行当遇到两个字节或字相除时,要预先执行CBW指指令或令或CWD指令,扩展被除数,否则不能正确执行指令,扩展被除数,否则不能正确执行除法操作。除法操作。将将AX中的符号位扩展到中的符号位扩展到DX中。当中。当AX=8000H时时,DX=0FFFFH。将字扩展成双字的指令:将字扩展成双字的

45、指令:CWD675、十进制调整指令十进制调整指令1.压缩压缩BCD码码:一个字节中有两一个字节中有两位位BCD码码 0100 01012.非压缩非压缩BCD码:一个字节只用码:一个字节只用低低4位表示一位位表示一位BCD码,高码,高4位位为为0。0000 0100 0000 0101BCD码:用二进制形式表示的十进制码。每一位十进制码:用二进制形式表示的十进制码。每一位十进制数用数用4位二进制表示,运算规则是逢十进一。位二进制表示,运算规则是逢十进一。十进制十进制BCD码码00000100012001030011401005010160110701118100091001BCD码运算时,先用一

46、般的二进制码运算时,先用一般的二进制运算,然后再进行运算,然后再进行BCD码码调整调整。68BCD码加法十进制码加法十进制调整调整指令指令1)非压缩的非压缩的BCD码加法调整指令码加法调整指令 AAA两个非压缩的两个非压缩的BCD码相加,结果在码相加,结果在AL中,执行该中,执行该指令后将结果调整为十进制,放在指令后将结果调整为十进制,放在AX中。中。MOV AL,7HADD AL,5HAAA;AL:0CH;AX:0102H CF=AF=1调整原则:调整原则:在调整前若在调整前若AL低半部包含的数值大于低半部包含的数值大于9或或AF=1,则则AAA完成下列操作:完成下列操作:AL加加6,AF和

47、和CF置置1,AL的高的高4位清零位清零。697+5=12 用非压缩的用非压缩的BCD码表示运算过程:码表示运算过程:0000 01110000 0101 0000 1100BCD码逢十进一,码逢十进一,16进制逢进制逢16进进1,因为低,因为低4位大位大于于9,所以在个位上加,所以在个位上加6,使其产生进位,同时,使其产生进位,同时AF=1,CF=1。0000 11000000 0110 0001 001016进制加法进制加法AAA指令调整为指令调整为10进制结果进制结果702)压缩压缩BCD码加法调整指令码加法调整指令 DAA两个压缩的两个压缩的BCD码相加,结果在码相加,结果在AL中,执

48、行该指中,执行该指令后将结果调整为十进制,放在令后将结果调整为十进制,放在AL中。中。MOV AL,56HADD AL,47HDAA;AL:9DH;AL:03H CF=1调整原则:调整原则:1.如果如果AF=1或或AL的低的低4位大于位大于9,则则AL加加06H并置并置AF=12.如果如果CF=1或或AL的高的高4位大于位大于9,则则AL加加60H并置并置CF=1。3.如果满足上述如果满足上述2条条,则则AL加加66H,并置并置AF=1,CF=1。71MOV AX,1234HMOV BX,5678HADD AL,BLDAAMOV CL,ALMOV AL,AHADC AL,BHDAAMOV AH

49、,ALMOV AL,CL;AL:ACH;AL:12H CF=1;CL:12H;AL:12H;AL:69H;AL:69H CF=0;AX:6912H CF=072BCD码减法调整指令与加法调整指令类似,只是码减法调整指令与加法调整指令类似,只是分别将加分别将加06H,60H,66H改为改为减减 06H,60H,66H。AAS:对非压缩的对非压缩的BCD码减法调整码减法调整DAS:对压缩的对压缩的BCD码减法调整码减法调整注意:注意:调整指令使用时,必须紧跟在相对应的调整指令使用时,必须紧跟在相对应的加减法指令后进行。加减法指令后进行。73BCD码乘法十进制调整指令码乘法十进制调整指令 AAM1)

50、BCD码均为无符号数,故只有用码均为无符号数,故只有用MUL乘法指令乘法指令才能调整;才能调整;2)BCD码乘法调整指令只能对非压缩的码乘法调整指令只能对非压缩的BCD码相码相乘结果进行调整;乘结果进行调整;MOV AL,05HMOV BH,06HMUL BHAAM;AX:001EH;AX:0300H 741)BCD码均为无符号数,故只有用码均为无符号数,故只有用DIV除法指令除法指令才能调整,并且在两个数相除前进行调整;才能调整,并且在两个数相除前进行调整;2)BCD码除法调整指令只能对非压缩的码除法调整指令只能对非压缩的BCD码相码相乘结果进行调整;乘结果进行调整;MOV AX,0300H

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

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(《微机原理》课件第02章 指令系统.ppt)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|