《专升本微机原理_清华版_第五章(一).ppt》由会员分享,可在线阅读,更多相关《专升本微机原理_清华版_第五章(一).ppt(60页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第五章第五章 86系列微型计算机指令系统系列微型计算机指令系统 概述概述5.1指令格式与指令格式与寻址方式寻址方式5.2 数据传送指令数据传送指令5.3 数据操作类指令数据操作类指令5.4 串操作指令串操作指令5.5 控制类指令控制类指令 概述概述指令指令(instruction)是微处理器是微处理器执行某种操作的执行某种操作的命令,命令,微处理器微处理器全部指令的集合称为指令系统。全部指令的集合称为指令系统。指令有两种书写格式:机器指令和符号指令(也指令有两种书写格式:机器指令和符号指令(也叫助记符)。叫助记符)。符号指令是用规定的助记符和规定的书写格式书符号指令是用规定的助记符和规定的书写
2、格式书写的指令。符号指令的书写格式为:写的指令。符号指令的书写格式为:操作码操作码 操作数操作数 MOV AL,1 ;(10110000 00000001)汇编语言、机器语言和汇编程序assembly language assembler用用助记符编写的程序称为汇编语言程序助记符编写的程序称为汇编语言程序使计算机执行操作的二进制码称为机器指令使计算机执行操作的二进制码称为机器指令(machine code)汇编语言指令与机器指令是一一对应的汇编语言指令与机器指令是一一对应的用机器指令编写的程序称为机器语言程序,用机器指令编写的程序称为机器语言程序,CPU只能执行机器语言程序;只能执行机器语言程
3、序;将汇编语言指令翻译成机器语言指令称为汇编,将汇编语言指令翻译成机器语言指令称为汇编,此翻译程序称为汇编程序此翻译程序称为汇编程序(assembler)Masm.exe:汇编程序汇编程序一一一一.汇编语言指令格式汇编语言指令格式汇编语言指令格式汇编语言指令格式 标号:标号:操作码操作码 操作数操作数1 1,操作数,操作数22;注释;注释 换行表示一条指令结束。换行表示一条指令结束。例:例:LLLL:MOV AXMOV AX,1090H 1090H;取参数取参数1.1.标号:标号:指令的符号地址指令的符号地址2.2.操作码:操作码:指明指令功能。指明指令功能。3.3.操作数操作数(operan
4、d)(operand):指令操作对象指令操作对象数据、寄存器名、地址及约定符号。数据、寄存器名、地址及约定符号。4.4.注释行:注释行:说明指令在程序中的作用。说明指令在程序中的作用。操作码和操作数操作码和操作数是指令主体。是指令主体。MOV_move传送传送XCHG_exchange交换交换AND_and logic与逻辑运与逻辑运算算XOR_exclusive or异或异或MUL_Multiply乘法乘法ROR_rotate right右循环右循环JMP_ jump跳转跳转RET_return 子程序返回子程序返回5.1.1 5.1.1 指令格式指令格式二二二二.机器语言指令格式机器语言指
5、令格式机器语言指令格式机器语言指令格式操作码操作码 操作数操作数1 1 操作数操作数22有单字节、双字节和三字节指令。有单字节、双字节和三字节指令。汇编语言指令中操作码和操作数是指令主体,称为指汇编语言指令中操作码和操作数是指令主体,称为指令可执行部分,指令表中可查出对应指令代码。令可执行部分,指令表中可查出对应指令代码。举例:举例:汇编语言:汇编语言:机器语言:机器语言:MOV AXMOV AX,1000H1000HB8 00 10HB8 00 10HMOV DSMOV DS,AXAX8E D8H8E D8HMOV CXMOV CX,0008H0008HB9 08 00HB9 08 00H1
6、01110000000000000010000寻址方式:寻找指令中操作数的方式(在不特别说明的情况下,寻址方式:寻找指令中操作数的方式(在不特别说明的情况下,一般指源操作数)一般指源操作数)操作数有三种可能的存放方式:操作数有三种可能的存放方式:直接包含在指令中,例直接包含在指令中,例 MOV AX,1000H (B8 00 10H)立即数立即数 称为立即数寻址称为立即数寻址包含在某个寄存器中,例包含在某个寄存器中,例 MOV DS,AX (8E D8H)寄存器操作数寄存器操作数 称为寄存器寻址称为寄存器寻址在内存中在内存中 存储器操作数(内存操作数)存储器操作数(内存操作数)称为称为存储器寻
7、址存储器寻址(直接寻址、寄存器间接寻址、寄存器直接寻址、寄存器间接寻址、寄存器相对寻址、基址加变址寻址和相对的基址加变址寻址相对寻址、基址加变址寻址和相对的基址加变址寻址)5.1.2 寻址方式寻址方式(Addressing Modes)1.立即数寻址立即数寻址操作数作为立即数直接存在指令中,可为字节、操作数作为立即数直接存在指令中,可为字节、字;字;字;字;机器语言指令机器语言指令MOV AL,80H ;B080HMOVAX,1090H ;B89010H 低地址低地址高地址高地址 DS段段操作码操作码90H10HAX10H 90HAHAL注意注意:(1)立即数只能是整数。立即数只能是整数。(2
8、)立即数只能作为源操作数。立即数只能作为源操作数。2.寄存器寻址寄存器寻址操作数包含在指令规定的操作数包含在指令规定的8位或位或16位寄存器中位寄存器中例,例,MOV CX,DX (源操作数与目的操作数要匹配)源操作数与目的操作数要匹配)34H12HCX34H12HDX寄存器寻址由于无需从存储器中取操作数,故执行寄存器寻址由于无需从存储器中取操作数,故执行速度快速度快注意注意:对于:对于16位操作数来说,寄存器可以为位操作数来说,寄存器可以为AX,BX,CX,DX,SI,DI,SP,BP。对于。对于8位寄存器可以为位寄存器可以为AH,AL,BH,BL,CH,CL,DH,DL3 操作数在内存单元
9、中(直接寻址,寄存器间接寻址)操作数在内存单元中(直接寻址,寄存器间接寻址)直接寻址直接寻址 MOV AX,1070H 将将DS段的段的1070H和和1071H两单元的内容取到两单元的内容取到AX中中寄存器间接寻址寄存器间接寻址 操作数在内存中,内存的有效地址由寄存器指出。操作数在内存中,内存的有效地址由寄存器指出。这些寄存器可以为这些寄存器可以为BX,BP,SI和和DI。(1)MOV AX,BX:数据段基址寻址数据段基址寻址(2)用用BX寄存器进行间接寻址,默认的段寄存器为寄存器进行间接寻址,默认的段寄存器为DS。寄存器间接寻址寄存器间接寻址(2)MOV BX,BP:堆栈段基址寻址堆栈段基址
10、寻址用用BP寄存器进行间接寻址,默认的段寄存器为寄存器进行间接寻址,默认的段寄存器为SS。(3)MOV AX,SI:变址寻址变址寻址默认的段寄存器为默认的段寄存器为DS。(4)MOV AX,BX+SI:基址变址寻址基址变址寻址默认的段寄存器为默认的段寄存器为DS。(5)MOV AX,BX+SI+0050:相对基址变址寻址相对基址变址寻址默认的段寄存器为默认的段寄存器为DS。3 操作数在内存单元中(直接寻址,寄存器间接寻址)操作数在内存单元中(直接寻址,寄存器间接寻址)内存中的数据:内存中的数据:内存实际地址由两部分组成:存储单元所在段的基地址、段内存实际地址由两部分组成:存储单元所在段的基地址
11、、段内偏移地址(偏移量)内偏移地址(偏移量)MOV ES:3000H,AL ;(;(ES)*16+3000HES:MOV 3000H,AL段内偏移地址可以由如下三个部分组成(称为偏移地址三元素):段内偏移地址可以由如下三个部分组成(称为偏移地址三元素):基址寄存器的内容(基址寄存器的内容(BX、BP)变址寄存器的内容(变址寄存器的内容(DI、SI)位移量(位移量(0、16位或位或8位的具体数据位的具体数据)BX DI 位移量位移量 BP SI3 操作数在内存单元中(直接寻址,寄存器间接寻址)操作数在内存单元中(直接寻址,寄存器间接寻址)注意:注意:括号中的内容为括号中的内容为内存偏移地址内存偏
12、移地址,括号中使用的寄存,括号中使用的寄存器只能是器只能是BX、BP、DI、SI及其规定的及其规定的组合组合。BX DI 位移量位移量 BP SI直接寻址,基址,变址,相对基址,基址变址,相直接寻址,基址,变址,相对基址,基址变址,相对基址变址对基址变址由三元素可组合出由三元素可组合出存储器存储器寻址方式:寻址方式:MOV AX,基址基址+变址变址+位移量位移量1.MOV AX,位移量位移量 ;直接寻址直接寻址 寄存器间接寻址的进一步细分:寄存器间接寻址的进一步细分:2.MOV AX,变址变址 ;寄存器间接寻址寄存器间接寻址3.MOV AX,基址基址 ;寄存器间接寻址寄存器间接寻址4.MOV
13、AX,变址变址+位移量位移量 ;寄存器相对寻址寄存器相对寻址5.MOV AX,基址基址+位移量位移量 ;寄存器相对寻址寄存器相对寻址6.MOV AX,基址基址+变址变址 ;基址加变址寻址基址加变址寻址7.MOV AX,基址基址+变址变址+位移量位移量 ;相对的基址加变址相对的基址加变址寻址寻址由于有两个是相同的由于有两个是相同的,所以实际上所以实际上相对于内存操作数的寻址方式相对于内存操作数的寻址方式有有5种种,即直接寻址和寄存器间接寻址(包含,即直接寻址和寄存器间接寻址(包含4种)种)方括号内的值是内存的有效地址,方括号内仅为数值时为直接方括号内的值是内存的有效地址,方括号内仅为数值时为直接
14、寻址;方括号内有寄存器寻址;方括号内有寄存器BX、BP、SI、DI时为间接寻址。时为间接寻址。3.直接寻址(直接寻址(1)指令中的操作数部分直接给出操作数的有效地址指令中的操作数部分直接给出操作数的有效地址EA,操作数操作数16位整数,操作数位整数,操作数默认在默认在DS段中段中MOV AX,3000H;MOVBX,0020H;MOV AL,3000H低地址低地址高地址高地址CS段段操作码操作码00H30H34H12H34H12HAXDS段段5000053000DS5000 0300053000+目标寄存器为目标寄存器为8位时取一个字节位时取一个字节3.直接寻址(直接寻址(2)如果操作数在如果
15、操作数在DS以外的其他段(以外的其他段(CS,SS,ES)中,中,指令中必须指明段寄存器指令中必须指明段寄存器MOV AX,ES:3000H 26 A1 00 30ES:MOV AX,3000H低地址低地址高地址高地址CS段段操作码操作码00H30H34H12H34H12HAXES段段2000023000ES2000 0300023000+4.寄存器间接寻址(寄存器间接寻址(1)操作数地址的偏移量(有效地址操作数地址的偏移量(有效地址EA)存放)存放在基址寄存在基址寄存器器BX、BP或变址或变址寄存器寄存器SI、DI中;中;以以SI,DI,BX间接间接寻址,寻址,默认默认操作数在操作数在DS段
16、中段中MOV AX,SI括号中只要出现括号中只要出现BP则则默认操作数在默认操作数在SS段中,例如:段中,例如:MOV AX,BPMOV AL,BP+SIMOVBX,BP+DI+1500H低地址低地址高地址高地址CS段段操作码操作码34H12H34H12HAXSS段段7000073000SS7000 0300073000+MOV AX,BPBP4.寄存器间接寻址(寄存器间接寻址(2)5 寄存器寄存器相对相对寻址寻址(1)数据段基址数据段基址EA=(基址寄存器)基址寄存器)+位移量(位移量(8位或位或16位)位)BX为基址寄存器为基址寄存器DS为为默认段寄存器默认段寄存器MOV AX,BX+24
17、HMOV DX,BX+1500HBX中的数值加位移量中的数值加位移量(2)堆栈段基址堆栈段基址EA=(基址寄存器)基址寄存器)+位移量(位移量(8位或位或16位)位)BP为基址寄存器为基址寄存器SS为为默认段寄存器默认段寄存器MOV BX,BPMOV DX,BP+1500HBP中的数值加位移量中的数值加位移量低地址低地址高地址高地址CS段段操作码操作码00H15H34H12H34H12HAXDS段段7000073500BX150073500+MOV DX,BX+1500HDS7000 02000(3)变址变址寄存器寄存器EA=变址寄存器变址寄存器+位移量位移量SI,DI为变址寄存器为变址寄存器
18、,DS为为默认段寄存器默认段寄存器MOV AH,SI+5MOV AX,DI+1500H变址寻址适用于对一维数组的元素进行操作。变址寻址适用于对一维数组的元素进行操作。6 基址基址加加变址变址寻址寻址EA=基址基址寄存器寄存器+变址寄存器变址寄存器 MOV AX,BX+SI MOV AX,BX+DI MOV AX,BP+SI MOV AX,BP+DI 只要用上只要用上BP,那么默认的段寄存器就是那么默认的段寄存器就是SS,其他情况其他情况下默认下默认DS基址加变址寻址主要用于二维数组操作和二重循环基址加变址寻址主要用于二维数组操作和二重循环7 相对相对的的基址基址加加变址变址寻址寻址EA=基址基
19、址寄存器寄存器+变址寄存器变址寄存器+位移量位移量 MOV AL,BX+SI+50 MOV AL,BX+DI+1500H MOV AL,BP+SI+50 MOV AL,BP+DI+1500H主要用于二维数组操作主要用于二维数组操作,位移量为数组起始地址位移量为数组起始地址例5.1 1.MOV AL,1B57H 2.MOV AX,BX 3.MOV AX,BX+1B57H 4.MOV AX,DI 5.MOV AX,DI+1B57H 6.MOV AX,BX+DI 7.MOV AX,BX+SI+100H另外:另外:8.MOV AX,1234H 9.MOV AX,BX直接寻址直接寻址寄存器间接寻址寄存器
20、间接寻址BX寄存器寄存器相对相对间接寻址间接寻址变址寻址变址寻址 DI寄存器相对变址寻址寄存器相对变址寻址基址加变址寻址基址加变址寻址相对的基址加变址寻址相对的基址加变址寻址立即数寻址立即数寻址寄存器寻址寄存器寻址5.2 传送类指令传送类指令 1.通用数据传送指令通用数据传送指令 (1)基本传送指令基本传送指令(执行后不影响标志位,(执行后不影响标志位,源操作数不变)源操作数不变)例如,例如,MOV BL,40HMOV AL,BLMOV ES,DXMOV AX,BXMOV DI,AXMOV CX,1000HMOV DX,5040HMOV WORD PTRSI,70HMOV BYTE PTR B
21、X,10HMOV WORD PTRBX,10H 目的操作数目的操作数源操作数源操作数寄存器寄存器立即数内存内存有关操作数的规定有关操作数的规定1)目标操作数不允许为立即数;)目标操作数不允许为立即数;MOV 100H,AX;2)源、目不能同时为内存操作数源、目不能同时为内存操作数;MOV 0100H,BX;3)源、目操作数类型必须匹配;源、目操作数类型必须匹配;MOV AX,BL;MOV AL,1234H;MOV BYTE PTR BX,12H 4)不能向段寄存器写立即数,需要传送数据给段寄存器不能向段寄存器写立即数,需要传送数据给段寄存器时可通过通用寄存器转送;例时可通过通用寄存器转送;例,
22、MOV AX,2000 MOV DS,AX 5)以)以CS为目标的一切指令都是非法的为目标的一切指令都是非法的 MOV CS,AX;6)两操作数不能同时为段寄存器。两操作数不能同时为段寄存器。MOV DS,ES;7)使用间接寻址方式时,方括号内的寄存器)使用间接寻址方式时,方括号内的寄存器只能是只能是BX、BP、SI、DI。也也不能出现两个以上的同类偏移地址元素。不能出现两个以上的同类偏移地址元素。例如,例如,BX+BP,DI+SI是错误的;是错误的;8)运算类指令不能以段寄存器为操作数)运算类指令不能以段寄存器为操作数 ADD DS,AX;9)一切一切以以存储器为目标的操作数,而以立即数为源
23、操作存储器为目标的操作数,而以立即数为源操作数的指令必须用数的指令必须用前缀前缀指明目的操作数的大小。例,指明目的操作数的大小。例,MOV BYTE PTR BX,12H MOV WORD PTR 2000H,1234H ADD BYTE PTR BX+SI,56H其它要加前缀的情况举例:其它要加前缀的情况举例:1、INC BYTE PTR BX;DEC WORD PTR 1234H2、NEG WORD PTR SI;3、SUB WORD PTR SI,12H;CMP BYTE PTR DI,12H4、NOT WORD PTR SI;AND WORD PTR SI,12H;5、SHL WORD
24、 PTR SI,CL;RCL WORD PTR SI,1;不用加前缀的情况:不用加前缀的情况:MOV BX,AX;MOV 2000H,CX;ADD BX+SI,DX8086可以进行可以进行16位操作,也可以进行位操作,也可以进行8位操作,对内存操位操作,对内存操作数进行操作时在某些情况下,如果不加前缀作数进行操作时在某些情况下,如果不加前缀CPU无法确无法确定是定是16位操作还是位操作还是8位操作。位操作。习题(习题(P135)5.1、5.2、5.3、5.4说明:说明:5.1(2)MOV CX,DATASI (6)PUSHF5.3 写出以下指令中内存操作数所在的物理地址写出以下指令中内存操作数
25、所在的物理地址(此题主要测试寄此题主要测试寄存器所默认的段存器所默认的段)例如例如,MOV AL,BX+5 答案为答案为:DS*10H+(BX)+55.4 (7)MOV DS,2000H5.4 题书上有几个答案是错的题书上有几个答案是错的(2)堆栈操作指令堆栈操作指令l PUSH 源操作数(寄存器、存储器)源操作数(寄存器、存储器)把把字字压入堆栈,压入堆栈,首先首先栈指针栈指针SP自动减自动减2,再把一,再把一个个字字 源操作数进栈源操作数进栈PUSH AX、PUSH BX、PUSH 1234Hl POP 目标操作数(寄存器、存储器)目标操作数(寄存器、存储器)把把字字弹出堆栈,先将栈顶弹出
26、堆栈,先将栈顶2字节送目标操作数,字节送目标操作数,然后堆栈然后堆栈 指针指针SP自动加自动加2POP AX、POP BX、POP 1234H原原栈顶栈顶SS段段首地址首地址存储器存储器FAH12HFA12CXSP2006H2007HSS2000H新新栈顶栈顶2008H0200H0008H+-2X16PUSH CX 指令操作过程示意指令操作过程示意SP先减先减2,然后将,然后将CL送送入入SP,CH送入送入SP+1对对应的单元中应的单元中新新栈顶栈顶SS段段首地址首地址存储器存储器FAH12HFA12CXSP2006H2007HSS2000H原原栈顶栈顶2008H0200H0006H+2X16
27、POP CX 指令操作过程示意指令操作过程示意将将SP、SP+1对应单元中对应单元中的内容分别送入的内容分别送入CL、CH中,然后中,然后SP加加2(3)交换操作指令)交换操作指令 XCHG 目标,目标,源源(a)交换字节或字)交换字节或字:XCHG AL,BL XCHG AX,BX (b)寄存器之间,寄存器与内存之间,寄存器之间,寄存器与内存之间,内存之间(内存之间()(c)XCHG 2530H,CX 字交换字交换(d)直接寻址默认数据段直接寻址默认数据段DS。(e)不影响标志位不影响标志位七段数码管:七段数码管:abcdefgVccabcdefg发光二极管共阳极 显示的十进制数字 g f
28、e d c b a 16进制 0 0 1 0 0 0 0 0 0 40H 1 0 1 1 1 1 0 0 1 79H 2 0 0 1 0 0 1 0 0 24H 3 0 0 1 1 0 0 0 0 30H 8 0 0 0 0 0 0 0 0 00H(4)换码指令换码指令 XLAT:查表查表/译码译码低地址低地址高地址高地址19H40H24H30H02H78H执行上面指令后执行上面指令后AL:30H(只能送到只能送到AL中,中,字节翻译字节翻译)DS段段72000H72003HBX72000+DS7000 0200079H12H00HXLAT指令隐含的数据段为指令隐含的数据段为DS,使用前要先给
29、使用前要先给BX送表的首地送表的首地址,将偏移量送址,将偏移量送AL,执行,执行XLAT后,后,AL的值为偏移量对应表的值为偏移量对应表中的值,例如中的值,例如 MOVBX,2000H MOVAL,3 XLAT(4)换码指令换码指令 XLAT:查表查表/译码译码指令执行过程:指令执行过程:2.目标地址传送指令目标地址传送指令 LEA:取有效地址指令:取有效地址指令 (1)LEA 目标寄存器,目标寄存器,源操作数源操作数有效地址传送指令,源操作数为内存操作数,将内存有效地址传送指令,源操作数为内存操作数,将内存单元的单元的有效地址有效地址(而不是内容)传送到(而不是内容)传送到16位位的通用寄的
30、通用寄存器存器LEA AX,2728H (指令执行后,(指令执行后,AX中为中为2728)MOV AX,2728H MOV AX,2728HLEA BX,BP+SILEA SP,0482H,常用于传送符号地址常用于传送符号地址(LEA BX,TABLE)LEA AL,2728H;()LEA AX,1234H;()(2)LDS/LES:将地址指针装到将地址指针装到DS/ES和另一个寄和另一个寄存器存器LDS/LES 目标寄存器,目标寄存器,源操作数源操作数4个字节个字节的地址指针(段、偏移地址)传送到两个目的的地址指针(段、偏移地址)传送到两个目的寄存器,例如:寄存器,例如:LDS DI,213
31、0H,前两字节的内容送,前两字节的内容送DI,后两字节的,后两字节的内容送内容送DS。LES SI,BX,前两字节的内容送,前两字节的内容送SI,后两字节的内,后两字节的内容送容送ES。显然这两条指令的源操作数不能为立即数显然这两条指令的源操作数不能为立即数LDS DI,5678H;()LES SI,386AH;从;从P115的备注中也可以看出来。的备注中也可以看出来。()3.标志传送指令标志传送指令 LAHF把把FR标志寄存器低字节装入标志寄存器低字节装入AH 书书p119图图 SAHF把把AH装入装入FR标志寄存器低字节标志寄存器低字节 PUSHF POPFFR标志寄存器进栈标志寄存器进栈
32、/出栈指令出栈指令4.I/O数据数据传送指令传送指令完成完成累加器累加器AX、AL和和I/O端口之间的数据传送端口之间的数据传送IN 累加器,端口号累加器,端口号OUT 端口号端口号,累加器累加器(1)I/O指令的目的操作数和源操作数是固定搭配;指令的目的操作数和源操作数是固定搭配;寄存器只用寄存器只用AL、AX、DX(2)端口号端口号为为8 位时,可位时,可直接直接写端口地址,最多写端口地址,最多可访问可访问256个端口,端口地址为个端口,端口地址为16位位时,端口地址时,端口地址必必须放在须放在DX寄存器中,最多可访问寄存器中,最多可访问65536个端口个端口 IN AL,80H IN A
33、L,DX IN AX,80H IN AX,DX OUT 80H,AL OUT DX,AL OUT 80H,AX OUT DX,AX(3)与)与AX传送数据时,由两个端口各自传送,传送数据时,由两个端口各自传送,IN AX,70H 70H端口的端口的内容内容进进AL,71H端口的端口的内容内容进进AH(4)源操作数,目的操作数顺序,)源操作数,目的操作数顺序,IN/OUT IN 累加器,端口号累加器,端口号 OUT 端口号端口号,累加器累加器(5)I/O指令的寻址方式:直接寻址、寄存器指令的寻址方式:直接寻址、寄存器寻址寻址5.3 数据操作类指令数据操作类指令5.3.1算术运算类指令算术运算类指
34、令加、减、乘、除运算指令,处理加、减、乘、除运算指令,处理8/16位二进制有符号位二进制有符号/无无符号整数,以及符号整数,以及BCD码码影响标志位影响标志位1.加法指令加法指令ADD 目标操作数,目标操作数,源操作数源操作数源操作数源操作数+目标操作数目标操作数目标操作数目标操作数ADD AL,50H;ADD DI,SI;ADC 目标操作数,目标操作数,源操作数源操作数源操作数源操作数+目标操作数目标操作数+CF目标操作数目标操作数ADC BX+DI,AX;ADC AX,BX+2000H影响影响AF,CF,OF,PF,SF,ZF 6个状态标志位个状态标志位INC 目标操作数目标操作数目标操作
35、数目标操作数+1目标操作数目标操作数影响影响AF,OF,PF,SF,ZF 5个标志位,不影响个标志位,不影响CF2.减法指令减法指令SUB 目标操作数,目标操作数,源操作数源操作数目标操作数目标操作数-源操作数源操作数目标操作数目标操作数SBB 目标操作数,目标操作数,源操作数源操作数目标操作数目标操作数-源操作数源操作数-CF目标操作数目标操作数DEC 目标操作数目标操作数目标操作数目标操作数-1目标操作数目标操作数NEG 目标操作数(求补指令)目标操作数(求补指令)0-目标操作数目标操作数目标操作数目标操作数 CF=1影响影响AF,CF,OF,PF,SF,ZF 6个标志位个标志位CMP 目
36、标操作数,目标操作数,源操作数源操作数比较指令,执行两数相减,但不回送相减结果,比较指令,执行两数相减,但不回送相减结果,只影只影响标志位响标志位例:例:CMP AX,2000H;CMP AL,50H;CMP AX,BX+DI+100H;CMP DX,DI;CMP BYTE PTRBX,78H;CMP WORD PTRSI,1234H 表表 5-4 CMP 指令执行后标志位的状况指令执行后标志位的状况目标操作数与源操作数的关系目标操作数与源操作数的关系 CF ZF SF OF 等于等于 0 1 0 0 带符号位带符号位 小于小于 -0 1 0 的操作数的操作数 目的操作数目的操作数 小于小于
37、源操作数源操作数 -0 0 1 大于大于 -0 0 0 大于大于 -0 1 1 不带符号位不带符号位 等于等于 0 1 0 0 的操作数的操作数 目标操作数目标操作数 低于低于 源操作数源操作数 1 0 -高于高于 0 0 -结论:(有符号数)SF OF=1(小于);SF F=0 (大于)表表5-4(带符号位的操作数,以(带符号位的操作数,以8位二进制数为例)位二进制数为例)负数负数-负数负数负绝对值大负绝对值大 负绝对值小,(负绝对值小,(-3)-(-2)小于小于SF=1,OF=0 SF OF=1正小数正小数 正大数正大数 2 3 小于小于,SF=1,OF=0 SF OF=1负数负数 正数正
38、数:小于小于;(;(-2)-(+127)=-129,OF=1,SF=0(SF OF=1)(-3)-(+2)=-5,OF=0,SF=1 (SF OF=1)正数正数 正数正数表表5-4(带符号位的操作数,以(带符号位的操作数,以8位二进制数为例)位二进制数为例)负数负数-负数负数负绝对值小负绝对值小 负绝对值大,(负绝对值大,(-2)-(-3)大于大于SF=0,OF=0 SF OF=0 正数正数 正数正数正大数正大数 正小数正小数 3-2 大于大于SF=0,OF=0 ,SF OF=0正数正数-负数负数大于大于 ;(;(+127)-(-2)=+129 OF=1,SF=1 (SF OF=0)(+3)-
39、(-2)=+5,OF=0,SF=0 (SF OF=0)2:00000010 -2:11111110 +127:01111111+3:00000011,-3:11111101 127-(-2)3 -(-2)(-2)-127 (-3)-2=+129 =+5 =-129 =-5大于大于 大于大于 小于小于 小于小于 01111111 00000011 11111110 11111101-11111110 -11111110 -01111111 -00000010 10000001 00000101 00000001 11111011OF=1 OF=0 OF=1 OF=0 SF=1 SF=0 SF=0
40、 SF=1表表5-4 结论:结论:1、无符号数的减运算不可能出现溢出,目的操作数、无符号数的减运算不可能出现溢出,目的操作数 大于源操作数时大于源操作数时CF=0,反之,反之CF=1;2、有符号数的减运算当目的操作数、有符号数的减运算当目的操作数大于大于源操作数时源操作数时 OF SF=0,小于小于时时OF SF=1。(参考(参考133页)页)3.乘法指令乘法指令MUL 乘数乘数(无符号乘法),单操作数指令,隐含被乘数(无符号乘法),单操作数指令,隐含被乘数AL,AX,运算结果存入运算结果存入 AX 或或 DXAX例,例,MUL CL ;AL*CL AX;MUL DX ;AX*DX DXAX
41、MUL BYTE PTRSI;AL*SI AX;MUL WORD PTRBX;AX*BX+1BX DXAXIMUL 乘数乘数(有有符号乘法)情况与上面相同,运算结果按有符号乘法)情况与上面相同,运算结果按有符号数给出。例:符号数给出。例:MOV AL,81H;(;(129)MOV BL,2MUL BL结果结果AX=0102H;(;(258)MOV AL,81H;(;(-127)MOV BL,2IMUL BL结果结果AX=FF02H;(;(-254)4.除法指令除法指令DIV 除数除数(无符号除法),单操作数指令,隐含被除数(无符号除法),单操作数指令,隐含被除数AX,DXAX,运算结果存入运算
42、结果存入 AL(商)商)+AH(余)余)或或 AX(商)商)+DX(余)余)例,例,DIV BL;AX/BL AL(商)商)+AH(余)余)DIV BX;DXAX/BX AX(商)商)+DX(余)余)DIV BYTE PTRBX;AX/BX AL(商)商)+AH(余)余)DIV WORD PTRBX;DXAX/(BX+1BX)AX(商)商)+DX(余)余)IDIV 除数除数(有符号除法)情况与上面相同,运算结果按有(有符号除法)情况与上面相同,运算结果按有 符号数给出。符号数给出。乘、除指令格式:操作码乘、除指令格式:操作码 源操作数(单操作数,隐含另一个源操作数(单操作数,隐含另一个操作操作
43、 数和目的操作数);数和目的操作数);源操作数:源操作数:通用寄存器、存储器通用寄存器、存储器显然,显然,MUL 10 MUL BL,54.除法指令除法指令表5-5 带符号数除法的商和余数被除数 除数 商 余数 9 2 4 1 9 -2 -4 1 -9 2 -4 -1 -9 -2 4 -1余数与被除数同号,商往0靠拢。被除数 除数 商 余数 9 2 5 -1 9 -2 -5 -1 -9 2 -5 1 -9 -2 5 1CBW(字节转换成字指令)字节转换成字指令)指令将指令将AL中的单字节数的符号扩展到中的单字节数的符号扩展到AH中,例如中,例如CWD(字转换成双字指令)字转换成双字指令)指令将
44、指令将AX中的单字数的符号扩展到中的单字数的符号扩展到DX中中,例如例如 原AX=XXXX XXXX 0111 1111B(007FH),执行CBW命令后AX=0000 0000 0111 1111B(007FH),如果原AX=XXXX XXXX 1000 0001B(0081H),执行CBW命令后 AX=1111 1111 1000 0001B(FF81H)对于无操作数指令,一定要注意其隐含的源、目操作数对于无操作数指令,一定要注意其隐含的源、目操作数原AX=0111 1111 1111 1111B(7FFFH),执行CWD命令后DX=0000 0000 0000 0000B(0000H),
45、AX不变;如果原AX=1000 0000 0000 0001B(8001H),执行CWD命令后 DX=1111 1111 1111 1111B(FF81H),AX不变5.十进制调整指令十进制调整指令AAA加法的非压缩加法的非压缩BCD码调整指令码调整指令DAS减法的压缩减法的压缩BCD码调整指令码调整指令AAS减法的非压缩减法的非压缩BCD码调整指令码调整指令AAM乘法的非压缩乘法的非压缩BCD码调整指令码调整指令DAA加法的压缩加法的压缩BCD码调整指令码调整指令(1)压缩压缩BCD码调整指令码调整指令(2)非压缩非压缩BCD码调整指令码调整指令AAD除法的非压缩除法的非压缩BCD码调整指令
46、码调整指令 DAA(decimal adjust for addition)加法的压缩加法的压缩BCD码调整指令码调整指令DAA指令把指令把AL中的和调整为压缩的中的和调整为压缩的BCD格式。格式。目的操作数为目的操作数为AL寄存器;寄存器;DAA指令对指令对OF标志无定义,但影响其它标志位。标志无定义,但影响其它标志位。DAS(decimal adjust for subtraction)减法的压缩减法的压缩BCD码调整指令码调整指令DAS指令把指令把AL中的差调整为压缩的中的差调整为压缩的BCD格式。格式。目的操作数为目的操作数为AL寄存器;寄存器;DAS指令对指令对OF标志无定义,但影响
47、其它标志位。标志无定义,但影响其它标志位。一个字节代表一个一个字节代表一个BCD码称为码称为非非压缩压缩BCD码码例,例,05H,09H一个字节代表两个一个字节代表两个BCD码称为压缩码称为压缩BCD码码例,例,15H,36H,50HDAA、DAS 指令根据指令根据CF,AF或者运算结果或者运算结果某位是否某位是否大于大于9来进行来进行BCD码调整,现以码调整,现以ADD与与DAA为例为例 43+55=98 39+49=88 63+54=117 87+86=113 01000011 00111001 01100011 10000111 +01010101 +01001001 +01010100
48、 +10000110 10011000 10000010 10110111 00001101CF=0 CF=0 CF=0 CF=1AF=0 AF=1 AF=0 AF=0不加不加 +06H 高位高位9 低位低位 9 +60H +66H 说明:说明:1 压缩压缩 BCD 码调整指令码调整指令DAA、DAS只调整只调整 AL中的值,中的值,执行调整指令有进位或借位时,影响进位标志位执行调整指令有进位或借位时,影响进位标志位CF,例如,例如,798+527=1325 MOV AX,0798H ;AX=0798H ADD AX,0527H ;AX=0CBFH DAA ;AX=0CBFH+66H=0C25
49、H,CF=1 AH中的值未调整,进位也未进到中的值未调整,进位也未进到AH中,显然结果不正确,中,显然结果不正确,其原因是其原因是DAA、DAS只调整只调整 AL中的值。中的值。AAA加法的非压缩加法的非压缩BCD码调整指令码调整指令AAA指令把指令把AL中的和调整为非压缩的中的和调整为非压缩的BCD格式,并格式,并把调整时产生的进位加到把调整时产生的进位加到AH寄存器中。寄存器中。跟在跟在ADD,ADC指令之后;指令之后;目的操作数为目的操作数为AL寄存器;寄存器;AAA指令影响指令影响AF和和CF标志位。标志位。AAS减法的非压缩减法的非压缩BCD码调整指令码调整指令AAS指令把指令把AL
50、中的差调整为非压缩的中的差调整为非压缩的BCD格式。格式。跟在跟在SUB,SBB指令之后;指令之后;目的操作数为目的操作数为AL寄存器;寄存器;AAS指令影响指令影响AF和和CF标志位。标志位。AAM乘法的非压缩乘法的非压缩BCD码调整指令码调整指令调整方法:把调整方法:把AL寄存器的乘积除以寄存器的乘积除以0AH,商放在,商放在AH寄存器中,余数保存在寄存器中,余数保存在AL寄存器中。寄存器中。根据根据AL寄存器的内容设置寄存器的内容设置SF,ZF,PF,但但OF,CF,AF标志无定义。标志无定义。AAD除法的非压缩除法的非压缩BCD码调整指令码调整指令 AAS指令影响指令影响AF和和CF标