《003第三章8086指系统.ppt》由会员分享,可在线阅读,更多相关《003第三章8086指系统.ppt(196页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第章8086指令系统 本章内容本章内容8088/8086的指令格式的指令格式8088/8086的寻址方式的寻址方式8088/8086的基本指令的基本指令3.1 概述概述从从8088/8086的指令格式入手,学习的指令格式入手,学习:立即数寻址方式立即数寻址方式寄存器寻址方式寄存器寻址方式存储器寻址方式存储器寻址方式进而熟悉进而熟悉8088/8086汇编语言指令格式,尤其汇编语言指令格式,尤其是其中操作数的表达方法是其中操作数的表达方法为展开为展开8088/8086指令系统做好准备指令系统做好准备3.1.1 指令的组成指令的组成操作码操作码说明计算机要执行哪种操作,如传送、运算、说明计算机要执行
2、哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部移位、跳转等操作,它是指令中不可缺少的组成部分分操作数操作数是指令执行的参与者,即各种操作的对象是指令执行的参与者,即各种操作的对象有些指令不需要操作数,通常的指令都有一个或两有些指令不需要操作数,通常的指令都有一个或两个操作数,也有个别指令有个操作数,也有个别指令有3个甚至个甚至4个操作数个操作数操作码操作码操作数操作数指令由操作码和操作数两部分组成指令由操作码和操作数两部分组成3.1.2 指令的助记符格式指令的助记符格式操作数操作数2 2,常被称为源操作数,常被称为源操作数srcsrc,它表示参与指它表示参与指令操作的一个
3、对象令操作的一个对象操作数操作数1 1,常被称为目的操作数,常被称为目的操作数destdest,它不仅可以它不仅可以作为指令操作的一个对象,还可以用来存放指令作为指令操作的一个对象,还可以用来存放指令操作的结果操作的结果分号后的内容是对指令的解释分号后的内容是对指令的解释 操作码操作码 操作数操作数1,操作数操作数2 ;注释注释汇编语句格式汇编语句格式3.1.3 指令的操作码和操作数指令的操作码和操作数每种指令的每种指令的操作码操作码:用一个助记符表示(指令功能的英文缩写)用一个助记符表示(指令功能的英文缩写)对应着机器指令的一个或多个二进制编码对应着机器指令的一个或多个二进制编码指令中的指令
4、中的操作数操作数:可以是一个具体的数值可以是一个具体的数值可以是存放数据的寄存器可以是存放数据的寄存器或指明数据在主存位置的存储器地址或指明数据在主存位置的存储器地址3.2 操作数的寻址方式操作数的寻址方式指令系统设计了多种操作数的来源指令系统设计了多种操作数的来源寻找操作数的过程就是操作数的寻址寻找操作数的过程就是操作数的寻址寻找操作数的方式叫做(操作数)寻址方式寻找操作数的方式叫做(操作数)寻址方式理解操作数的寻址方式是理解指令功能的前提理解操作数的寻址方式是理解指令功能的前提操作数采取哪一种寻址方式操作数采取哪一种寻址方式一方面,会影响处理器执行指令的速度和效率一方面,会影响处理器执行指
5、令的速度和效率另一方面,另一方面,对程序设计也很重要对程序设计也很重要MOV指令指令3.2.1 立即数寻址方式立即数寻址方式指令中的操作数直接存放在机器代码中,紧跟在操作指令中的操作数直接存放在机器代码中,紧跟在操作码之后(操作数作为指令的一部分存放在操作码之后码之后(操作数作为指令的一部分存放在操作码之后的主存单元中)的主存单元中)这种操作数被称为这种操作数被称为立即数立即数imm可以是可以是8位数值位数值i8(00HFFH)也可以是也可以是16位数值位数值i16(0000HFFFFH)立即数寻址方式常用来给寄存器和存储单元赋值,多立即数寻址方式常用来给寄存器和存储单元赋值,多以常量形式出现
6、以常量形式出现演示演示演示演示MOV AX,0102H;AX0102H3.2.2 寄存器寻址方式寄存器寻址方式操作数存放在操作数存放在CPU的内部寄存器的内部寄存器reg中:中:8位寄存器位寄存器r8:AH、AL、BH、BL、CH、CL、DH、DL16位寄存器位寄存器r16:AX、BX、CX、DX、SI、DI、BP、SP4个段寄存器个段寄存器seg:CS、DS、SS、ES寄存器名表示其内容(操作数)寄存器名表示其内容(操作数)演示演示演示演示MOV AX,BX;AXBX3.2.3 存储器寻址方式存储器寻址方式操作数在主存储器中,用主存地址表示操作数在主存储器中,用主存地址表示程序设计时,程序设
7、计时,8088采用逻辑地址表示主存地址采用逻辑地址表示主存地址段地址在默认的或用段超越前缀指定的段寄存器中段地址在默认的或用段超越前缀指定的段寄存器中指令中只需给出操作数的偏移地址(指令中只需给出操作数的偏移地址(有效地址有效地址EA)8086设计了多种设计了多种存储器寻址方式存储器寻址方式1、直接寻址方式、直接寻址方式2、寄存器间接寻址方式、寄存器间接寻址方式3、寄存器相对寻址方式、寄存器相对寻址方式4、基址变址寻址方式、基址变址寻址方式5、相对基址变址寻址方式、相对基址变址寻址方式3.2.3 1.直接寻址方式直接寻址方式直接寻址方式的有效地址在指令中直接给出直接寻址方式的有效地址在指令中直
8、接给出默认的默认的段地址在段地址在DS段寄存器,可使用段寄存器,可使用段超越前缀段超越前缀改改变变用中括号包含有效地址,表达存储单元的内容用中括号包含有效地址,表达存储单元的内容演示演示演示演示MOV AX,2000H;AXDS:2000HMOV AX,ES:2000H;AXES:2000H3.2.3 2.寄存器间接寻址方式寄存器间接寻址方式有效地址存放在基址寄存器有效地址存放在基址寄存器BX、BP或变址或变址寄存器寄存器SI、DI中中默认的默认的段地址在段地址在DS段寄存器,可使用段超越段寄存器,可使用段超越前缀改变前缀改变演示演示演示演示MOV AX,BX;AXDS:BX3.2.3 3.寄
9、存器相对寻址方式寄存器相对寻址方式有效地址有效地址是寄存器内容与有符号是寄存器内容与有符号8位或位或16位位移量之位位移量之和,寄存器可以是和,寄存器可以是BX、BP或或SI、DI有效地址有效地址BX/BP/SI/DIBX/BP/SI/DI8/168/16位位移量位位移量段地址对应段地址对应BX/SI/DI寄存器寄存器默认是默认是DS,对应对应BP寄存寄存器器默认是默认是SS;可用段超越前缀改变可用段超越前缀改变演示演示演示演示MOV AX,SI+06H;AXDS:SI+06HMOV AX,06HSI;AXDS:SI+06H3.2.3 4.基址变址寻址方式基址变址寻址方式有效地址有效地址由基址
10、寄存器(由基址寄存器(BX或或BP)的内容加上变址的内容加上变址寄存器(寄存器(SI或或DI)的内容构成:的内容构成:有效地址有效地址BX/BPSI/DI段地址对应段地址对应BX基址寄存器基址寄存器默认是默认是DS,对应对应BP基址寄基址寄存器存器默认是默认是SS;可用段超越前缀改变可用段超越前缀改变演示演示演示演示MOV AX,BX+SI;AXDS:BX+SIMOV AX,BXSI;AXDS:BX+SI3.2.3 5.相对基址变址寻址方式相对基址变址寻址方式有效地址有效地址是基址寄存器(是基址寄存器(BX/BP)、)、变址寄存器变址寄存器(SI/DI)与一个与一个8位或位或16位位移量之和:
11、位位移量之和:有效地址有效地址BX/BPSI/DI8/16位位移量位位移量段地址对应段地址对应BX基址寄存器基址寄存器默认是默认是DS,对应对应BP基址寄基址寄存器存器默认是默认是SS;可用段超越前缀改变可用段超越前缀改变演示演示演示演示MOV AX,BX+DI+6;AXDS:BX+DI+6MOV AX,6BX+DIMOV AX,6BXDI3.2.4 操作数的表达符号(操作数的表达符号(1)操作数符号操作数符号含含义义(寻寻址方式址方式)i8一个一个8位立即数位立即数i16一个一个16位立即数位立即数imm代表代表i8或或i16r8任意一个任意一个8位通用寄存器位通用寄存器AH,AL,BH,B
12、L,CH,CL,DH,DLr16任意一个任意一个16位通用寄存器位通用寄存器AX,BX,CX,DX,SI,DI,BP,SPreg代表代表r8或或r16seg段寄存器段寄存器CS、DS、ES、SS3.2.4 操作数的表达符号(操作数的表达符号(2)操作数符号操作数符号含含义义(寻寻址方式)址方式)m8一个一个8位存位存储储器操作数器操作数单单元(包括所有主存元(包括所有主存寻寻址方式)址方式)m16一个一个16位存位存储储器操作数器操作数单单元(包括所有主存元(包括所有主存寻寻址方式)址方式)mem代表代表m8或或m16dest目的操作数目的操作数src源操作数源操作数作业作业教材教材99页页第
13、第3.1题题 第第3.2题题 第第3.3题题 3.3 8086/8088指令系统指令系统数据传送是计算机中最基本、最重要的一种操数据传送是计算机中最基本、最重要的一种操作作,传送指令也是最常使用的一类指令传送指令也是最常使用的一类指令传送指令把数据从一个位置传送到另一个位置传送指令把数据从一个位置传送到另一个位置除标志寄存器传送指令外,均不影响标志位除标志寄存器传送指令外,均不影响标志位重点掌握重点掌握MOV XCHG XLAT PUSH POP LEA3.3.1 数据传送类指令数据传送类指令提供方便灵活的通用传送操作提供方便灵活的通用传送操作有有3条指令条指令MOVXCHGXLAT3.3.1
14、.1 通用数据传送指令通用数据传送指令MOVMOVXCHGXCHGXLATXLAT1.传送指令传送指令MOV(move)把一个字节或字的操作数从源地址传送至目的把一个字节或字的操作数从源地址传送至目的地址地址MOV MOV reg/mem,immreg/mem,imm;立即数送寄存器或主存立即数送寄存器或主存MOV MOV reg/mem/seg,regreg/mem/seg,reg;寄存器送(段)寄存器或主存寄存器送(段)寄存器或主存MOV MOV reg/seg,memreg/seg,mem;主存送(段)寄存器主存送(段)寄存器MOV MOV reg/mem,segreg/mem,seg;
15、段寄存器送寄存器或主存段寄存器送寄存器或主存演示演示(1)、)、MOV指令指令立即数传送立即数传送mov cl,4;cl4cl4,字节传送字节传送mov dx,0ffh;dx00ffhdx00ffh,字传送字传送mov si,200h;si0200hsi0200h,字传送字传送mov bvar,0ah;字节传送字节传送;假设;假设bvarbvar是一个字节变量,定义如下:是一个字节变量,定义如下:bvarbvar dbdb 0 0mov wvar,0bh;字传送字传送;假设;假设wvarwvar是一个字变量,定义如下:是一个字变量,定义如下:wvarwvar dwdw 0 0明确指令是字节操作
16、还是字操作明确指令是字节操作还是字操作以字母开头的常数要有前导以字母开头的常数要有前导以字母开头的常数要有前导以字母开头的常数要有前导0 0 0 0(2)、)、MOV指令指令寄存器传送寄存器传送mov ah,al;ahal,字节传送字节传送mov bvar,ch;bvarch,字节传送字节传送mov ax,bx;axbx,字传送字传送mov ds,ax;dsax,字传送字传送 寄存器具有明确的字节和字类型寄存器具有明确的字节和字类型(3)、)、MOV指令存储器传送指令存储器传送mov al,bx;alds:bxmov dx,bp;dxss:bp+0mov dx,bp+4;dxss:bp+4mo
17、v es,si;esds:si 不存在存储器向存储器的传送指令不存在存储器向存储器的传送指令(4)、)、MOV指令段寄存器传送指令段寄存器传送mov ax,ds;axdsmov es,ax;esaxds 对段寄存器的操作不灵活对段寄存器的操作不灵活(5)、)、MOV指令传送功能图解指令传送功能图解立即数立即数段寄存器段寄存器CSCS DS ES SS DS ES SS通用寄存器通用寄存器AX BX CX DXAX BX CX DXBP SP SI DIBP SP SI DI存存储储器器MOVMOV指令并非任意传送指令并非任意传送指令并非任意传送指令并非任意传送!非法指令的主要现象:非法指令的主
18、要现象:两个操作数的类型不一致两个操作数的类型不一致无法确定是字节量还是字量操作无法确定是字节量还是字量操作两个操作数都是存储器两个操作数都是存储器段寄存器段寄存器CS作为目标操作数作为目标操作数*非法指令非法指令两个操作数类型不一致两个操作数类型不一致在绝大多数双操作数指令中,目的操作数和源操作数在绝大多数双操作数指令中,目的操作数和源操作数必须具有一致的数据类型,或者同为字量,或者同为必须具有一致的数据类型,或者同为字量,或者同为字节量,否则为非法指令字节量,否则为非法指令MOV AL,050AH;非法指令,非法指令,修正:修正:;mov ax,050ahMOV SI,DL;非法指令,非法
19、指令,修正:修正:;mov dh,0;mov si,dx*非法指令非法指令无法确定是字节量还是字量操作无法确定是字节量还是字量操作当无法通过任一个操作数确定是操作类型时,需要利当无法通过任一个操作数确定是操作类型时,需要利用汇编语言的操作符显式指明用汇编语言的操作符显式指明MOV BX+SI,255;非法指令,非法指令,修正:修正:;mov byte byte ptrptr bx+si bx+si,255;byte byte ptrptr 说明是字节操作说明是字节操作;mov word word ptrptr bx+si bx+si,255;word word ptrptr 说明是字操作说明是
20、字操作*非法指令非法指令两个操作数都是存储器两个操作数都是存储器8088指令系统除串操作指令外,不允许两个操作数指令系统除串操作指令外,不允许两个操作数都是存储单元(存储器操作数)都是存储单元(存储器操作数)MOV buf2,buf1;非法指令,非法指令,修正:修正:;假设;假设buf2和和buf1是两个字变量是两个字变量;mov ax,buf1;mov buf2,ax;假设假设buf2和和buf1是两个字节变量是两个字节变量;mov al,buf1;mov buf2,al*非法指令非法指令段寄存器的操作有一些限制段寄存器的操作有一些限制8088指令系统中,能直接对段寄存器操作的指令只指令系统
21、中,能直接对段寄存器操作的指令只有有MOV等个别传送指令,并且不灵活等个别传送指令,并且不灵活MOV DS,ES;非法指令,非法指令,修正:修正:;mov ax,es;mov ds,axMOV DS,100H;非法指令,非法指令,修正:修正:;mov ax,100h;mov ds,ax MOV CS,SI;非法指令非法指令;以;以CS为目标操作数为目标操作数2.交换指令交换指令XCHG(exchange)XCHG XCHG reg,reg/memreg,reg/mem;regreg reg/memreg/mem把两个地方的数据进行互换把两个地方的数据进行互换寄存器与寄存器之间对换数据寄存器与寄
22、存器之间对换数据寄存器与存储器之间对换数据寄存器与存储器之间对换数据不能在存储器与存储器之间对换数据不能在存储器与存储器之间对换数据演示演示例例 数据交换数据交换movmov ax,1199h ax,1199h;ax=1199hax=1199hxchgxchg ah,al ah,al;ax=9911hax=9911h;等同于等同于 xchgxchg al,ah al,ahmovmov wvar,5566h wvar,5566h;wvarwvar是一个字型变量是一个字型变量xchgxchg ax,wvarax,wvar ;ax=5566hax=5566h,wvarwvar=9911h=9911h
23、;等同于等同于 xchgxchg wvar,axwvar,ax xchgxchg al,byte al,byte ptrptr wvar+1 wvar+1;ax=5599hax=5599h,wvarwvar=6611h=6611h;“byte byte ptrptr wvar+1”wvar+1”强制为字节量,只取高字节强制为字节量,只取高字节与与ALAL类型交换,否则数据类型不匹配类型交换,否则数据类型不匹配3.换码指令换码指令XLAT(translate)将将BX指定的缓冲区中、指定的缓冲区中、AL指定的位移处的一个字节指定的位移处的一个字节数据取出赋给数据取出赋给ALXLATXLAT;al
24、ds:bx+alalds:bx+al 换码指令执行前:换码指令执行前:在主存建立一个在主存建立一个字节量表格字节量表格,内含要转换成的目的代码,内含要转换成的目的代码表格首地址表格首地址存放于存放于BXBX,ALAL存放相对表格首地址的存放相对表格首地址的位移量位移量换码指令执行后:换码指令执行后:将将ALAL寄存器的内容转换为寄存器的内容转换为目标代码目标代码演示演示3.3.1.2 堆栈操作指令堆栈操作指令堆栈是一个堆栈是一个“先进后出先进后出”(或说(或说“后进先后进先出出”)的主存区域,位于堆栈段中;)的主存区域,位于堆栈段中;SSSS段段寄存器寄存器记录其段地址记录其段地址堆栈只有一个
25、出口,即当前栈顶;用堆栈只有一个出口,即当前栈顶;用堆栈堆栈指针寄存器指针寄存器SPSP指定指定堆栈只有两种基本操作:进栈和出栈,对堆栈只有两种基本操作:进栈和出栈,对应两条指令应两条指令PUSH和和POP图示图示1.进栈指令进栈指令PUSH进栈指令先使堆栈指针进栈指令先使堆栈指针SP减减2,然后把一个字,然后把一个字操作数存入堆栈顶部操作数存入堆栈顶部PUSH r16/m16/segPUSH r16/m16/seg;SPSPSPSP2 2;SS:SPr16/m16/segSS:SPr16/m16/seg演示演示push axpush 2000h2000h2.出栈指令出栈指令POP出栈指令把栈
26、顶的一个字传送至指定的目的操出栈指令把栈顶的一个字传送至指定的目的操作数,然后堆栈指针作数,然后堆栈指针SP加加2POP r16/m16/segPOP r16/m16/seg(CSCS除外)除外);r16/m16/segSS:SPr16/m16/segSS:SP;SPSPSPSP2 2演示演示pop axpop wvar3.堆栈操作的特点堆栈操作的特点堆栈操作的单位是字,进栈和出栈只对字量堆栈操作的单位是字,进栈和出栈只对字量字量数据从栈顶压入和弹出时,都是低地址字节送低字量数据从栈顶压入和弹出时,都是低地址字节送低字节,高地址字节送高字节字节,高地址字节送高字节堆栈操作遵循先进后出原则,但可
27、用存储器寻址方式堆栈操作遵循先进后出原则,但可用存储器寻址方式随机存取堆栈中的数据随机存取堆栈中的数据堆栈段是程序中不可或缺的一个内存区,常用来堆栈段是程序中不可或缺的一个内存区,常用来n临时存放数据临时存放数据n传递参数传递参数n保存和恢复寄存器保存和恢复寄存器3.3.1.3 标志操作指令标志操作指令1.标志位操作指令标志位操作指令CLC;复位进位标志:;复位进位标志:CF0STC;置位进位标志:;置位进位标志:CF1CMC ;求反进位标志:;求反进位标志:CFCFCLD ;复位方向标志:;复位方向标志:DF0STD ;置位方向标志:;置位方向标志:DF1CLI ;复位中断标志:;复位中断标
28、志:IF0STI ;置位中断标志:;置位中断标志:IF12.标志寄存器标志寄存器低低字节与字节与AH的传送指令的传送指令 LAHF (Load AH with Flags)标志送标志送AH SAHF (Store AH into Flags)AH送标志寄存器送标志寄存器3.标志寄存器出入堆栈指令标志寄存器出入堆栈指令 PUSHF (Push the Flags)标志进栈标志进栈 POPF (Pop the Flags)标志出栈标志出栈3.3.1.4 地址传送指令地址传送指令地址传送指令包括地址传送指令包括3条指令:条指令:1.取有效地址指令取有效地址指令LEA;2.将地址指针装入将地址指针装入
29、DS(数据段寄存器数据段寄存器)指令指令LDS;3.将地址指针装入将地址指针装入ES(附加段寄存器附加段寄存器)指令指令LES。1.有效地址传送指令有效地址传送指令LEA(load effective address)将存储器操作数的有效地址送至指定的将存储器操作数的有效地址送至指定的16位通用寄位通用寄存器存器LEA r16,mem;r16mem的有效地址的有效地址EA例例 有效地址的获取有效地址的获取mov bx,400hmov si,3chlea bx,bx+si+0f62h;BX400H3CH0F62H139EH例例 地址传送与内容传送地址传送与内容传送wvar dw 4142h;假设
30、偏移地址为假设偏移地址为04Hmov ax,wvar;内容传送:内容传送:AX4142Hlea si,wvar;地址传送:地址传送:SI0004H ;等同于;等同于 lea si,0004hmov cx,si;内容传送:内容传送:CX4142Hmov di,offset wvar;mov di,0004h;利用操作符利用操作符OFFSET获取变量的有效地址获取变量的有效地址mov dx,di;内容传送:内容传送:DX4142H2.地址指针装入地址指针装入DS指令指令 LDS功能:把源操作数有效地址所对应的功能:把源操作数有效地址所对应的双字长双字长的内的内存单元中的高字内容存单元中的高字内容(
31、一般为一般为1616位段地址位段地址)送入送入DSDS,低字内容低字内容(一般为偏移地址一般为偏移地址)送入指令所指送入指令所指定的寄存器中。定的寄存器中。格式:格式:LDS REGLDS REG,MEMMEM例:例:LDS DI,LDS DI,2130H2130H ;执行此指令后,将执行此指令后,将2130H2130H和和2131H 2131H 中的内容中的内容(偏移量偏移量)送到送到DIDI中,而将中,而将2132H2132H和和2133H2133H中的内容中的内容(段值段值)送到送到DSDS中。中。3.将地址指针装入将地址指针装入ES(附加段寄存器附加段寄存器)指令指令LES功能:把源操
32、作数有效地址所对应的双字长的内存单元功能:把源操作数有效地址所对应的双字长的内存单元中的高字内容中的高字内容(一般为一般为1616位段地址位段地址)送入送入ESES,低字内容低字内容(一般为偏移地址一般为偏移地址)送入指令所指定的寄存器中。送入指令所指定的寄存器中。LESLES与与LDSLDS的指令格式及使用方法是相似的。的指令格式及使用方法是相似的。格式:格式:LES REGLES REG,MEMMEM例:例:LES DI,LES DI,2130H2130H ;执行此指令后,将执行此指令后,将2130H2130H和和2131H2131H中的内容中的内容(偏移量偏移量)送到送到DIDI中,中,
33、而将而将2132H2132H和和2133H2133H中的内容中的内容(段值段值)送到送到ESES中。中。LEA LDS LES以上以上3条指令指定的寄存器不能使用段寄存器条指令指定的寄存器不能使用段寄存器源操作数必须使用除立即数方式及寄存器方式源操作数必须使用除立即数方式及寄存器方式以外的其它寻址方式以外的其它寻址方式不影响标志位不影响标志位地址传送指令小结地址传送指令小结3.3.2 算术运算类指令算术运算类指令算术运算类指令用来执行二进制的算术运算:算术运算类指令用来执行二进制的算术运算:加减乘除加减乘除。这类指令会根据运算结果影响这类指令会根据运算结果影响状态标志状态标志,有时,有时要利用
34、某些标志才能得到正确的结果;使用时要利用某些标志才能得到正确的结果;使用时请留心有关状态标志请留心有关状态标志重点掌握重点掌握加法指令:加法指令:ADD、ADC、INC 减法指令:减法指令:SUB、SBB、DEC、CMP、NEG3.3.2.1 加法和减法指令加法和减法指令加法指令加法指令:ADD,ADC和和INC减法指令减法指令:SUB,SBB,DEC,NEG和和CMP它们分别执行它们分别执行字或字节字或字节的加法和减法运算,除的加法和减法运算,除INC和和DEC不影响不影响CF标志外,其它按定义影响标志外,其它按定义影响全部状态标志位全部状态标志位操作数组合:操作数组合:助记符助记符 reg
35、,imm/reg/mem 助记符助记符 mem,imm/reg1.加和减指令加和减指令 ADD dest,src;加法:加法:destdestsrc;ADD指令使目的操作数加上源操作数,和的结指令使目的操作数加上源操作数,和的结果送到目的操作数果送到目的操作数SUB dest,src;减法:减法:destdestsrc;SUB指令使目的操作数减去源操作数,差的结指令使目的操作数减去源操作数,差的结果送到目的操作数果送到目的操作数例例 加法加法mov ax,7348h;AX7348Hadd al,27h;AL48H27H6FH,AX736FH;OF0,SF0,ZF0,PF1,CF0add ax,
36、3fffh;AX736FH3FFFHB36EH;OF1,SF1,ZF0,PF0,CF0例例 减法减法sub ah,0f0h;AHB3HF0HC3H,AXC36EH;OF0,SF1,ZF0,PF1,CF1mov word ptr200h,0ef00h;200HEF00H,标志不变标志不变sub 200h,ax;200HEF00HC36EH2B92H;OF0,SF0,ZF0,PF0,CF0sub si,si;SI0;OF0,SF0,ZF1,PF1,CF02.带进位加和减指令带进位加和减指令 ADC dest,src;加法:加法:destdestsrcCF;ADC指令除完成指令除完成ADD加法运算外
37、,还要加上进加法运算外,还要加上进位位CF,结果送到目的操作数结果送到目的操作数SBB dest,src;减法:减法:destdestsrcCF;SBB指令除完成指令除完成SUB减法运算外,还要减去借减法运算外,还要减去借位位CF,结果送到目的操作数结果送到目的操作数例例 无符号双字加法和减法无符号双字加法和减法mov ax,7856h;AX7856Hmov dx,8234h;DX8234Hadd ax,8998h;AX01EEH,CF1adc dx,1234h;DX9469H,CF0sub ax,4491h;AXBD5DH,CF1sbb dx,8000h;DX1468H,CF0DX.AX82
38、34 7856H1234 8998H8000 4491H 1468 BD5DH3.比较指令比较指令CMP(compare)CMP dest,src;做减法运算:做减法运算:destsrc;CMP指令将目的操作数减去源操作数,但差值指令将目的操作数减去源操作数,但差值不回送不回送目的操作数目的操作数比较指令通过减法运算影响比较指令通过减法运算影响状态标志状态标志,用于比,用于比较两个操作数的大小关系较两个操作数的大小关系cmp ax,bxcmp al,100操作数为无符号数:操作数为无符号数:若若ZF=1,OPRD1=OPRD2 若若ZF=0 若若CF=0,OPRD1OPRD2 若若CF=1,O
39、PRD1OPRD2 SF=1,OPRD1OPRD2 若若OF=1:SF=0,OPRD1OPRD2参考教材参考教材68页页4.增量和减量指令增量和减量指令INC reg/mem;增量(加增量(加1):):reg/memreg/mem1DEC reg/mem;减量(减减量(减1):):reg/memreg/mem1INC指令和指令和DEC指令是单操作数指令指令是单操作数指令与加法和减法指令实现的加与加法和减法指令实现的加1和减和减1不同的是:不同的是:INC和和DEC不影响不影响CF标志标志inc si;sisi1dec byte ptr si;sisi15.求补指令求补指令NEG(negtive
40、)NEG reg/mem;reg/mem0reg/memNEG指令对操作数执行指令对操作数执行求补运算求补运算,即用零减去,即用零减去操作数,然后结果返回操作数操作数,然后结果返回操作数求补运算也可以表达成:求补运算也可以表达成:将操作数按位取反后将操作数按位取反后加加1NEG指令对标志的影响与用零作减法的指令对标志的影响与用零作减法的SUB指指令一样令一样NEG指令也是一个单操作数指令指令也是一个单操作数指令0 xxxxxxxxB=(11111111B+1)xxxxxxxxB1 1 1 1 1 1 1 1x x x x x x x xx x x x x x x x1结论:结论:0X=X+1例
41、例 求补运算求补运算mov ax,0ff64hneg al;AL064H9CH,AXFF9CH;OF0 SF1,ZF0,PF1,CF1sub al,9dh;AL9CH9DHFFH,AXFFFFH;OF0,SF1,ZF0,PF1,CF1neg ax;AX0FFFFH0001H;OF0,SF0,ZF0,PF0,CF1dec al;AL01H10,AX0000H;OF0,SF0,ZF1,PF1,CF1neg ax;AX000;OF0,SF0,ZF1,PF1,CF0求补指令小结求补指令小结NEG指令对指令对CF和和OF的影响:的影响:对对0求补,求补,CF=0,其它情况,其它情况CF=1 字长字长8位
42、,对位,对-128求补,求补,OF=1,其它,其它OF=0 字长字长16位,对位,对-32768求补,求补,OF=1,其它,其它OF=0对负数的补码求补:得到该负数的绝对值对负数的补码求补:得到该负数的绝对值对正数求补,得到负数的补码对正数求补,得到负数的补码6.十进制调整指令十进制调整指令 十进制数调整指令对二进制运算的结果进行十十进制数调整指令对二进制运算的结果进行十进制调整,以得到十进制的运算结果,以此实进制调整,以得到十进制的运算结果,以此实现十进制现十进制BCDBCD码运算码运算80888088指令系统支持两种指令系统支持两种BCDBCD码调整运算码调整运算q压缩压缩BCD码码就是通
43、常的就是通常的8421码;它用码;它用4个二进制位个二进制位表示一个十进制位,一个字节可以表示两个十进制表示一个十进制位,一个字节可以表示两个十进制位,即位,即0099q非压缩非压缩BCD码码用用8个二进制位表示一个十进制位,个二进制位表示一个十进制位,只用低只用低4个二进制位表示一个十进制位个二进制位表示一个十进制位09,高,高4位任意,通常默认为位任意,通常默认为0编码的比较编码的比较真值(十进制)真值(十进制)864二进制编码二进制编码08H 40H压缩压缩BCD码码08H 64H非压缩非压缩BCD码码 08H 0604HASCII码码38H 3634H压缩压缩BCD码加减法调整指令码加
44、减法调整指令DAA DAS非压缩非压缩BCD码加减乘除法调整指令码加减乘除法调整指令AAA AAS AAM AAD09的的ASCII码码也可以看成非也可以看成非压缩的压缩的BCD码码.压缩压缩BCD码加减法调整指令码加减法调整指令DAA:加法调整指令:加法调整指令规则规则:结果大于:结果大于9 或或 AF 或或CF 等于等于1时,需要做加时,需要做加6调调整。(分别判断整。(分别判断AL中的高中的高4位和低位和低4位)位)原因原因:1,强迫进位,强迫进位 2,补充进位多带走的,补充进位多带走的6注意注意:1,紧跟,紧跟ADD,ADC指令后使用指令后使用 2,调整对象只能是,调整对象只能是AL寄
45、存器(只能使用寄存器(只能使用AL寄寄存器为目的的存器为目的的8位寄存器)位寄存器)3,影响影响AF、CF、PF、SF、ZF,对,对OF无定义无定义DAS:减法调整指令:减法调整指令 规则:规则:1、够减时不需要调整、够减时不需要调整 2、AF或或CF为为1时,需要做减时,需要做减6调整,抵消多借调整,抵消多借的的6注意:注意:1,紧跟,紧跟SUB或或SBB后使用后使用 2,调整对象只能是,调整对象只能是AL寄存器(只能使用寄存器(只能使用AL寄寄存器为目的的存器为目的的8位寄存器)位寄存器)3,影响,影响AF、CF、PF、SF、ZF 对对OF无定义无定义.非压缩非压缩BCD码加减乘除法调整指
46、令码加减乘除法调整指令AAA AAS AAM AADAAA:加法调整加法调整规则:规则:1,若,若AL的低的低4位位9,且,且AF=0,则,则无需调整无需调整 将将AL高高4位置位置0,置,置CF=AF=0,结束。,结束。2,若,若AL的低的低4位位9,或,或AF=1,则,则AL+6 AL,同时同时AL的高的高4位清零,位清零,AH+1 AH(将进位记到高(将进位记到高位)位),置置CF=AF=1,结束。,结束。注意:注意:在在ADD后使用,影响后使用,影响AF、CF。对其余标志无定。对其余标志无定义。义。例:设例:设AH=06H,AL=08H,BL=09HADD AL,BL;AH=06H,A
47、L=11H,AF=1 CF=0AAA ;AH=07H,AL=07H,AF=1,CF=1 AAS:减法调整。减法调整。规则:规则:1,若,若AL的低的低4位位9,且,且AF=0,则无需调整,则无需调整 将将AL高高4位置位置0,置,置CF=AF=0,结束。,结束。2,若,若AF=1,则,则AL6 AL,同时同时AL的高的高4位清零,位清零,AH1 AH(从高位借位)(从高位借位),置置CF=AF=1,结束。,结束。注意注意:在在SUB后使用,影响后使用,影响AF、CF,对其余标志,对其余标志无定义无定义。例:例:设设AX=0608H,BL=09HSUB AL,BL;AH=06H,AL=0FFH,
48、AF=1,;CF=1AAS ;AH=05H,AL=09H,AF=1,CF=1即:即:0608H09H 等价于等价于68D9D=59D3.3.2.2 乘法和除法指令乘法和除法指令乘法指令分乘法指令分无符号无符号和和有符号有符号乘法指令乘法指令MUL reg/mem;无符号乘法无符号乘法IMUL reg/mem;有符号乘法有符号乘法除法指令分除法指令分无符号无符号和和有符号有符号除法指令除法指令DIV reg/mem;无符号除法无符号除法IDIV reg/mem;有符号有符号除除法法无符号数乘法指令无符号数乘法指令MULMUL r8/m8;ALr8/m8AX 字节乘字节乘MUL r16/m16;A
49、Xr16/m16DXAX 字乘字乘注意:注意:1,指令指定的是乘数,被乘数是隐含,指令指定的是乘数,被乘数是隐含的,若乘数类型为字节,则被乘数为的,若乘数类型为字节,则被乘数为AL,16位乘积用位乘积用AX,若乘数类型为字,则被乘数为,若乘数类型为字,则被乘数为AX,32位乘积用位乘积用DX,AX。2,影响,影响CF,OF标志:如果乘积的高一半为标志:如果乘积的高一半为0,则,则CF=OF=0,否则,否则CF=OF=1。对其它标志。对其它标志无定义无定义。例题:无符号数例题:无符号数0B4H与与11H相乘相乘 MOV AL,0B4H;180D MOV BL,11H ;17D MUL BL ;A
50、X=3060D,CF=OF=1用以下指令是否可以?用以下指令是否可以?MOV AL,0B4H;设置被乘数;设置被乘数 MUL 11H ;指定立即数作乘数;指定立即数作乘数其他指令:其他指令:MUL BX ;AXBXDX,AX MUL BX+SI;乘数为存储器操作数;乘数为存储器操作数 MUL BYTE PTR BX+SI有符号数乘法指令有符号数乘法指令IMULIMUL r8/m8;ALr8/m8AX 字节乘字节乘IMUL r16/m16;AXr16/m16DXAX 字乘字乘注意:注意:1,指令的用法与,指令的用法与MUL基本相同,只是专用于基本相同,只是专用于有符号数的相乘。有符号数的相乘。2