机电-第3章8086指令系统_第1页
机电-第3章8086指令系统_第2页
机电-第3章8086指令系统_第3页
机电-第3章8086指令系统_第4页
机电-第3章8086指令系统_第5页
已阅读5页,还剩94页未读 继续免费阅读

下载本文档

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

文档简介

1、第三章 8086指令系统 本章主要内容:1. 指令与指令系统2. 8086指令系统的基本寻址方式3. 8086/8088指令系统 指令指令是计算机执行某种操作的命令。是计算机执行某种操作的命令。 指令系统指令系统是该计算机所有指令的集合,它是该计算机所有指令的集合,它是综合反映计算机性能的重要因素,不仅是综合反映计算机性能的重要因素,不仅直接影响机器的硬件结构,还影响机器的直接影响机器的硬件结构,还影响机器的系统软件及机器的适用范围。系统软件及机器的适用范围。 一般,计算机的一般,计算机的CPU不同,其使用的指令不同,其使用的指令系统就不同。系统就不同。80868086指令系统的特点指令系统的

2、特点 指令格式指令格式操作码操作码操作数操作数 操作码指示计算机执行具体的操作; 操作数用来指出操作码所需操作数的来源和操作结果的去向,即给出操作数或操作数的地址,并指出操作结果存放地址。第二节 8086的寻址方式 包括:操作数的寻址方式和指令的寻址方式。包括:操作数的寻址方式和指令的寻址方式。 指令通常顺序存放,因此,指令寻址只要通过对指令通常顺序存放,因此,指令寻址只要通过对指令指针指令指针IP内容自动加内容自动加1,便可形成下一条指令地,便可形成下一条指令地址。址。 当遇到转移或调用指令时,按照转移目标修改当遇到转移或调用指令时,按照转移目标修改IP或或CS,因此,指令的寻址主要是转移指

3、令和调用,因此,指令的寻址主要是转移指令和调用指令的转移目的地址的形成方式,这里先讨论操指令的转移目的地址的形成方式,这里先讨论操作数的寻址方式作数的寻址方式操作数是指令的操作对象。操作数是指令的操作对象。8086/80888086/8088指令系统中的指令系统中的操作数存在形式有操作数存在形式有4 4种:种:l 立即数操作数:出现在指令代码内部的常数。立即数操作数:出现在指令代码内部的常数。l 寄存器操作数:指令中给出寄存器的符号,操作数在寄存器寄存器操作数:指令中给出寄存器的符号,操作数在寄存器中。中。 l 存储器操作数:指令中给出存储器的地址形式,操作数在存存储器操作数:指令中给出存储器

4、的地址形式,操作数在存储器中。储器中。l I/O I/O操作数:指令中要操作的数来自或送到操作数:指令中要操作的数来自或送到I/OI/O端口。端口。8086的操作数寻址方式 1、隐含寻址、隐含寻址 指令中不指明操作数,但隐含在操作码中。如:指令中不指明操作数,但隐含在操作码中。如:乘法,其指令开工是单操作数指令乘法,其指令开工是单操作数指令(MUL src),只指示了源操作数只指示了源操作数src;另一操作数隐含为;另一操作数隐含为AL或或AX。同样其乘积的存放地址也是隐含为。同样其乘积的存放地址也是隐含为AX或或AX、DX。进栈、出栈指令进栈、出栈指令(PUSH src,POP dst),另

5、一个,另一个操作数地址也是固定的即椎栈栈顶。隐含寻址的操作数地址也是固定的即椎栈栈顶。隐含寻址的指令,不需要计算有效地址指令,不需要计算有效地址EA,执行速度快,而,执行速度快,而且大多为单字节指令,特别适合在微机中使用且大多为单字节指令,特别适合在微机中使用。 2、立即数寻址、立即数寻址(Immediate Addressing) 这种寻址方式不需要根据地址寻找操作数,其执这种寻址方式不需要根据地址寻找操作数,其执行速度快,但由于操作数是指令的一部分,不能行速度快,但由于操作数是指令的一部分,不能修改,因此立即寻址方式只适用于提供常数,设修改,因此立即寻址方式只适用于提供常数,设定初始值。定

