《第二章-8086-8088指令系统--微型计算机原理及应用课件.ppt》由会员分享,可在线阅读,更多相关《第二章-8086-8088指令系统--微型计算机原理及应用课件.ppt(142页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、微型计算机原理及应用微型计算机原理及应用1第二章第二章 8086/8088 8086/8088指令系统指令系统22.1 8086/8088寻址方式寻址方式指令格式:指令格式:标号:标号:操作码操作码 ,操作数操作数 ;注释注释标号:内存码段中存放该指令的第一个字节的地址标号:内存码段中存放该指令的第一个字节的地址操作码:操作的性质。操作码:操作的性质。操作数:操作的对象,可以是操作数本身或存放操操作数:操作的对象,可以是操作数本身或存放操作数的内存作数的内存(I/O端口端口)地址。地址。注释:查看程序用,不参加编译运行。注释:查看程序用,不参加编译运行。3寻址方式:寻找操作数的方式。寻址方式:
2、寻找操作数的方式。计算机中操作数可以存放在以下几个地方:计算机中操作数可以存放在以下几个地方:指令代码中指令代码中,存放常量;,存放常量;MOV AX,2070H寄存器中寄存器中:MOV AX,BX内存中内存中:MOV AX,2000HI/O端口中端口中:IN AL,40H4一、一、立即寻址立即寻址操作数直接放在指令中,紧跟在操作码的后面,与操作数直接放在指令中,紧跟在操作码的后面,与操作码一起放在存储器的码段区域中。操作码一起放在存储器的码段区域中。MOV AX,2030H B8 20304004H4003H4002H4001H4000H30H20HB8H4004H4003H4002H400
3、1H4000H20H30HB8H内存地址内存地址内存内容内存内容错误错误!高字节高字节 高地址高地址低字节低字节 低地址低地址AXAHAL20H30H6二、二、寄存器寻址寄存器寻址操作数放在操作数放在CPU内部的寄存器中,可以是内部的寄存器中,可以是8位或位或16位寄存器,位寄存器,注意源操作数和目的操作数的位数应一注意源操作数和目的操作数的位数应一致。致。MOV AX,BX;将将 BX中的内容传送到中的内容传送到AX中去中去MOV AL,BH;将将 BH中的内容传送到中的内容传送到AL中去中去MOV AL,BX错误错误!不匹配不匹配7三、三、直接寻址直接寻址操作数存放在内存中,在指令中给出存
4、放操作数的操作数存放在内存中,在指令中给出存放操作数的偏移地址偏移地址,如果不加说明,如果不加说明,默认的段基址是数据段默认的段基址是数据段。MOV AX,0020H;将将 数据段偏移地址为数据段偏移地址为0020H的地址中的内容传的地址中的内容传送到送到AX中去,相当于中去,相当于:MOV AX,DS:0020H8也可以传送内存中其他段的数据,在相应的偏也可以传送内存中其他段的数据,在相应的偏移地址前加段超越符移地址前加段超越符“:”。MOV AX,SS:0020H;将将 堆栈段偏移地址为堆栈段偏移地址为0020H的地址中的内容传的地址中的内容传送到送到AX中去中去MOV ES:0100H,
5、BX如果不加段超越,默认为如果不加段超越,默认为数据段数据段的偏移地址的偏移地址10四、四、寄存器间接寻址寄存器间接寻址操作数存放在内存中,但其操作数存放在内存中,但其偏移地址偏移地址存放寄存器中。存放寄存器中。在指令中只给出这个寄存器。在指令中只给出这个寄存器。MOV AX,BXBX中存放操作数中存放操作数的偏移地址的偏移地址其中,作为间址的寄存器只能有其中,作为间址的寄存器只能有4个:个:BX,SI,DI,BP,其他寄存器无此功能。其他寄存器无此功能。用用BP寻址,段基址默认为堆栈段寻址,段基址默认为堆栈段SS,其余其余3个的段个的段基址默认为数据段基址默认为数据段DS,同时指令同时指令允
6、许段超越允许段超越。11MOV AX,ES:BX;传送的操作数在传送的操作数在附加段附加段ES中,偏移地址存放在中,偏移地址存放在BX中。中。MOV BP,BX;将将BX中的内容传送到中的内容传送到堆栈段堆栈段中,其目的地的偏中,其目的地的偏移地址存放在移地址存放在BP中。中。MOV DI,2000H;将立即数将立即数2000H传送到传送到数据段数据段中,其目的地的中,其目的地的偏移地址存放在偏移地址存放在DI中。中。13用用BP寻址,段基址默认为堆栈段寻址,段基址默认为堆栈段SS,其余其余3个的段个的段基址默认为数据段基址默认为数据段DS,同时指令同时指令允许段超越允许段超越。MOV AX,
7、0200HBX变址寻址可以有多种格式:变址寻址可以有多种格式:MOV AX,BX+0200HMOV AX,0200H+BX例如:例如:DS:3000H,BX:1000H 数据所在的地址:数据所在的地址:高位:高位:31201H 低位:低位:31200H15六、六、基址加变址寻址基址加变址寻址操作数存放在内存中,但其操作数存放在内存中,但其偏移地址偏移地址是由三部分相是由三部分相加而成:加而成:基址寄存器内容基址寄存器内容变址寄存器内容变址寄存器内容偏移量偏移量MOV AX,BX+SI+0200H;欲传送的操作数在欲传送的操作数在数据段数据段中,其偏移地址是中,其偏移地址是BX寄寄存器中的内容存
8、器中的内容加上加上SI寄存器中的内容寄存器中的内容加上加上0200H基址寄存器只有基址寄存器只有2个:个:BX,默认的段基址为默认的段基址为DS;BP,默认的段基址为默认的段基址为SS。1612H34H56H78H9AHBCHDEHF0H21000H21001H21002H21003H21004H21005H21006H21007H10H20H30H40H50H60H70H80H23000H23001H23002H23003H23004H23005H23006H23007H1AH2AH3AH4AH5AH6AH7AH8AH31000H31001H31002H31003H31004H31005H3
9、1006H31007H1BH2BH3BH4BH5BH6BH7BH8BH33000H33001H33002H33003H33004H33005H33006H33007HDS:2000H SS:3000H BX:1000H BP:3000H SI:3004HMOV AX,3000HMOV AX,BXMOV AX,3000HMOV AX,BXMOV AX,BPMOV AX,BPMOV AX,SIMOV SI,0002HMOV AX,BXSIMOV AX,BP+02HMOV AL,BX+06HMOV AX,BX+SI+4HAX:3000HAX:1000HAX:2010HAX:3412HAX:3000H
10、AX:2B1BHAX:6050HSI:0002HAX:7856HAX:4B3BHAL:DEHAX:F0DEH182.2 8086/8088指令系统指令系统一、数据传送指令一、数据传送指令1.通用数据传送指令通用数据传送指令1)所有的所有的MOV传送指令都不能改变标志传送指令都不能改变标志2)CS,IP不能作为目的操作数不能作为目的操作数 MOV CS,AX3)两个段寄存器间不能直接传送两个段寄存器间不能直接传送 MOV SS,DS4)立即数不能直接传送给段寄存器立即数不能直接传送给段寄存器 MOV DS,2000H5)内存单元间不能直接传送内存单元间不能直接传送 MOV SI,2000H6)立
11、即数不能作为目的操作数立即数不能作为目的操作数 MOV 1000H,AX19MOV BL,AXMOV 100,CXMOV SI,AXMOV CS,AXMOV SI,DIMOV BX,2DIMOV AX,CSMOV SS,2400HMOV AX,BP+4错误,不匹配错误,不匹配错误,立即数不能赋值错误,立即数不能赋值正确正确错误,错误,CS不能赋值不能赋值错误,内存间不能直接传送错误,内存间不能直接传送正确正确正确正确错误,段寄存器不能赋立即数错误,段寄存器不能赋立即数正确正确20堆栈操作指令堆栈操作指令堆栈是按先进后出的原则组织的一段内存区域,一堆栈是按先进后出的原则组织的一段内存区域,一般作
12、临时存储器用般作临时存储器用(仓库仓库)。其指针。其指针SP为为16位的寄位的寄存器,始终指向栈顶存器,始终指向栈顶(货物堆放的位置货物堆放的位置)。堆栈的空。堆栈的空间大小是用户指定的。间大小是用户指定的。SS:2000H ;堆栈段的段基址堆栈段的段基址 ;表示堆栈从表示堆栈从20000H处开始处开始20000H假设用户定义堆栈为假设用户定义堆栈为100个字节,个字节,则则SP自动设置为自动设置为0064H20064H100个字节个字节SP:0064H21MOV AX,1234HPUSH AX20000H20064H100个字节个字节SP(1)SP-1SP AHSPSP12H(2)SP-1S
13、P ALSPSP34H先减指针先减指针,再压数据再压数据,先高后先高后低低POP BX(1)SPBL SP+1SP(2)SPBH SP+1SP先出数据先出数据,再加指针再加指针,先低后高先低后高BLBHSPSP22MOV AX,1000HPUSH AXMOV BX,AXPUSH BXPUSH 1000H POP 1002HPOP AXPOP BX12H34H56H78H9AHBCHDEHF0H21000H21001H21002H21003H21004H21005H21006H21007H30000H30001H30060H30061H30062H30063H30064HDS:2000H SS:
14、3000H SP:0064HSP:0064H100个字节个字节10H00HBX:1000H34H12H34H12H34H12HAX:3412HBX:1000H24交换指令交换指令XCHG OPRD1,OPRD2OPRD1 OPRD2在在寄存器之间寄存器之间,寄存器和内存之间寄存器和内存之间的的8位位,16位位数数据可以相互交换。据可以相互交换。XCHG AL,AHXCHG AX,BX1)内存之间的数据不可相互交换内存之间的数据不可相互交换2)CS,IP不能参与交换不能参与交换3)段寄存器之间不能参与交换段寄存器之间不能参与交换25累加器专用指令累加器专用指令(只与只与AX或或AL有关,有关,与
15、与AH无关无关)输入输出指令输入输出指令CPU存储器存储器输入输入输出输出INOUTAX或或AL只能用只能用IN、OUT指令向外设发命令;指令向外设发命令;外设只能与外设只能与CPU内部寄存器内部寄存器AL或或AX进行数据传输进行数据传输26IN,OUT只能对只能对AL,AX操作,操作,若传送的数若传送的数据为据为16位,则外口地址只能取偶数位,则外口地址只能取偶数。IN AX,35H 错误错误!IN AX,36H 必须为偶数必须为偶数28表格查找指令表格查找指令(换码指令换码指令)XLAT使累加器使累加器AL中的一个值变换为存储器表格中的某中的一个值变换为存储器表格中的某一个值,一般用来实现
16、编码码制的转换。一个值,一般用来实现编码码制的转换。用用BX指向表的首地址,指向表的首地址,AL中的内容为表中某一中的内容为表中某一项与首地址之间的位移项与首地址之间的位移量。在执行查表指令时,量。在执行查表指令时,将将BX与与AL中的内容相加,中的内容相加,把得到的值作为地址,把得到的值作为地址,然后将此地址所对应单然后将此地址所对应单元中的值取到元中的值取到AL中去。中去。DS段段表格首地址表格首地址DS:BX+ALAL11H20H33H22HBX ALBX+0BX+ALBX+2BX+1AL29例:向端口例:向端口40H送字符送字符35。40H79H24H30H19H12H02H78H00
17、H10H01234567892000H2001H2002H2003H2004H2005H2006H2007H2008H2009HDS段段MOV BX,2000HMOV AL,3XLATOUT 40H,ALMOV AL,5XLATOUT 40H,AL31例例:从从5号端口输入十进制数,转换为号端口输入十进制数,转换为7段码后输段码后输出到出到20号端口。号端口。40H79H24H30H19H12H02H78H00H10H01234567892000H2001H2002H2003H2004H2005H2006H2007H2008H2009HDS段段MOV BX,2000HIN AL,5HXLATO
18、UT 20H,AL32地址传送指令地址传送指令取有效地址指令取有效地址指令LEA:取存储器地址的偏移地址取存储器地址的偏移地址LEA SI,2728H;地址为地址为2728H,SI为为2728H功能:将存储器地址送到一个寄存器。功能:将存储器地址送到一个寄存器。要求源操作数必须为存储器单元地址,要求源操作数必须为存储器单元地址,通常为标号通常为标号,目,目的操作数必须为一个的操作数必须为一个16位的通用寄存器。位的通用寄存器。该指令通常用来使一个寄存器作为地址指针。该指令通常用来使一个寄存器作为地址指针。LEA BX,BP+SI;BX为为 BP+SI 的值的值LEA BX,A1 ;BX为为 A
19、1 的值的值,A1通常为变量地址通常为变量地址33LDS 取内存中的数取内存中的数将指定内存中的将指定内存中的4个字节个字节(32位位)分别装入指定的寄分别装入指定的寄存器和段寄存器存器和段寄存器DS中。中。30H19H79H40H24H2133H2134H2131H2130H2132HDS段段例:例:2130H2133H这这4个单元中存放着一个地址个单元中存放着一个地址2130H 2131H 为该地址偏移量为该地址偏移量2132H 2133H 为该地址段值为该地址段值LDS DI,2130H执行后:执行后:DI:7940H DS:3024H34LES 取内存中的数取内存中的数将指定内存中的将
20、指定内存中的4个字节个字节(32位位)分别装入指定的寄分别装入指定的寄存器和段寄存器存器和段寄存器ES中。中。例:例:DS:1000H DI:0400H 10420H=FFH 10421H=00H LEA AX,20HDI;AX:0420HLEA AX,DI;AX:0400H3512H34H56H78H9AHBCHDEHF0H00H10H23000H23001H23002H23003H23004H23005H23006H23007H23008H23009H例:例:DS:2000H MOV BX,3004HMOV AL,02HXLATLEA BX,3000HLES SI,BX+04HLDS DI
21、,BX+02HAL:DEHBX:3000HSI:BC9AHES:F0DEHDI:7856HDS:BC9AH36标志传送指令标志传送指令LAHF(Load AH with Flags):读取标志读取标志将标志寄存器将标志寄存器FR中的低中的低8位位AH中中OF DF IF TF SF ZFAFPFCF15 14 13 12 11 109876543210D7 D6D4D2D0AHSAHF(Set Flags with AH):设置标志设置标志 上述指令的反向传输上述指令的反向传输只提供只提供8位标志位指令位标志位指令,保保持对持对8位机指令的兼容性位机指令的兼容性37PUSHF:标志寄存器入栈命
22、令标志寄存器入栈命令POPF:将栈内内容进入标志寄存器将栈内内容进入标志寄存器FR只有这个命令可以改变只有这个命令可以改变TF的内容的内容。38二、算术运算指令二、算术运算指令概念:算术运算涉及两种类型的数据:有符号型和概念:算术运算涉及两种类型的数据:有符号型和无符号型,对加减法这两种类型采用同一套指令,无符号型,对加减法这两种类型采用同一套指令,对乘除法不能采用同一套指令。对乘除法不能采用同一套指令。有符号数在计算机有符号数在计算机中以补码的形式存储。中以补码的形式存储。加减法:加减法:1)两个加数或减数同为一种数据类型;两个加数或减数同为一种数据类型;2)两种类型用不同的标准比较大小。两
23、种类型用不同的标准比较大小。3)有符号数加减运算要考虑溢出。有符号数加减运算要考虑溢出。39当相同符号数相加但结果变号时,产生溢出标志。当相同符号数相加但结果变号时,产生溢出标志。例如:例如:81240000 10000111 11001000 0100结果:结果:OF=1,CF=0例:例:8-5=8+(-5)0000 10001111 101110000 0011结果:结果:OF=0,CF=1有符号数和无符号数指令相同,结果相同,但结果有符号数和无符号数指令相同,结果相同,但结果的意义不同。的意义不同。40当无符号数运算时,若当无符号数运算时,若CF=1,则超界。则超界。当有符号数运算时,若
24、当有符号数运算时,若OF=1,则溢出,结果错误则溢出,结果错误若运算结果为若运算结果为0,则,则ZF=1若运算结果为负数,则若运算结果为负数,则SF=1,即即SF与最高位一致与最高位一致若运算结果中若运算结果中低低8位位有偶数个有偶数个1,则,则PF=1若运算过程中若运算过程中低低8位位的位的位3向位向位4有进位,则有进位,则AF=141加法指令加法指令1)不带进位的加法不带进位的加法ADD OPRD1,OPRD2OPRD1+OPRD2OPRD1 结果影响标志位结果影响标志位两个操作数不可同为内存单元两个操作数不可同为内存单元ADD BX+DI,2000HADD BX+DI,2000HADD
25、DX,50HBX+SI错误错误!42设设 AX=C544H,执行执行 ADD AH,AL后后,CF,OF?C 5 4 4 1 0 9CF=1,OF=0MOV AX,5049HADD AX,0E2D7H 5 0 4 9 E 2 D7 1 3 3 2 0结果:结果:CF=1,OF=0,ZF=0,SF=0,PF=0,AF=1432)带进位的加法带进位的加法ADC OPRD1,OPRD2OPRD1+OPRD2+CFOPRD1 结果影响标志位结果影响标志位两个操作数不可同为内存单元两个操作数不可同为内存单元ADC BX+DI,2000HADC BX+DI,2000HADC DX,50HBX+SI该指令主
26、要用于多字节数相加该指令主要用于多字节数相加44例:两个四字节无符号数相加,这两个数分别放在以例:两个四字节无符号数相加,这两个数分别放在以2000H和和3000H开始的存储单元内,高位在前,低位在后,开始的存储单元内,高位在前,低位在后,要求运算后得到的结果放在要求运算后得到的结果放在2000H开始的单元内。开始的单元内。40H79H24H30H2000H2001H2002H2003H40HB9HA4H30H3000H3001H3002H3003HCLCMOV SI,2000HMOV AX,SISIADD AX,3000HMOV SI,AXMOV AX,SI+2ADC AX,3002HMOV
27、 SI+2,AX清进位标志清进位标志453)增量指令增量指令INC OPRDOPRD+1OPRD不影响不影响CF,影响影响AF,OF,PF,SF和和ZFINC ALINC BXMOV AL,0FFHCF=0,ZF=146减法指令减法指令1)不带借位的减法不带借位的减法SUB OPRD1,OPRD2OPRD1-OPRD2OPRD1 结果影响标志位结果影响标志位两个操作数不可同为内存单元两个操作数不可同为内存单元SUB BX+DI,2000HSUB BX+DI,2000HSUB DX,50HBX+SI47MOV AX,5049HSUB AX,0E2D7H 5 0 4 9 E 2 D7 6 D 7
28、2结果:结果:CF=1,OF=0,ZF=0,SF=0,PF=1,AF=0482)带借位的减法带借位的减法SBB OPRD1,OPRD2OPRD1-OPRD2-CFOPRD1 结果影响标志位结果影响标志位两个操作数不可同为内存单元两个操作数不可同为内存单元SBB BX+DI,2000HSBB BX+DI,2000HSBB DX,50HBX+SI该指令主要用于多字节数相减该指令主要用于多字节数相减493)减量指令减量指令DEC OPRDOPRD-1OPRD不影响不影响CF,影响影响AF,OF,PF,SF和和ZFDEC ALDEC BXMOV AL,00HCF=0,ZF=0504)求补指令求补指令N
29、EG OPRD;对操作数取补码后送回对操作数取补码后送回0-OPRDOPRDNEG ALNEG CX指令影响标志位指令影响标志位AF,CF,OF,PF,SF和和ZF,此指令执行此指令执行时时,只有当操作数为只有当操作数为0时时,CF为为0,否则否则CF总为总为1。若操作数为若操作数为80H或或8000H,执行求补指令后,结果执行求补指令后,结果没有变化,但没有变化,但OF置置1。515)比较指令比较指令CMP OPRD1,OPRD2;OPRD1-OPRD2不送回结果,只影响标志位不送回结果,只影响标志位 CMP AX,2000H;将将AX内容与内容与2000H相比较相比较,结结果影响标志位果影
30、响标志位CMP AX,BX+DI+100;将将AX内容与内容与2000H相相比较比较,结果影响标志位结果影响标志位比较结果影响标志位比较结果影响标志位AF,CF,OF,PF,SF和和ZF。52CMP AX,BX若结果若结果ZF=1,可以判断可以判断AX与与BX相等;相等;若若AX与与BX均为无符号数,若均为无符号数,若CF为为0,AXBX;CF为为1,AXBX;否则;否则AXBL如果为无符号数比较,如果为无符号数比较,ALBLMOV AL,A0HMOV BL,78H;CMP AL,BLCF=0,OF=1,SF=0如果为有符号数比较,如果为有符号数比较,ALBL若若AX与与BX均为无符号数,若均
31、为无符号数,若CF为为0,AXBX;CF为为1,AXBX;否则;否则AXBX。54乘法指令乘法指令约定:约定:1)两个两个8位数相乘,有一个乘数在位数相乘,有一个乘数在AL中,另一个乘中,另一个乘数在寄存器或内存中,乘积在数在寄存器或内存中,乘积在AX中;中;2)两个两个16位数相乘,有一个乘数在位数相乘,有一个乘数在AX中,另一个中,另一个乘数在寄存器或内存中,乘积的乘数在寄存器或内存中,乘积的高高16位在位在DX中,中,低低16位在位在AX中。中。3)乘法有乘法有有符号数有符号数和和无符号数无符号数两套指令两套指令8位数位数8位数位数 16位数位数16位数位数16位数位数 32位数位数55
32、1)无符号数乘法指令无符号数乘法指令MUL OPRD;不出现不出现 AL 或或 AXMUL BL;AL BL AXMUL CX;AX CX DX(高位高位),AX(低位低位)MUL BYTE PTR DI;AL DI AXMUL WORD PTR SI;AX SI+1SI DX(高位高位),AX(低位低位)562)有符号数乘法指令有符号数乘法指令IMUL OPRD;不出现不出现 AL 或或 AXIMUL BL;AL BL AXIMUL CX;AX CX DX(高位高位),AX(低位低位)IMUL BYTE PTR DI;AL DI AXIMUL WORD PTR SI;AX SI+1SI DX
33、(高位高位),AX(低位低位)功能上与功能上与MUL相似相似,要求两个乘数必须为有符号要求两个乘数必须为有符号数数57乘法运算时,结果影响乘法运算时,结果影响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
34、表示高半部表示高半部分包含有结果的有效数分包含有结果的有效数58例例:MOV AL,0FBHMOV BH,02HIMUL BH结果:结果:AX=0FFF6H,即即-10,CF=0,OF=0MOV AL,0FBHMOV BH,02HMUL BH结果:结果:AX=01F6H,即即502,CF=1,OF=11111 1011 -51111 1011 25159除法指令除法指令约定:约定:除数必须为被除数的一半字长除数必须为被除数的一半字长1)被除数为被除数为16位,放在位,放在AX中,除数为中,除数为8位,在寄位,在寄存器或内存中,存器或内存中,8位商在位商在AL中中,8位余数位余数AH中中;2)被
35、除数为被除数为32位,放在位,放在DX(高位高位),AX(低位低位)中,中,除数为除数为16位,在寄存器或内存中,位,在寄存器或内存中,16位商在位商在AX中中,16位余数位余数DX中中。3)除法有除法有有符号数有符号数和和无符号数无符号数两套指令两套指令16位数位数8位数位数 8位数位数32位数位数 16位数位数 16位数位数60无符号数除法指令无符号数除法指令DIV OPRD;不出现不出现 AX 或或 DX AXDIV BL;AXBL AL(商商),AH(余数余数)DIV CX;DX AX CXAX(商商),DX(余数余数)DIV BYTE PTR DI;AXDI AL(商商)AH(余数余
36、数)DIV WORD PTR SI;DX AX SI+1SI AX(商商),DX(余数余数)612)有符号数除法指令有符号数除法指令IDIV OPRD;不出现不出现 AX 或或 DX AX功能上与功能上与DIV相似相似,要求被除数,除数必须为有符要求被除数,除数必须为有符号数。号数。IDIV BL;AXBL AL(商商),AH(余数余数)62注意注意:1)除法运算后,所有的标志位都是不确定的,没除法运算后,所有的标志位都是不确定的,没有意义;有意义;2)用用IDIV指令时,如果是双字除以一个字,则商指令时,如果是双字除以一个字,则商的范围为的范围为-3276832767,如果是一个字除以一,如
37、果是一个字除以一个字节,则商的范围为个字节,则商的范围为-128127。如果超出这。如果超出这个范围,会作为除数为个范围,会作为除数为0来处理,产生来处理,产生0号中断号中断 8086系统规定余数的符号和被除数相同;系统规定余数的符号和被除数相同;3)当当8位数除以位数除以8位数,位数,16位数除以位数除以16位数时,必位数时,必须对被除数进行扩展。须对被除数进行扩展。63无符号数被除数扩展:无符号数被除数扩展:将将AH或或DX清清0。有符号数被除数扩展:有符号数被除数扩展:对对AH或或DX进行符号扩展进行符号扩展将字节扩展成字的指令:将字节扩展成字的指令:CBW将将AL中的符号位扩展到中的符
38、号位扩展到AH中。当中。当AL=80H时,时,AH=0FFH。当遇到两个字节相除时,要预先执行当遇到两个字节相除时,要预先执行CBW指令,指令,扩展被除数,否则不能正确执行除法操作。扩展被除数,否则不能正确执行除法操作。将将AX中的符号位扩展到中的符号位扩展到DX中。当中。当AX=8000H时时,DX=0FFFFH将字扩展成双字的指令:将字扩展成双字的指令:CWD64BCD码运算指令码运算指令1.组合的组合的BCD码码:一个字节中有一个字节中有两位两位BCD码码 0100 01012.非组合的非组合的BCD码:一个字节只码:一个字节只用低用低4位表示一位位表示一位BCD码,高码,高4位为位为0
39、。0000 0100 0000 0101BCD码:用二进制形式表示的十进制码。每一位十进制数码:用二进制形式表示的十进制码。每一位十进制数用用4位二进制表示,运算规则是位二进制表示,运算规则是逢十进一逢十进一。十进制十进制BCD码码00000100012001030011401005010160110701118100091001BCD码运算时,先用一般的二进制码运算时,先用一般的二进制运算,然后再进行运算,然后再进行BCD码码调整调整。65BCD码加法十进制码加法十进制调整调整指令指令1)未组合的未组合的BCD码运算调整指令码运算调整指令 AAA两个未组合的两个未组合的BCD码相加,结果在码
40、相加,结果在AL中,执行该中,执行该指令后将结果调整为十进制,放在指令后将结果调整为十进制,放在AX中。中。MOV AL,7HADD AL,5HAAA;AL:0CH;AX:0102H CF=AF=1调整原则:调整原则:在调整前若在调整前若AL低半部包含的低半部包含的数值大于数值大于9或或AF=1,则则AAA完成下列操作:完成下列操作:AL加加6,AH加加1,AF和和CF置置1,AL的高的高4位清零位清零。667+5=12 用非组合的用非组合的BCD码表示运算过程:码表示运算过程:0000 01110000 0101 0000 1100BCD码逢十进一,码逢十进一,16进制逢进制逢16进进1,因
41、为低,因为低4位大位大于于9,所以在个位上加,所以在个位上加6,使其产生半进位,同时,使其产生半进位,同时AF=1,CF=1,AH=01H。0000 11000000 0110 0001 001016进制加法进制加法AAA指令调整为指令调整为10进制结果进制结果调整指令执行完后调整指令执行完后,AL的高四位清零的高四位清零 AX=0102H679+9=18 用非组合的用非组合的BCD码表示运算过程:码表示运算过程:0000 10010000 1001 0001 0010BCD码逢十进一,码逢十进一,16进制逢进制逢16进进1,因为低,因为低4位有位有进位,进位,AF1,所以在个位上加,所以在个
42、位上加6,使其成为十进,使其成为十进制运算结果,同时制运算结果,同时AF=1,CF=1,AH=01H。0001 00100000 0110 0001 100016进制加法进制加法AAA指令调整为指令调整为10进制结果进制结果调整指令执行完后调整指令执行完后,AL的高四位清零的高四位清零 AX=0108H682)组合的组合的BCD码运算调整指令码运算调整指令 DAA两个组合的两个组合的BCD码相加,结果在码相加,结果在AL中,执行该指中,执行该指令后将结果调整为十进制,放在令后将结果调整为十进制,放在AL中。中。MOV AL,56HADD AL,47HDAA;AL:9DH;AL:03H CF=1
43、调整原则:调整原则:1.如果如果AF=1或或AL的低的低4位大于位大于9,则则AL加加06H并置并置AF=12.如果如果CF=1或或AL的高的高4位大于位大于9,则则AL加加60H并置并置CF=1如果同时满足上述如果同时满足上述2条条,则则AL加加66H,并置并置AF=1,CF=169MOV 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=0;高位结果高位
44、结果70MOV AX,8ADD AL,9AAA;AX:0038H;AX:0071H AF=1;AX:0107H AF=1因为因为AF=1,所以所以AL加加6,AH=1,CF=1,AF=1,AL高高4位清零位清零。71BCD码减法调整指令与加法调整指令类似,只是码减法调整指令与加法调整指令类似,只是分别将加分别将加06H,60H,66H改为改为减减 06H,60H,66H。AAS:对非组合的对非组合的BCD码减法调整码减法调整DAS:对组合的对组合的BCD码减法调整码减法调整必须紧跟在相对应的加减法指令后进行调整。必须紧跟在相对应的加减法指令后进行调整。72BCD码乘法十进制调整指令码乘法十进制
45、调整指令 AAM1)BCD码均为无符号数,故只有用码均为无符号数,故只有用MUL乘法指令乘法指令才能调整;才能调整;2)BCD码乘法调整指令只能对非组合的码乘法调整指令只能对非组合的BCD码相码相乘结果进行调整;乘结果进行调整;MOV AL,05HMOV BH,06HMUL BHAAM;AX:001EH;AX:0300H 731)BCD码均为无符号数,故只有用码均为无符号数,故只有用DIV除法指令除法指令才能调整,才能调整,并且在两个数相除前进行调整并且在两个数相除前进行调整;2)BCD码除法调整指令只能对非组合的码除法调整指令只能对非组合的BCD码相码相乘结果进行调整;乘结果进行调整;MOV
46、 AX,0300HMOV BL,05HAADDIV BL;AX:001EH;AX:0006H BCD码除法十进制调整指令码除法十进制调整指令 AAD74逻辑运算指令逻辑运算指令1)NOT 按位取反按位取反NOT OPRDAX:73H DX:85HMOV AX,DXNOT AXADD AX,DXINC AX0000 0000 1000 01011111 1111 0111 10101111 1111 1111 11110000 0000 0000 0000对标志位没有影响对标志位没有影响CF=0,ZF=1752)AND与与 OR或或 XOR异或异或AND OPRD1,OPRD2OPRD1 AND
47、 OPRD2 OPRD1这三条指令执行后,这三条指令执行后,CF=0,OF=0,SF,PF,ZF发生发生变化。变化。MOV AX,2050HAND AX,0FFHAX:0050H PF=1,SF=0,ZF=076XOR :相同出相同出0,相异出相异出1AL:00001111XOR AL,0FFH0000 11111111 11111111 0000XOR AL,00H0000 11110000 00000000 1111与与0异或,状态不变;与异或,状态不变;与1异或,状态相反。异或,状态相反。对某些位置对某些位置1用用OR;对某些位清零用对某些位清零用AND;对某些位取反用对某些位取反用XO
48、R。77假设假设BX=1110 0011B,变量变量VALUE的值为:的值为:0111 1001B,确定下列各条独立指令的结果。确定下列各条独立指令的结果。XOR BX,VALUEAND BX,VALUEOR BX,VALUEXOR BX,11111111B1001 10100110 00011110 00110111 10010110 00011111 10111001 10101111 10111110 00111111 11110001 11000001 1100783)TESTTEST OPRD1,OPRD2按位相与,结果只影响标志位按位相与,结果只影响标志位OPRD1 AND OPR
49、D2 影响标志影响标志TEST CX,0FFFFHJZ P1;检验检验CX是否为是否为零零;若标志若标志ZF=1,转向转向 P1794)移位指令移位指令非循环移位指令非循环移位指令(3条条)SAL(Shift Arithmetic Left):算术左移算术左移SHL(Shift Logic Left):逻辑左移逻辑左移0CF左移一位进左移一位进CF,右边补右边补0,相当于乘相当于乘2。影响标志影响标志若移位后最高位与若移位后最高位与CF不同,则不同,则OF=1,表示移位前表示移位前后数据变号。后数据变号。若移位位数大于若移位位数大于1,所移的位数用,所移的位数用CL存放。存放。80MOV AL
50、,02HSAL AL,1;AL:0000 0010;AL:0000 0100MOV AL,02HSAL AL,4MOV AL,02HMOV CL,4SAL AL,CL;AL:0000 0010;AL:0010 000081SAR(Shift Arithmetic Right):算术右移算术右移CF最低位进最低位进CF,左边重复最高位左边重复最高位,即操作数符号不变。即操作数符号不变。一般用于有符号数的右移,符号一般用于有符号数的右移,符号扩展扩展。若移位位数大于若移位位数大于1,所移的位数用,所移的位数用CL存放。存放。MOV AL,-4SAR AL,1;AL:1111 1100;AL:111