6、初始值。 使用立即寻址的指令主要用来给寄存器赋初值使用立即寻址的指令主要用来给寄存器赋初值 MOV AL,5;指令执行后;指令执行后AL=05H,8位数据位数据05H存入存入AL寄存器寄存器 MOV AX,3064H;指令执行后;指令执行后AX=3064H,16位数据位数据3064H存入存入AX寄存器寄存器 3、寄存器(直接)寻址、寄存器(直接)寻址(Register Addressing) 操作数包含在操作数包含在CPU内的某个寄存器中,指令中直接给出内的某个寄存器中,指令中直接给出该寄存器名。该寄存器名。 操作数对应的寄存器:操作数对应的寄存器:16位:位:AX、BX、CX、DX、SI、D

7、I、SP和和BP;8位:位:AL、BL、CL、DL、AH、BH、CH、DH。若操作数在存储器中,这时指令中给出的是若操作数在存储器中,这时指令中给出的是操作数所在单元的有效地址操作数所在单元的有效地址EA(偏移地址偏移地址)或或产生产生EA的计算方式。这类指令的执行过程的计算方式。这类指令的执行过程如下如下: 由执行部件由执行部件EU计算计算EA再由总线接口部件再由总线接口部件BIU根据:根据:PA=(操作数所在段的段首址操作数所在段的段首址16)+EA,计算出物理地址,计算出物理地址再执行总线再执行总线周期,按物理地址访问存储器取出操作数送周期,按物理地址访问存储器取出操作数送给给EU由由E

8、U执行指令。执行指令。 由于存储器组织是分段方式,对存储器的操作数由于存储器组织是分段方式,对存储器的操作数寻址,只能在一段内的寻址,只能在一段内的64KB内寻址。内寻址。 操作数在什么段中,规定当前段寄存器为默认段操作数在什么段中,规定当前段寄存器为默认段寄存器。寄存器。 如果指令中某些操作数在其他段中,就应在该操如果指令中某些操作数在其他段中,就应在该操作数地址前使用段超越前缀指出段寄存器名。作数地址前使用段超越前缀指出段寄存器名。 8086/8088中默认段寄存器中默认段寄存器 允许超越的段寄存器如允许超越的段寄存器如下表示:下表示:存储器操作类型存储器操作类型默认段寄存器默认段寄存器允

9、许超越的段寄存器允许超越的段寄存器偏移地址偏移地址取指令取指令CS无无IP堆栈操作堆栈操作SS无无SP通用数据读写通用数据读写DSCS、ES、SSEABP基址寻址基址寻址SSCS、ES、DSEA源数据串源数据串DSCS、ES、SSSI目的数据串目的数据串ES无无DI 4、直接寻址、直接寻址(Direct Addressing) 操作数放在存储器中,操作数放在存储器中,16位位EA由指令直接给由指令直接给出,如果指令中没有段超越前缀指明操作数在出,如果指令中没有段超越前缀指明操作数在哪个段,则默认为操作数在数据段。哪个段,则默认为操作数在数据段。 物理地址:物理地址:EADSPA16 32 注意

10、: 1)直接寻址方式中,如果指令中的有效地址是一个直接寻址方式中,如果指令中的有效地址是一个16位数,为了不与立即数寻址相混淆,书写时,位数,为了不与立即数寻址相混淆,书写时,EA用方括号用方括号EA标识。如果有效地址是个符号地标识。如果有效地址是个符号地址,如址,如MOV AX,DATA则不用则不用 。 2)如操作数不在数据段而在其他段如操作数不在数据段而在其他段(堆栈段或附加堆栈段或附加段段),则用段超越前缀标识,如:,则用段超越前缀标识,如:MOV AX,ES:2100H,该指令表明操作数在附加段,则,该指令表明操作数在附加段,则PA=(ES16)+2100H寄存器中给出操作数的寄存器中

11、给出操作数的EA)()()(16DISIBXDSPA 50 BPSSPA16 B0 6、寄存器相对寻址寄存器相对寻址 间址寄存器仍可为间址寄存器仍可为BX、BP、SI和和DI。与寄。与寄存器间接寻址类似。存器间接寻址类似。 例:设(SS)=3000H,(BP)=8000HMOV AX,0100H BP则src的PA(SS)16 +(BP)+D=(3000H)16+8000H+0100H=38100H位位移量16/8)()()(16)(DISIBXDSPA 7、基址变址寻址基址变址寻址 src的的EA由指令中指定的一个基址寄存器由指令中指定的一个基址寄存器(BX或或BP)的内容和一个变址寄存器的

12、内容和一个变址寄存器(SI或或DI)内容之和组成,即内容之和组成,即 根据基址寄存器是根据基址寄存器是BX还是还是BP,确定操作数,确定操作数是在数据段是在数据段(DS)还是在堆栈段还是在堆栈段(SS)。)()()()(DISIBPBXEA 如如:MOV AX,BX DI或写成或写成MOV AX,BX+DI设设(DS)=2000H,(BX)=0256H,(DI)=6694H,则,则PA=(DS)16+(BX)+(DI)=268EAH 指令执行后,将把指令执行后,将把268EAH和和268EBH两单元的内两单元的内容送到容送到AX中,即中,即(AH)=3BH,(AL)=20H 由于基址寄存器和变

13、址寄存器的内容都是可以修改,由于基址寄存器和变址寄存器的内容都是可以修改,因此,在处理二维数组和表格时用这种寻址方式较因此,在处理二维数组和表格时用这种寻址方式较为方便。为方便。EA=(BX)(BP)+8 8位偏移量位偏移量1616位偏移量位偏移量(SI)(DI)+ 30 8.8.相对基址变址寻址相对基址变址寻址第三节 8086/8088指令系统一、数据传送类指令一、数据传送类指令 8086/8088有有14种数据传送类指令,可以实现种数据传送类指令,可以实现CPU的内部寄存器之间、的内部寄存器之间、CPU与存储器之间、与存储器之间、CPU和和I/O端口之间的数据传送。端口之间的数据传送。 分

14、为四类:分为四类: 通用数据传送指令通用数据传送指令 地址传送指令地址传送指令 状态标志传送指令状态标志传送指令1.通用数据传送指令通用数据传送指令 可以实现寄存器之间,寄存器和存储器之间的字或字可以实现寄存器之间,寄存器和存储器之间的字或字节的复制。节的复制。 格式:格式:MOV dst,src 功能:将源操作数功能:将源操作数src传送到目的操作数传送到目的操作数dst中。中。 例:例:MOV AL,35H;将立即数将立即数35H复制到复制到AL中中 该指令中该指令中src可为可为8/16位通用寄存器、段寄存器、存储位通用寄存器、段寄存器、存储器中的字或字节,也可是立即数。器中的字或字节,

15、也可是立即数。dst不允许为立即数,不允许为立即数,其他同源操作数。其他同源操作数。1)基本传送指令)基本传送指令MOVMOV的的6种具体格式种具体格式 通用寄存器间传送通用寄存器间传送 MOVAL,BL;ALBL MOVAX,CX;AXCX 通用寄存器和段寄存器间传送通用寄存器和段寄存器间传送 MOVDS,AX; DSAX MOVAX,ES; AXES 通用寄存器和存储单元间传送通用寄存器和存储单元间传送 MOVAL,BX;AL (BX) MOV1400H,BX; (1400H)BX 段寄存器和存储单元之间的传送段寄存器和存储单元之间的传送 MOVDS,3000H ;将;将3000H和和30

16、01H两字节单元的两字节单元的内容送到内容送到DS MOVBX+SI,CS ;CS的内容送到的内容送到BX+SI和和BX+SI+1所指的两个字节存储单元所指的两个字节存储单元 立即数送到通用寄存器立即数送到通用寄存器 MOVAX,2F5AH ;立即数;立即数2F5AH送到送到AX 立即数送到存储单元立即数送到存储单元 MOVWORDPRTDX,0800H;立即数;立即数0800H送到送到DX所指的字节存储单元所指的字节存储单元MOV指令注意事项:指令注意事项: 1)MOV指令是双操作数指令,源和目的操作数的类指令是双操作数指令,源和目的操作数的类型必须一致,即或都为字,或都为字节。型必须一致,

17、即或都为字,或都为字节。 MOV AX,BL MOV AL,1000H 2)MOV指令中源和目的操作数不能同为存储器操作指令中源和目的操作数不能同为存储器操作数,即不允许在两个存储单元间直接传送,如需要需数,即不允许在两个存储单元间直接传送,如需要需通过通用寄存器或存储单元通过通用寄存器或存储单元 MOVAL,DIMOVBX,AL 3)不能用不能用CS作目的操作数,即作目的操作数,即CS寄存器的内容不寄存器的内容不得随意改变,得随意改变,CS和和IP的值一般只能在转移指令时的值一般只能在转移指令时改变改变 4)不在段寄存器间直接传送数据不在段寄存器间直接传送数据 5)不允许用立即数作目的操作数

18、不允许用立即数作目的操作数dst 6)不允许直接向段寄存器传送立即数,如果需要,不允许直接向段寄存器传送立即数,如果需要,则应通过通用寄存器或存储单元传送。则应通过通用寄存器或存储单元传送。2) 堆栈操作指令堆栈操作指令PUSH,POP 堆栈是用来保存数据和地址的一个存储区,位堆栈是用来保存数据和地址的一个存储区,位于堆栈段中。堆栈在存储区的位置由堆栈段寄于堆栈段中。堆栈在存储区的位置由堆栈段寄存器存器SS和堆栈指针和堆栈指针SP来规定,来规定,SS给出当前堆栈给出当前堆栈的段基址。的段基址。 堆栈只有一个出入口,用堆栈只有一个出入口,用SP指示,指示,SP任何时候任何时候都指向当前堆栈的栈顶

19、,而且堆栈操作总是字都指向当前堆栈的栈顶,而且堆栈操作总是字操作。操作。 在调用子程序或进行中断处理时,需要保存返回地址在调用子程序或进行中断处理时,需要保存返回地址以及数据以及数据(此过程称为保护现场此过程称为保护现场);子程序返回或中断;子程序返回或中断处理完毕返回时,必须恢复中断前的现场并回到原来处理完毕返回时,必须恢复中断前的现场并回到原来主程序,这些功能要通过堆栈来实现。保护现场由入主程序,这些功能要通过堆栈来实现。保护现场由入栈指令栈指令PUSH,恢复现场由出栈指令,恢复现场由出栈指令POP完成。完成。 1)PUSH 格式:格式:PUSHsrc 功能:将功能:将src压入堆栈,压入

20、堆栈,src可为可为16位的通用寄存器、段位的通用寄存器、段寄存器或存储单元。寄存器或存储单元。 例:例:PUSH AXPUSH DS 指令执行过程:指令执行过程: (SP)(SP)-2 为什么为什么“-”且且“2”? (SP)=src的低的低8位位(SP)+1)=src的高的高8位位 例例: (AX)=2207HPUSH AX如右图示。如右图示。指令执行前堆栈段(SP)(AX)=2207H指令执行后堆栈段(SP)入栈方向0722低地址低地址PUSHAX指令操作过程示意图 2)POP 格式:格式:POP dst 功能:将当前功能:将当前SP所指的栈顶部的一个字数据弹所指的栈顶部的一个字数据弹出

21、送到出送到dst所指的所指的16位的通用寄存器、段寄存器位的通用寄存器、段寄存器(CS除外除外)或字存储单元。或字存储单元。 例:例:POP AXPOP DS 指令执行过程与指令执行过程与PUSH相反。相反。使用堆栈指令时注意:使用堆栈指令时注意: 1)src和和dst可以为可以为16位通用寄存器、段寄存器或存储单元位通用寄存器、段寄存器或存储单元中的中的16位字数据,但不能为立即数,位字数据,但不能为立即数,CS不能为不能为dst,但可,但可以为以为src。 2)每次执行每次执行PUSH时,时,SP自动减自动减2,使,使SP向低址方向移动,向低址方向移动,再将再将src压栈,且高字节先入栈;

22、执行压栈,且高字节先入栈;执行POP时,时,SP自动加自动加2,使使SP向高地址方向移动。向高地址方向移动。 3)使用堆栈操作保存多个寄存器内容或恢复时,要按使用堆栈操作保存多个寄存器内容或恢复时,要按“先先进后出进后出”的原则组织。的原则组织。交换可在通用寄存器之间、通用寄存器和存储器之交换可在通用寄存器之间、通用寄存器和存储器之间进行。段寄存器不能作为本指令的操作数,而且两间进行。段寄存器不能作为本指令的操作数,而且两个存储单元之间不能直接交换数据。个存储单元之间不能直接交换数据。XLAT举例举例 已知十进制已知十进制09的七段的七段LED显示码分别为显示码分别为40H、79H、24H、3

23、0H、19H、12H、02H、78H、00H、18H。试用。试用XLAT指令求数字指令求数字6的七段显示码的七段显示码 程序代码如下:程序代码如下: TABLEDB40H,79H,24H,30H,19H DB12H,02H,78H,00H,18H MOVAL,6 MOVBX,OFFSETTABLE XLATTABLE;查表得查表得(AL)=02H2.输入输出指令1. 输入指令IN Acc,Port或IN Acc,DX 输入指令是把一个字节或一个字由输入端口传送至AL(8位Acc)或AX(16位Acc)。端口地址若是由指令中的Port所规定,则只可寻址0255。端口地址若用寄存器DX间接寻址,则

24、允许寻址64K个输入端口。2. 输出指令OUT Port,Acc或OUT DX,Acc 输出指令是把在AL中的一个字节或在AX中的一个字,传送至输出端口。端口寻址方式与IN指令相同。 输入输出指令传送字节还是字,取决于端口的宽度。PC XT机端口宽度只有8位,只能传送字节。3. 地址传送指令地址传送指令用于传送地址码,将操作数的段基址或用于传送地址码,将操作数的段基址或EA传传送到指定的寄存器中。送到指定的寄存器中。1) 取有效地址指令取有效地址指令LEA(Load Effective Address:有效地址送寄存器:有效地址送寄存器)l格式:格式:LEA dst,srcl功能:将功能:将s

25、rc的有效地址的有效地址EA送到送到dst所指寄存器所指寄存器lsrc必须是在存储单元地址,必须是在存储单元地址,dst必须是必须是16位通用寄位通用寄存器。注:存器。注:该指令传送地址,而不是数据该指令传送地址,而不是数据。 例:设例:设(DS)=1000H,(SI)=3000H, (14000H)=7788HLEA BX,SI+1000H ;执行后执行后(BX)=4000HMOV BX, SI+1000H;执行后执行后(BX)=7788HLEA AX,TABLEMOV AX,OFFSET TABLE 2) 将双字地址指针送将双字地址指针送DS和一个寄存器指令和一个寄存器指令LDS (Loa

26、d DS with pointer:指针送寄存器和指针送寄存器和DS) 格式:格式:LDS dst,src 功能:把功能:把src指定的指定的4个存储单元中存放的个存储单元中存放的32位地址指针位地址指针(一个一个16位的段基址和一个位的段基址和一个16位的偏移地址位的偏移地址)传送到两个传送到两个16位的寄存器,其中两个低位字节的内容位的寄存器,其中两个低位字节的内容(偏移地址偏移地址)送送dst指示的寄存器中,后两个高位字节单元中的内容指示的寄存器中,后两个高位字节单元中的内容(段段基址基址)送入送入DS。 例:设例:设(DS)=3200H,(33550H)=3A78H,(33552H)=

27、1998H LDSSI,1550Hsrc指定的指定的PA=(DS)16+1550=33550H,所以执行指令后所以执行指令后(SI)=3A78H,(DS)=1998H 3) 将双字地址指针送到将双字地址指针送到ES和一个寄存器的和一个寄存器的指令指令LES(Load ES with pointer:指针送:指针送寄存器和寄存器和ES) 格式:格式:LES dst,src 功能:与功能:与LDS基本相同,不同是将基本相同,不同是将src的后两个的后两个字节单元内容送字节单元内容送ES LES DI,3500H;执行后,将;执行后,将3500H和和3501H两单元的内容送两单元的内容送DI,350

28、2H,3503H的内的内容送容送ES4. 状态标志位传送指令状态标志位传送指令 1) 标志寄存器标志寄存器(FR)低低8位送位送AH指令指令LAHF(Load AH with Flags) 格式:格式:LAHF 功能功能: (AH)(PSW低字节低字节) 2、AH送送FR低低8位指令位指令SAHF(Store AH into Flags) 格式:格式:SAHF 功能:功能: (FR低字节低字节) (AH) 3、FR入栈指令入栈指令PUSHF(PUSH the Flags) 格式:格式:PUSHF 功能:功能: (SP) (SP)-2 (SP)+1, (SP)(PSW) 4、FR出栈指令出栈指令

29、POPF(POP the Flags) 格式:格式:POPF 功能:功能: (PSW) (SP)+1, (SP) (SP) (SP)+2二、算术运算指令 8086指令系统提供的算术类运算指令包括加、减、乘、除4种基本运算指令,以及十进制数运算的各种调整指令。可以完成带符号或无符号的8位/16位二进制数的算术运算,也可以完成BCD码表示的十进制数的算术运算。 对于带符号数和无符号数,加减运算过程相同,而乘除运算过程完全不同。 1.加法运算指令 1)不带进位的加法指令ADD 格式:ADD dst,src 功能: (dst)(dst)+(src) 操作数可以是字或字节 例:ADD AX,3A5FHA

30、DD AX,BX+1000HADD BX+DI,AX 2)带进位加指令ADC 格式:ADCdst,src 功能: (dst)(dst)+(src)+CF 例:ADCAX,BX; (AX) (AX) +(BX)+CFADCAX,ADDRBX;将AX的内容和物理地址为DS: (ADDR+BX)的字存储单元的内容相加,再加进位C,结果送AX 该命令为多字节数相加提供方便。 例:目的操作数存放在DX和AX寄存器中,其中DX存放高位字。源操作数存放在BX、CX中,BX存放高位字。 执行指令前: (DX)=0002H,(AX)=0F365H(BX)=0005H,(CX)=0E024H 指令序列: ADD

31、AX,CXADC DX,BX 第一条指令执行后:(AX)=0D389HSF=1,ZF=0,CF=1,OF=0 第二条指令执行后:(DX)=0008HSF=0,ZF=0,CF=0,OF=0 1D389 E024 F365 00081(CF) 0005 0002 3)增量指令INC 格式:INCdst 功能: (dst)(dst)+1 例:INC AL ;AL中的内容加1INC CX ;CX中的内容加1INC BYTE PTRBX+DI+500 ;BX+DI+500所指的存储单元的内容加12. 减法指令 1)不带进位的减法指令SUB 格式:SUBdst,src 功能: (dst)(dst)-(sr

32、c) 例:SUB AX,0200H;(AX)(AX)-0200HSUB BX,DI+100H;(BX)减去(DI+100H)字单元中的内容,结果放在BX中 2)带借位的减法指令SBB 格式:SBB dst,src 功能: (dst)(dst)-(src)-CF 例:SBBAX,2100H; (AX)(AX)-2100H-CF SBBAL,BL; (AL)(AL)-(BL)-CF 该指令主要用于多字节数相减运算。 3)减1指令(减量指令)DEC 格式:DECdst 功能: (dst)(dst)-1 4)求补指令NEG 格式:NEGdst 功能: (dst)0-(dst) 0-(dst)0FFH-

33、 (dst) +1或0FFFFH - (dst) +1 5)比较指令CMP格式:格式:CMP dstCMP dst,src src 功能:用功能:用dstdst去减去减srcsrc,并根据所得的差设置有关标志位,为随,并根据所得的差设置有关标志位,为随后的条件转移指令提供条件。后的条件转移指令提供条件。但并不保留该差值,所以,不会改变指令中的操作数。但并不保留该差值,所以,不会改变指令中的操作数。注意点:注意点:l l 影响标志寄存器影响标志寄存器AFAF、CFCF、PFPF、OFOF、ZFZF、SF SF 。l l 指令执行后,目的操作数保持原值不变。指令执行后,目的操作数保持原值不变。综合

34、举例综合举例设x,y,z均为双精度数,分别存放于X,X+2;Y,Y+2;Z,Z+2的存储单元,用汇编指令实现: w x+y+24-zw存放于W,W+2单元.MOV AX , XMOV DX , X+2ADD AX , YADC DX , Y+2ADD AX , 24ADC DX , 0SUB AX , ZSBB DX , Z+2MOV W , AXMOV W+2 , DXX+Y+24-Z结果存入W,W+23.3.乘法指令乘法指令 计算机的乘法指令分为无符号乘法指令和有符号乘法指令,计算机的乘法指令分为无符号乘法指令和有符号乘法指令,他们的唯一区别就在于:数据的最高位是作为他们的唯一区别就在于:

35、数据的最高位是作为“数值数值”参与运参与运算,还是作为算,还是作为“符号位符号位”参与运算。参与运算。 乘法指令的被乘数都是隐含操作数,乘数在指令中显式地乘法指令的被乘数都是隐含操作数,乘数在指令中显式地写出来。写出来。CPUCPU会根据乘数是会根据乘数是8 8位、还是位、还是1616位操作数,来自动选用位操作数,来自动选用被乘数:被乘数:ALAL、AXAX。1 1)无符号数乘法指令)无符号数乘法指令 MUL MUL 指令格式:指令格式:MUL srcMUL src功能:功能:AXAXALAL* *srcsrc(字节乘法)(字节乘法); ; DX DX,AXAXAXAX* *srcsrc(字乘

36、法)(字乘法) 操作数:可以是通用寄存器、存储器,不能是立即数。操作数:可以是通用寄存器、存储器,不能是立即数。注意点:注意点: 影响标志寄存器影响标志寄存器CFCF和和OFOF(AFAF、PFPF、ZFZF、SF SF 无定义)无定义)字节乘:若乘积高字节乘:若乘积高8 8位位AH0AH0,则,则CF=1CF=1,OF=1OF=1; ; 若乘积高若乘积高8 8位位AH=0AH=0,则,则CF=0CF=0,OF=0OF=0;字乘:若乘积高字乘:若乘积高1616位位DX0DX0,则,则CF=1CF=1,OF=1OF=1; ;若乘积高若乘积高1616位位DX=0DX=0,则,则CF=0CF=0,O

37、F=0OF=0;例:例:MUL BX MUL BX ;DXAXDXAXAXAX* *BX BX MUL BYTE PTR SIMUL BYTE PTR SI;AXALAXAL* *(DSDS:SISI) 2 2) )带符号数乘法指令带符号数乘法指令 IMUL IMUL 指令格式:指令格式:IMUL srcIMUL src功能:功能:AXAXALAL* *srcsrc(字节乘法)(字节乘法) DX,AXDX,AXAXAX* *srcsrc(字乘法)(字乘法)操作数:可以是通用寄存器、存储器,不能是立即数。操作数:可以是通用寄存器、存储器,不能是立即数。注意点:注意点:l l 影响标志寄存器影响标

38、志寄存器CFCF和和OFOF(AFAF、PFPF、ZFZF、SF SF 无定义)。无定义)。l l 若乘法结果若乘法结果AHAH或或DXDX包含有效值,则包含有效值,则OF=1OF=1、CF=1CF=1。l l 若乘法结果若乘法结果AHAH或或DXDX只是低半部分的符号扩展,则只是低半部分的符号扩展,则OF=0OF=0、CF=0 CF=0 。例:例:IMUL WORD PTR DI IMUL WORD PTR DI ;DX,AXDX,AXAXAX* *(DSDS:DIDI) 1)无符号除指令DIV 语句格式:DIV src 功能: 字节除法(AX)/(src) AL(商)、AH(余数) 字除法

39、(DX、AX)/(src) AX(商)、DX(余数) 【例写出实现无符号数0400H / 0B4H运算的程序段。MOVAX,0400H;(AX)=0400HMOVBL,0B4H;(BL)=0B4HDIVBL ;商(AL)=05H,余数(AH)=7CH 4 除法运算指令 2)有符号除指令IDIV 语句格式:IDIV OPS 功能:字节除法:(AX)/(OPS) AL(商)、AH(余数)字除法:(DX,AX)/(OPS) AX (商)、DX(余数)除法指令DIV和IDIV虽然对标志的影响未定义,但可产生溢出。 【例】写出实现有符号数0400H /0B4H运算的程序段。MOVAX,0400H;(AX

40、)=0400HMOVBX,0B4H;(BX)=0B4HIDIVBX ;(AL)=0F3H,(AH)=24H3 3) ) 字节转换为字指令字节转换为字指令 CBW CBW 指令格式:指令格式:CBWCBW功能:将功能:将ALAL中数的符号位扩展到整个中数的符号位扩展到整个AHAH中,既当中,既当ALAL为正数,则(为正数,则(AHAH)=0=0。否则(。否则(AHAH)=0FFH=0FFH。注意点:指令的执行不影响任何标志位。注意点:指令的执行不影响任何标志位。4 4) ) 字转换为双字指令字转换为双字指令 CWD CWD 指令格式:指令格式:CWDCWD指令功能:将指令功能:将AXAX中数的符

41、号位扩展到整个中数的符号位扩展到整个DXDX中。中。 注意点:指令的执行不影响任何标志位。注意点:指令的执行不影响任何标志位。例例3-333-33:MOV ALMOV AL,-16 -16 ;AL=90HAL=90H(-16-16) CBW CBW ;AX=0FF90HAX=0FF90H(-16-16) CWD CWD ;DXAX=0FFFFFF90HDXAX=0FFFFFF90H(-16-16) IDIV BX IDIV BX ;DXDX余数,余数,AXAX商商 1)压缩BCD码十进制数加法调整指令DAA 格式:DAA 功能:将两个压缩的BCD码十进制数相加后存入AL的结果,调整为正确的压缩

42、的BCD码。 DAA调整方法 1)如果AL寄存器的低4位大于9或标志寄存器中的A F位为1,则AL寄存器的内容加6H,并将标志寄存器中的AF位置1 2)如果AL寄存器的高4位大于9或标志寄存器中的CF位为1,则AL寄存器的内容加60H,并将标志寄存器中的CF位置15. 十进制数(BCD码)运算调整指令 例:求两个十进制数78+56的正确结果,可用以下程序段实现MOVAL,78HADDAL,56H;(AL)=CEHDAA;高、低位均为大于9,则(AL)(AL)+66H,并置AF1,CF1,则执行DAA后得CF=1 ,(AL)=34H 2)非压缩BCD码十进制数加法调整指令AAA 格式:AAA 功

43、能:在用ADD或ADC指令对两个非压缩BCD码十进制数相加之后(结果放AL中),用AAA指令对AL中的加法结果进行调整,使之成为一个正确的非压缩BCD码。 调整过程: 1)如AL寄存器低4位在09之间,且AF0,则执行3); 2)如AL寄存器的低4位在AF之间或AF1,则(AL)(AL)+6,(AH) (AH)+1,并将标志寄存器中的AF位置1; 3)清除AL的高4位; 4)AF位的值送CF位。 例:ADDAL,CLAAA 如指令执行前: (AL)=00001001,(CL)=00001000。第一条指令执行后,(AL)=00010001,因AF=1,故AAA调整时,将AL的低4位加6,即为:

44、00010111,然后高4位清零成为:00000111,且AH加1,则(AH)00000001,(AL)=00000111,得到两个非压缩十进制相加的正确结果17。 3 3)压缩型压缩型BCDBCD码十进制数减法的数调整指令:码十进制数减法的数调整指令:DAS DAS 指令格式:指令格式:DASDAS功能:对在功能:对在ALAL中两个压缩型中两个压缩型BCDBCD数相减的结果,调整成压缩型数相减的结果,调整成压缩型BCDBCD数在数在ALAL中。中。 注意点:注意点:l l 影响标志寄存器影响标志寄存器CFCF、PFPF、AFAF、ZFZF、SFSF,其中,其中CF=1CF=1说明结果大说明结果大于于9999。l l 必须紧跟在减法指令之后且只能对必须紧跟在减法指令之后且只能对ALAL中的内容进行调整。中的内容进行调整。 4 4)减法的非压缩型减法的非压缩型BCDBCD数调整指令:数调整指令: AAS AAS 指令格式:指令格式:AA

温馨提示

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

评论

0/150

提交评论