版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第4 4章章 指令系统与汇编语言程序设计指令系统与汇编语言程序设计4.1 8086 CPU4.1 8086 CPU的寻址方式的寻址方式4.2 164.2 16位微处理器指令系统位微处理器指令系统4.3 4.3 汇编语言程序设计汇编语言程序设计 4.1 8086 CPU4.1 8086 CPU的寻址方式的寻址方式4.1.1 4.1.1 指令一般格式指令一般格式1 18086 CPU8086 CPU指令的格式指令的格式 指令是用来指挥和控制计算机执行某种操作的命令。指令是用来指挥和控制计算机执行某种操作的命令。 通常指令由操作码和操作数两部分组成,操作码说明计算机要通常指令由操作码和操作数两部分
2、组成,操作码说明计算机要执行哪种操作,如数据传送、加减运算、数据的输入与输出及程执行哪种操作,如数据传送、加减运算、数据的输入与输出及程序的跳转等,操作数是指令操作的对象,有些指令需要操作数,序的跳转等,操作数是指令操作的对象,有些指令需要操作数,有些则不需要。有些则不需要。机器指令的一般组成格式:机器指令的一般组成格式:操作码 操作数8086 CPU8086 CPU指令的格式可以细分为以下几种:指令的格式可以细分为以下几种:(1 1)零地址指令)零地址指令格式:操作码格式:操作码零地址指令中不提供操作数,也不提供操作数的地址,只有零地址指令中不提供操作数,也不提供操作数的地址,只有操操作码。
3、作码。例如:例如: NOP NOP ;空操作指令;空操作指令(2 2)单地址指令)单地址指令格式:操作码格式:操作码 操作数操作数单地址指令也称为一地址指令,指令中只提供一个操作数单地址指令也称为一地址指令,指令中只提供一个操作数(或一个操作数的地址)。(或一个操作数的地址)。例如:例如: INC AH INC AH ;AH AH (AHAH)+1+1(3 3)两地址指令)两地址指令格式:操作码格式:操作码 目的操作数,源操作数目的操作数,源操作数指令中包含两个操作数,由操作码确定这两个操作数所进行的指令中包含两个操作数,由操作码确定这两个操作数所进行的操作后,结果存入目的操作数中。操作后,结
4、果存入目的操作数中。例如:例如:MOV AH,BL ;AH(BL)2 2操作数的类型操作数的类型 操作数是指令操作的对象,操作数是指令操作的对象,8086 CPU8086 CPU的操作分为数据操作数和的操作分为数据操作数和转移地址操作数两大类:转移地址操作数两大类: (1 1)数据操作数)数据操作数 立即操作数立即操作数,指令要操作的数就在本条指令中,为方便起见,用,指令要操作的数就在本条指令中,为方便起见,用immimm表示:表示:immimm,代表,代表8 8、1616位立即数。位立即数。immnimmn:n n(n n为为8 8或或1616)位立即数。)位立即数。 寄存器操作数寄存器操作
5、数,指令中要操作的数在指定的寄存器中,为方便起见,用,指令中要操作的数在指定的寄存器中,为方便起见,用regreg表示:表示:regreg:寄存器,代表:寄存器,代表8 8和和1616位位regnregn:n n(n n为为8 8或或1616)位寄存器)位寄存器 存储器操作数存储器操作数,指令中要操作的数存放在指定的存储器中,为方便起见,指令中要操作的数存放在指定的存储器中,为方便起见,用用memmem表示:表示:memmem:存储器操作数,代表:存储器操作数,代表8 8、1616位。位。memnmemn:n n(n n为为8 8或或1616)位存储器操作数。)位存储器操作数。 输入输入/ /
6、输出(输出(I/OI/O)操作数)操作数,指令中要操作的数据来自输入,指令中要操作的数据来自输入/ /输出端口。输出端口。(2 2)转移地址操作数)转移地址操作数转移地址操作数转移地址操作数来自具体的指令,且指令中转移地址只有一个,它就是指令来自具体的指令,且指令中转移地址只有一个,它就是指令的目的操作数。的目的操作数。4.1.2 8086 CPU4.1.2 8086 CPU寻址方式寻址方式1 1立即寻址立即寻址操作数位置:内存代码段。操作数位置:内存代码段。立即寻址所提供的操作数直接放在指令中,它是紧跟在指令操作立即寻址所提供的操作数直接放在指令中,它是紧跟在指令操作码后面的一个可用的码后面
7、的一个可用的8 8位或位或 1616位二进制补码表示的有符号数,位二进制补码表示的有符号数,也就是说,操作数的存放地址就是指令操作码的下一单元地址。也就是说,操作数的存放地址就是指令操作码的下一单元地址。【例【例4-14-1】 :MOV BHMOV BH,10H 10H ;将立即数;将立即数10H10H传送到传送到BHBH中中 2 2寄存器寻址寄存器寻址操作数位置:在操作数位置:在CPUCPU的某个寄存器中。的某个寄存器中。寄存器中寄存的内容就是要寻找的操作数。寄存器中寄存的内容就是要寻找的操作数。INC CX INC CX ;CXCX(CXCX)+1+1【例例4-24-2】 :表表4-1 I
8、NC reg164-1 INC reg16指令的编码指令的编码汇编指令(汇编指令(INC reg16)OP(D7 D6 D5 D4 D3)REG(编码)(编码)(D2 D1 D0)十六进制机器指十六进制机器指令令INC AX0 1 0 0 00 0 040HINC CX0 1 0 0 00 0 141HINC DX0 1 0 0 00 1 042HINC BX0 1 0 0 00 1 143HINC SP0 1 0 0 01 0 044HINC BP0 1 0 0 01 0 145HINC SI0 1 0 0 01 1 046HINC DI0 1 0 0 01 1 147H对于对于1616位增
9、位增1 1指令:指令:INC reg16INC reg16,reg16reg16代表代表8 8个个1616位寄存器,在位寄存器,在8 8位的操作码中,位的操作码中,低低3 3位位是是8 8个寄存器的个寄存器的编码编码 。3 3存储器寻址存储器寻址 微处理器访问存储器的方式可以细分为微处理器访问存储器的方式可以细分为7 7种寻址方式种寻址方式。 在在80868086、8028680286微处理器中,微处理器中,默认的段寄存器默认的段寄存器与与1616位寄存器位寄存器的固定搭配如表的固定搭配如表4-24-2所示,其中的所示,其中的位移量位移量可以是正数,也可以是可以是正数,也可以是负数。负数。表表
10、4-2 4-2 段寄存器与段寄存器与1616位偏移地址寄存器的固定搭配位偏移地址寄存器的固定搭配段寄存器段寄存器基址寄存器基址寄存器变址寄存器变址寄存器位移量位移量物理地址的用途物理地址的用途DSDSBXBXSISIDIDI8 8位、位、1616位位(带符号数)(带符号数)数据段内地址数据段内地址SSSSBPBPSISIDIDI8 8位、位、1616位位(带符号数)(带符号数)堆栈段内地址堆栈段内地址CSCSIPIP无无无无指令地址指令地址ESES无无只有串操作时只有串操作时默认默认DIDI无无附加数据段内地址附加数据段内地址(目地址)(目地址)(1 1)直接寻址)直接寻址 直接寻址指令中直接
11、给出了直接寻址指令中直接给出了1616位的偏移地址。位的偏移地址。 物理地址物理地址 = = 段寄存器段寄存器DSDS值值16+16+偏移地址。偏移地址。【例例4-44-4】: MOV BLMOV BL,3330H 3330H ;访问;访问DSDS段段物理地址物理地址 = DS= DS16+3330H16+3330H(2 2)基址寻址)基址寻址 基址寻址指令中以基址寄存器基址寻址指令中以基址寄存器BXBX或或BPBP中值为中值为1616位的偏移地址位的偏移地址访问内存。访问内存。【例【例4-54-5】 以基址寄存器作为间接寻址,将内存中的数据传送以基址寄存器作为间接寻址,将内存中的数据传送到到
12、CPUCPU的寄存器。的寄存器。 MOV ALMOV AL,BX BX ;访问;访问DSDS段段(3 3)相对基址寻址)相对基址寻址 相对基址寻址是在基址寄存器的基础上,加上一个带符号的相对基址寻址是在基址寄存器的基础上,加上一个带符号的8 8位或位或1616位的位移量。位的位移量。【例例4-64-6】: MOV ALMOV AL, BX+30H BX+30H ;访问;访问DSDS段段(4 4)变址寻址)变址寻址 以源变址寄存器以源变址寄存器SISI或目的变址寄存器或目的变址寄存器DIDI中值为中值为1616位的偏移位的偏移地址访问内存。地址访问内存。 物理地址物理地址 = = 段寄存器段寄存
13、器DSDS值值16+SI16+SI或或DIDI中的值。中的值。MOV BLMOV BL,SI SI ;访问;访问DSDS段段【例例4-74-7】:(5 5)相对变址寻址)相对变址寻址 在变址寄存器的基础上,加上一个带符号的在变址寄存器的基础上,加上一个带符号的8 8位或位或1616位的位位的位移量。移量。MOV ALMOV AL,SI-56H SI-56H ;访问;访问DSDS段段【例例4-84-8】:(6 6)基址加变址寻址)基址加变址寻址 指令中以基址寄存器中的值加上变址寄存器的值所换算的指令中以基址寄存器中的值加上变址寄存器的值所换算的结果作为偏移地址访问内存。结果作为偏移地址访问内存。
14、【例【例4-94-9】 以基址加变址作为寻址方式,将内存中的数据传送到以基址加变址作为寻址方式,将内存中的数据传送到CPUCPU的寄存器。的寄存器。MOV ALMOV AL, BX+SI BX+SI ;访问;访问DSDS段,可以写成段,可以写成MOV ALMOV AL,BXSIBXSI形式形式(7 7)相对基址加变址寻址)相对基址加变址寻址 在基址加变址寻址的基础之上,加上一个带符号的在基址加变址寻址的基础之上,加上一个带符号的8 8位或位或1616位的位移量,最后形成一个位的位移量,最后形成一个1616位的偏移地址。位的偏移地址。【例例4-104-10】: MOV ALMOV AL,BX+D
15、I+90H BX+DI+90H ;访问;访问DSDS段,可以写成段,可以写成MOV ALMOV AL,BXDI+90HBXDI+90H形式形式4.2 164.2 16位微处理器指令系统位微处理器指令系统1616位微处理器共计有位微处理器共计有133133种基本指令;种基本指令;使用不同的寻址方式,并结合数据类型(字节、字)的组使用不同的寻址方式,并结合数据类型(字节、字)的组合,可以构成近合,可以构成近10001000种操作指令;种操作指令;指令系统可以分为七大类。指令系统可以分为七大类。 为了方便介绍指令,对几个符号的规定说明如下:为了方便介绍指令,对几个符号的规定说明如下:OPSOPS:源
16、操作数,代表:源操作数,代表8 8位和位和1616位二进制数据;位二进制数据;OPSnOPSn:n n(n n为为8 8或或1616)位源操作数;)位源操作数;OPDOPD:目的操作数,代表:目的操作数,代表8 8和和1616位二进制数据;位二进制数据;OPDnOPDn:n n(n n为为8 8或或1616)位目操作数;)位目操作数;segseg:段寄存器;:段寄存器;(regreg):表示寄存器中寄存的数值。):表示寄存器中寄存的数值。4.2.1 4.2.1 数据传送指令数据传送指令数据传送指令是将数据、地址或立即数传送到寄存器或存储器中,数据传送指令是将数据、地址或立即数传送到寄存器或存储
17、器中,可以分为一般可以分为一般数据传送指令数据传送指令、堆栈操作指令堆栈操作指令、地址传送指令地址传送指令和和输入输入/ /输出指令输出指令。 1 1一般数据传送指令一般数据传送指令(1 1)传送指令)传送指令指令格式:指令格式:MOV OPDMOV OPD,OPSOPS将源操作数传送到目的地址中,即(将源操作数传送到目的地址中,即(OPDOPD)(OPSOPS)。)。MOVMOV有如下五种具体形式:有如下五种具体形式: MOV reg MOV reg,regreg;两个寄存器之间的数据传送,如;两个寄存器之间的数据传送,如MOV ALMOV AL,BHBH MOV reg MOV reg,m
18、emmem;内存单元数据传送给寄存器,读内存,如;内存单元数据传送给寄存器,读内存,如MOV BXMOV BX,SISI MOV mem MOV mem,regreg;寄存器的数据传送给内存单元,写内存,如;寄存器的数据传送给内存单元,写内存,如MOV DIMOV DI,AXAX MOV reg MOV reg,immimm;立即数传送给寄存器,如;立即数传送给寄存器,如MOV BXMOV BX,9678H9678H MOV mem MOV mem,immimm;立即数传送给内存单元,如;立即数传送给内存单元,如MOV WORD PTR SIMOV WORD PTR SI,1122H1122H
19、用于段寄存器的传送指令有三种形式:用于段寄存器的传送指令有三种形式: MOV seg MOV seg,regreg;寄存器数据传送给数据段寄存器,如;寄存器数据传送给数据段寄存器,如MOV DSMOV DS,AXAX MOV reg MOV reg,segseg;段寄存器数据传送给寄存器,如;段寄存器数据传送给寄存器,如MOV AXMOV AX,DSDS MOV mem MOV mem,segseg;段寄存器数据传送给内存单元,如;段寄存器数据传送给内存单元,如MOV DIMOV DI,DSDS(2 2)数据交换指令)数据交换指令指令格式:指令格式:XCHG OPDXCHG OPD,OPSOP
20、S将将8 8位源操作数与位源操作数与8 8位目的操作数的内容互换,或将位目的操作数的内容互换,或将1616位源操作数位源操作数与与1616位目的操作数的内容互换,即(位目的操作数的内容互换,即(OPSOPS)(OPDOPD)。)。XCHG regXCHG reg,regregXCHG regXCHG reg,memmemXCHG memXCHG mem,regreg(3 3)查表转换指令)查表转换指令指令格式:指令格式:XLATXLATDS:BX+ALALDS:BX+ALAL,在,在DSDS段内,将(段内,将(BXBX)为首地址、()为首地址、(ALAL)为偏移)为偏移量的字节存储单元中的内容
21、读出,并存入量的字节存储单元中的内容读出,并存入ALAL中中 (4 4)标志寄存器装入指令和标志寄存器保存指令)标志寄存器装入指令和标志寄存器保存指令指令格式:指令格式:LAHFLAHF将标志寄存器低将标志寄存器低8 8位送位送AHAH。指令格式:指令格式:SAHFSAHF 2 2堆栈操作指令堆栈操作指令 堆栈是在内存堆栈是在内存RAMRAM中开辟的一段特殊的存储空间。它的主要中开辟的一段特殊的存储空间。它的主要功能包括:功能包括: 用来暂时存放程序的(用来暂时存放程序的(断点断点)地址()地址(CSCS和和IPIP的值)。的值)。 用以临时存放用以临时存放CPUCPU寄存器和存储器中暂时不用
22、的数据。寄存器和存储器中暂时不用的数据。 可以作为两个程序之间传递数据的临时存放处。可以作为两个程序之间传递数据的临时存放处。 CPUCPU按照按照“先进后出先进后出”或或“后进先出后进先出”的原则存取堆栈段内的原则存取堆栈段内的数据。如果把数据压入堆栈,则堆栈指针的值是减少的,即的数据。如果把数据压入堆栈,则堆栈指针的值是减少的,即所谓的向下生成堆栈。由所谓的向下生成堆栈。由SS:SPSS:SP(1616位)指向位)指向栈底(栈空栈底(栈空)或)或栈栈顶(栈不空)顶(栈不空)地址。地址。【例【例4-134-13】:】:PUSH AX图图4-1 4-1 堆栈的入栈操作堆栈的入栈操作(1 1)数
23、据入栈指令)数据入栈指令指令格式:指令格式:PUSH OPS16PUSH OPS16将将OPSOPS中的中的1616位数据压入堆栈中,且堆栈指针位数据压入堆栈中,且堆栈指针SPSP中的值减中的值减2 2。 (2 2)数据出栈指令)数据出栈指令指令格式:指令格式:POP OPD16POP OPD16 将将SS:SPSS:SP所指定所指定的一个字弹出给的一个字弹出给某一某一1616位通用寄位通用寄存器、数据段寄存器、数据段寄存器或某一字存存器或某一字存储单元中;储单元中; OPSOPS一定是一定是1616位,位,弹出栈的数据也弹出栈的数据也是是1616位;位; POP OPD16 POP OPD1
24、6 指指令执行后,令执行后,SPSP加加2 2。 图图4-2 4-2 堆栈的出栈操作堆栈的出栈操作 【例【例4-154-15】 利用利用PUSHPUSH和和POPPOP指令把寄存器指令把寄存器DXDX和和BXBX的值交换,编程的值交换,编程实现。实现。PUSH DXPUSH BXPOP DXPOP BX3 3地址传送指令地址传送指令(1 1)传送偏移地址指令)传送偏移地址指令指令格式:指令格式:LEA reg16LEA reg16,OPSOPSLEALEA(Load Effective AddressLoad Effective Address)指令按)指令按OPSOPS提供的寻址方式计算偏提
25、供的寻址方式计算偏移地址,并将其送入移地址,并将其送入reg16reg16中。中。 OPS OPS所提供的一定要是内存的一个偏移地址,可以是存储器的各所提供的一定要是内存的一个偏移地址,可以是存储器的各种寻址方式。例如:种寻址方式。例如:LEA BXLEA BX,SI+2SI+2 OPS OPS通常是变量名,取其偏移地址到通常是变量名,取其偏移地址到reg16reg16中。例如:中。例如: LEA SILEA SI,VARVAR 【例【例4-174-17】 如果数据段中数据的存储格式如图如果数据段中数据的存储格式如图4-34-3所示,其中,所示,其中,变量名变量名VARVAR指到指到DS:00
26、02HDS:0002H处。处。 图图4-3 4-3 数据段中数据的存储格式数据段中数据的存储格式LEA DILEA DI,VAR VAR ;DI = 0002HDI = 0002H(2 2)传送偏移地址到寄存器并传送段值到数据段)传送偏移地址到寄存器并传送段值到数据段DSDS的指令的指令指令格式:指令格式:L LDSDS OPD OPD,OPS OPS ;OPD OPD (OPSOPS),),DSDS (OPS+2OPS+2)(3 3)传送偏移地址到寄存器并传送段值到附加数据段)传送偏移地址到寄存器并传送段值到附加数据段ESES的指令的指令 指令格式:指令格式:L LESES OPD OPD,
27、OPS OPS ;OPD OPD (OPSOPS),),ES ES (OPS+2OPS+2)4 4输入输入/ /输出指令输出指令(建议在第(建议在第6 6章中讲解!)章中讲解!)数据传送指令可以划分为数据传送指令可以划分为5 5类、类、1414种指令,如表种指令,如表4-44-4所示。所示。 表表4-4 4-4 数据传送指令数据传送指令一般数据传送指令一般数据传送指令数据传送数据传送MOVMOV数据交换数据交换XCHGXCHG查表转换查表转换XLATXLAT堆栈操作指令堆栈操作指令数据入栈数据入栈PUSHPUSH数据出栈数据出栈POPPOP标志寄存器传送指令标志寄存器传送指令标志寄存器入栈标志
28、寄存器入栈PUSHFPUSHF标志寄存器出栈标志寄存器出栈POPFPOPF标志寄存器低标志寄存器低8 8位送位送AHAHLAHFLAHFAHAH送标志寄存器低送标志寄存器低8 8位位SAHFSAHF地址传送指令地址传送指令传送偏移地址传送偏移地址LEALEA送偏移地址并送段值到送偏移地址并送段值到DSDSLDSLDS送偏移地址并送段值到送偏移地址并送段值到ESESLESLES输入输入/ /输出指令输出指令输入输入ININ输出输出OUTOUT4.2.2 4.2.2 算术运算指令算术运算指令1 1加法指令加法指令(1 1)不带进位的加法指令)不带进位的加法指令指令格式:指令格式:ADD OPDAD
29、D OPD,OPS OPS ;OPDOPD(OPDOPD)+ +(OPSOPS)影响标志位:影响标志位:AFAF、OFOF、PFPF、SFSF、ZFZF、CFCF5 5种形式:种形式: ADD reg ADD reg,reg reg ADD reg ADD reg,mem mem ADD mem ADD mem,reg reg ADD reg ADD reg,imm imm ADD mem ADD mem,imm imm 【例【例4-194-19】 利用加法指令将表示利用加法指令将表示0 09 9的二进制数的二进制数0000000010011001,转换成对应的字符(转换成对应的字符(ASCI
30、IASCII),只需要加),只需要加30H30H。ADD AH,30H(2 2)带进位的加法指令)带进位的加法指令指令格式:指令格式:ADC OPDADC OPD,OPS OPS ;OPD OPD (OPDOPD)+ +(OPSOPS)+ CF+ CF影响的标志位是:影响的标志位是:AFAF、OFOF、PFPF、SFSF、ZFZF、CFCF主要用途:实现多个字节或字相加。主要用途:实现多个字节或字相加。【例【例4-204-20】 多倍精度数相加示例。多倍精度数相加示例。 试编程实现两个试编程实现两个3232位二进制数相加,即位二进制数相加,即33338888H33338888H加加222281
31、11H22228111H,运算式,运算式如下:如下:高高1616位位低低1616位位3333H3333H8888H8888H2222H2222H8111H8111H+CF = 0CF = 0CF=1CF=15556H5556H0999H0999HMOV AXMOV AX,8888H8888HADDADD AX AX,8111H8111HMOV BXMOV BX,3333H3333HADCADC BX BX,2222H2222H (3 3)加)加1 1指令指令指令格式:指令格式:INC OPD INC OPD ;OPD OPD (OPDOPD)+ 1+ 1影响的标志位是:影响的标志位是:AFAF
32、、OFOF、PFPF、SFSF、ZFZF。2 2种形式:种形式: INC reg INC reg INC mem INC mem 2 2减法指令减法指令(因为减法指令与加法指令完全类似,建议对照分析与理解)(因为减法指令与加法指令完全类似,建议对照分析与理解)(1 1)不带借位减法指令)不带借位减法指令指令格式:指令格式:SUB OPDSUB OPD,OPS OPS ;OPD OPD (OPDOPD)- -(OPSOPS)【例【例4-214-21】 利用减法指令,实现利用减法指令,实现1 1个小写字母(个小写字母(“a”a”“z”z”)到和其对应的大写字母(到和其对应的大写字母(“A”A”“Z
33、”Z”)之间的转换。将小写字)之间的转换。将小写字母的母的ASCIIASCII码减去码减去20H20H,就变成对应大写字母的,就变成对应大写字母的ASCIIASCII码。码。SUB ALSUB AL,20H20H (2 2)带借位减法指令)带借位减法指令指令格式:指令格式:SBB OPDSBB OPD,OPS OPS ;OPD(OPD)-(OPS)- CFOPD(OPD)-(OPS)- CF【例【例4-224-22】试编程使用】试编程使用1616位减法运算,实现两个位减法运算,实现两个3232位二进制数相位二进制数相减,即减,即77772222H-11116666H77772222H-1111
34、6666H。运算式如下:运算式如下:高高1616位位低低1616位位7777H7777H2222H2222H1111H1111H6666H6666H-CF = 0CF = 0CF = 1CF = 16665H6665HBBBCHBBBCHMOV AX,2222HSUB AX,6666HMOV BX,7777HSBB BX,1111H (3 3)减)减1 1指令指令指令格式:指令格式:DEC OPD DEC OPD ;OPD (OPD)-1OPD (OPD)-1(4 4)比较指令)比较指令指令格式:指令格式:CMP OPDCMP OPD,OPSOPS;(OPD)-(OPS)(OPD)-(OPS)
35、影响的标志位是:影响的标志位是:AFAF、OFOF、PFPF、SFSF、ZFZF、CFCF。 3 3乘法指令乘法指令(1 1)无符号数的乘法指令)无符号数的乘法指令指令格式:指令格式:MUL OPS MUL OPS ;OPSOPS可以是可以是regreg和和memmem操作数操作数字节乘法:字节乘法:AX AX (ALAL)* *(OPS8OPS8) 字乘法:字乘法:DXDX:AX AX (AXAX)* *(OPS16OPS16)影响的标志位是:影响的标志位是:CFCF、OFOF,不影响,不影响AFAF、PFPF、SFSF、ZFZF。 (2 2)带符号数乘法指令)带符号数乘法指令指令格式:指令
36、格式:IMUL OPS IMUL OPS ;OPSOPS可以是可以是regreg和和memmem操作数操作数 两个补码相乘,结果也是补码,其结果代表的真值应该是两个补码所代两个补码相乘,结果也是补码,其结果代表的真值应该是两个补码所代表真值的乘积。表真值的乘积。【例【例4-244-24】 设(设(ALAL)= 02H= 02H,(,(DLDL)= 81H= 81H(-127-127的补码),的补码), 执行执行IMUL DLIMUL DL指令指令 (ALAL)* *(DLDL)AXAX 即可实现即可实现02H02H* *(-127-127)补码,并传送给)补码,并传送给AXAX (AXAX)=
37、 FF02H = = FF02H = (-254-254)补码。)补码。4 4除法指令除法指令(1 1)无符号数的除法指令)无符号数的除法指令指令格式:指令格式:DIV OPS DIV OPS 字节除法:字节除法: (AXAX)/ /(OPS8OPS8) ;商;商ALAL,余数,余数AHAH字除法:字除法:DXDX:AXAX)/ /(OPS16OPS16) ;商;商AXAX,余数,余数DX DX (2 2)带符号数的除法指令)带符号数的除法指令 指令格式:指令格式:IDIV OPSIDIV OPS IDIV IDIV指令与指令与DIVDIV指令类似,不同点:相除后所得商的符号与指令类似,不同点
38、:相除后所得商的符号与数学上规定相同,余数与被除数符号位同号。数学上规定相同,余数与被除数符号位同号。表表4-5 4-5 算术运算指令算术运算指令加法指令加法指令不带进位加法不带进位加法ADDADD带进位加法带进位加法ADCADC加加1 1INCINC减法指令减法指令不带借位减法不带借位减法SUBSUB带借位减法带借位减法SBBSBB减减1 1DECDEC比较比较CMPCMP乘法指令乘法指令无符号数乘法无符号数乘法MULMUL带符号数乘法带符号数乘法IMULIMUL除法指令除法指令无符号数除法无符号数除法DIVDIV带符号数除法带符号数除法IDIVIDIV4.2.3 4.2.3 逻辑运算指令逻
39、辑运算指令1.1.求补指令求补指令指令格式:指令格式:NEG OPDNEG OPD将将OPDOPD中的内容逐位取反,且末位加中的内容逐位取反,且末位加1 1后送入后送入OPDOPD中。中。 2 2求反指令(逻辑非)求反指令(逻辑非)指令格式:指令格式:NOT OPD NOT OPD ;将;将OPDOPD中的内容逐位取反后,送入中的内容逐位取反后,送入OPDOPD中。中。 3 3逻辑与指令逻辑与指令指令格式:指令格式:AND OPDAND OPD,OPS OPS ;OPSOPS(OPDOPD)()(OPSOPS)影响的标志位是:影响的标志位是:CFCF、OFOF、PFPF、SFSF、ZFZF,而
40、,而AFAF未定义。未定义。4 4逻辑测试指令逻辑测试指令指令格式:指令格式:TEST OPDTEST OPD,OPS OPS ;(OPDOPD)()(OPSOPS)影响的标志位是:影响的标志位是:CFCF、OFOF、PFPF、SFSF、ZFZF,而,而AFAF未定义。未定义。5 5逻辑或指令逻辑或指令指令格式:指令格式:OR OPDOR OPD,OPS OPS ;OPD OPD (OPDOPD)()(OPSOPS)影响的标志位是:影响的标志位是:CFCF、OFOF、PFPF、SFSF、ZFZF,而,而AFAF未定义。未定义。6 6逻辑异或指令逻辑异或指令指令格式:指令格式:XOR OPDXO
41、R OPD,OPS OPS ;OPD OPD (OPDOPD)()(OPSOPS)【例【例4-304-30】 执行执行XOR AXXOR AX,AXAX后,后,AX = 0000HAX = 0000H。4.2.4 4.2.4 移位指令移位指令1 1算术移位指令算术移位指令(1 1)算术左移指令)算术左移指令SAL OPDSAL OPD,1 1 SAL OPD SAL OPD,CLCL图图4-4 4-4 算术左移示意图算术左移示意图(2 2)算术右移指令)算术右移指令【例【例4-324-32】 将将ALAL中的二进制值乘以中的二进制值乘以4 4。MOV CLMOV CL,2 2MOV ALMOV
42、 AL,4 4 SAL AL SAL AL,CLCL SAR OPD,1 SAR OPD,CL指令两种格式:指令两种格式:图图4-5 4-5 算术右移示意图算术右移示意图2 2逻辑移位指令逻辑移位指令(1 1)逻辑左移指令)逻辑左移指令与算术左移指令(与算术左移指令(SALSAL)的功能完全相同)的功能完全相同 SHL OPDSHL OPD,1 1 SHL OPD SHL OPD,CLCL(2 2)逻辑右移指令)逻辑右移指令 SHR OPDSHR OPD,1 1 SHR OPD SHR OPD,CLCL图图4-6 4-6 逻辑右移示意图逻辑右移示意图3 3循环移位指令循环移位指令(1 1)不带
43、进位的循环左移指令)不带进位的循环左移指令ROL OPD,1 ROL OPD,CL图图4-7 4-7 不带进位的循环左移指令示意图不带进位的循环左移指令示意图(2 2)不带进位的循环右移指令)不带进位的循环右移指令ROR OPDROR OPD,1 1 ROR OPD ROR OPD,CLCL图图4-8 4-8 不带进位的循环右移指令示意图不带进位的循环右移指令示意图【例【例4-344-34】 利用利用ROLROL或或RORROR指令交换一个字的高字节和低字节。指令交换一个字的高字节和低字节。 MOV BX,1122HMOV CL,8 ROL BX,CL(3 3)带进位的循环左移指令)带进位的循
44、环左移指令RCL OPDRCL OPD,1 1 RCL OPD RCL OPD,CLCL(4 4)带进位的循环右移指令)带进位的循环右移指令RCR OPD,1 RCR OPD,CL【例【例4-354-35】 利用利用ROLROL或或RCLRCL指令,将指令,将3232位二进制数位二进制数11223344H11223344H算术算术左移一位。左移一位。 MOV AXMOV AX,3344H3344H MOV BX MOV BX,1122H1122HROL AXROL AX,1 1RCL BXRCL BX,1 1 最后,最后,BX = 2244HBX = 2244H, AX = 6688HAX =
45、 6688H,CF = 0 CF = 0 图图4-10 324-10 32位二进制数算术左移的示意图位二进制数算术左移的示意图 4.2.5 4.2.5 串操作指令串操作指令 串操作指令使用的隐含操作:串操作指令使用的隐含操作:1616位微处理器用位微处理器用SISI、DIDI指示源指示源串和目的串偏移地址串和目的串偏移地址;源串的数据一定是在数据段(;源串的数据一定是在数据段(DSDS););目目的串的数据一定是在附加数据段(的串的数据一定是在附加数据段(ESES);重复次数一定要用重复次数一定要用CXCX作计数器作计数器。表表4-7 4-7 串操作指令使用中的约定串操作指令使用中的约定源串指
46、示器源串指示器DS:SIDS:SI目的串指示器目的串指示器ES:DIES:DI重复次数计数器重复次数计数器CXCXSCASSCAS指令的搜索值指令的搜索值在在AL/AXAL/AX中中LODSLODS指令的目的操作数指令的目的操作数AL/AXAL/AXSTOSSTOS指令的源操作数指令的源操作数AL/AXAL/AX传送方向传送方向DF = 0DF = 0(用(用CLDCLD指令实现),指令实现),SISI、DIDI自动增量自动增量DF = 1DF = 1(用(用STDSTD指令实现),指令实现),SISI、DIDI自动减量自动减量SBSB字节(串)操作字节(串)操作SWSW字(串)操作字(串)操
47、作1 1串传输指令串传输指令串传输指令形式有如下串传输指令形式有如下3 3种:种: MOVSB MOVSB MOVSW MOVSW MOVS MOVS 目的串名,源串名目的串名,源串名修改地址指针:当修改地址指针:当DF = 0DF = 0时,每传送一次后,时,每传送一次后,SISI、DIDI(中存放的(中存放的地址值)自动增量(字节操作加地址值)自动增量(字节操作加1 1、字操作加、字操作加2 2);当);当DF = 1DF = 1时,时,每传送一次后,每传送一次后,SISI、DIDI(中存放的地址值)自动减量(字节操作(中存放的地址值)自动减量(字节操作减减1 1、字操作减、字操作减2 2
48、),及时修改地址指针。),及时修改地址指针。【例【例4-364-36】 将数据段将数据段DS:0000HDS:0000H开始的开始的100100个字节传送到附加数据段个字节传送到附加数据段ES:0200HES:0200H开始的存储区,分别用不带重复前缀和带重复前缀的串传送指令开始的存储区,分别用不带重复前缀和带重复前缀的串传送指令MOVSBMOVSB编程实现。编程实现。解解1 1:用不带重复前缀的串传送指令编程。:用不带重复前缀的串传送指令编程。 MOV SIMOV SI,0000H0000H MOV DI MOV DI,0200H0200H MOV CX MOV CX,0064H0064H
49、CLD CLD ;增地址传送;增地址传送ASDASD:MOVSB MOVSB DEC CX DEC CX JNZ ASD JNZ ASD 解解2 2:使用带重复前缀的串传送指令编程:使用带重复前缀的串传送指令编程。MOV SIMOV SI,0000H0000HMOV DIMOV DI,0200H0200HMOV CXMOV CX,0064H0064HCLD CLD ;增地址传送;增地址传送REP MOVSB REP MOVSB ;每执行一次,;每执行一次,CXCX减减1 1,直到,直到CX = 0CX = 0时结束时结束图图4-12 4-12 数据块传送的示意图数据块传送的示意图2 2串比较指
50、令串比较指令串比较指令形式有如下两种:串比较指令形式有如下两种: CMPSB CMPSB ;字节串比较;字节串比较 CMPSW CMPSW ;字串比较;字串比较DS:SI-ES:DIDS:SI-ES:DI,即将,即将DS:SIDS:SI所指的源串中的一个字节(字)存储单元中的所指的源串中的一个字节(字)存储单元中的数据与数据与ES:DIES:DI所指的目的串中的一个字节(字)存储单元中的数据相减,并所指的目的串中的一个字节(字)存储单元中的数据相减,并根据相减的结果设置标志位,但相减的结果不传送给目的串。根据相减的结果设置标志位,但相减的结果不传送给目的串。修改地址指针的方式与串传输指令相同修
51、改地址指针的方式与串传输指令相同。串比较指令通常可带重复前缀串比较指令通常可带重复前缀REPZ/REPEREPZ/REPE和和REPNZ/REPNEREPNZ/REPNE。若带若带REPZ/REPEREPZ/REPE,必须使用,必须使用CXCX作计数器,比较操作被规定为:当源串与目的作计数器,比较操作被规定为:当源串与目的串未比较完,即串未比较完,即CX0CX0(重复次数还未为(重复次数还未为0 0),并且两串当前元素相等,即),并且两串当前元素相等,即ZF ZF = 1= 1时,继续比较;反之,只要源串与目的串已经比较完,即时,继续比较;反之,只要源串与目的串已经比较完,即CX = 0CX
52、= 0(重复(重复次数为次数为0 0),或者两串当前元素不相等,即),或者两串当前元素不相等,即ZF = 0ZF = 0时,则退出比较。时,则退出比较。【例【例4-374-37】 设数据段设数据段DS:0000HDS:0000H和和ES:0000HES:0000H开始处,均有开始处,均有100100个字符,用串比个字符,用串比较指令编程进行比较,如果两串相同,较指令编程进行比较,如果两串相同,ALAL寄存器赋寄存器赋00H00H,如果不相同,则,如果不相同,则ALAL寄存器赋寄存器赋FFHFFH(-1-1的补码)。的补码)。程序如下:程序如下: MOV SIMOV SI,0000H0000H
53、MOV DIMOV DI,0000H0000H MOV CXMOV CX,100100 CLD CLD ;增地址比较;增地址比较AGAIN: AGAIN: CMPSB CMPSB ;比较两个字符;比较两个字符 JNZ UNEND JNZ UNEND ;出现不同的字符,转移到;出现不同的字符,转移到UNENDUNEND处处 DEC CXDEC CX JNZ AGAINJNZ AGAIN MOV ALMOV AL,0 0 JMP POIJMP POIUNEND:UNEND:MOV ALMOV AL,0FFH0FFHPOI: POI: 3 3串搜索指令串搜索指令串搜索指令形式有如下两种:串搜索指令形
54、式有如下两种: SCASB SCASB;字节串搜索;字节串搜索 SCASW SCASW;字串搜索;字串搜索字节操作:字节操作:(ALAL)- -(ES:DIES:DI)字操作:字操作: (AXAX)- -(ES:DIES:DI) 根据相减的结果设置标志位,结果不保存。修改地址指针的方式与串传根据相减的结果设置标志位,结果不保存。修改地址指针的方式与串传输指令相同。输指令相同。 操作结束后,操作结束后,ALAL或或AXAX及目的串中的内容都不改变。该指令主要用于在一及目的串中的内容都不改变。该指令主要用于在一串数据中搜索某一个值,这个值要事先置入串数据中搜索某一个值,这个值要事先置入ALAL或或
55、AXAX中。该指令后面往往跟条中。该指令后面往往跟条件转移指令,用来根据搜索的结果确定程序转移方向。件转移指令,用来根据搜索的结果确定程序转移方向。 SCASSCAS指令可带重复前缀指令可带重复前缀REPE/REPZREPE/REPZ或或REPNE/REPNZREPNE/REPNZ。 MOV DIMOV DI,0000H0000H MOV ALMOV AL,41H41H MOV CXMOV CX,0064H0064H CLD CLD ;增地址搜索;增地址搜索 REPNE SCASB REPNE SCASB ;找到了或找遍了(;找到了或找遍了(CX = 0CX = 0),则执行下一条),则执行下
56、一条指令指令 JZ FOUND JZ FOUND ;如果找到了,转到;如果找到了,转到FOUNDFOUND MOV AHMOV AH,0FFH 0FFH ;没有找到;没有找到 JMP ASDJMP ASDFOUND:FOUND:MOV AHMOV AH,00H00HASD: MOV ALASD: MOV AL,AHAH解解2 2:使用带重复前缀的字符串搜索指令编程。:使用带重复前缀的字符串搜索指令编程。【例【例4-384-38】 设附加数据段设附加数据段ES:0000HES:0000H开始处,有开始处,有100100个字符,用字节串搜个字符,用字节串搜索指令编程进行搜索,查找是否有大写字母索指
57、令编程进行搜索,查找是否有大写字母A A的的ASCIIASCII码码41H41H,如果包含有,如果包含有41H41H,则,则ALAL赋赋00H00H,如果没有,则,如果没有,则ALAL赋赋FFHFFH。4.2.6 4.2.6 控制转移指令控制转移指令 控制转移指令分为控制转移指令分为条件转移指令条件转移指令和和无条件转移指令无条件转移指令两大类。两大类。 简单简单条件条件转移指令,这类指令根据单个标志的状态决定是否转移,共有转移指令,这类指令根据单个标志的状态决定是否转移,共有1010条。条。 无符号数无符号数条件条件转移指令,这类指令根据两个标志的状态决定程序是否转转移指令,这类指令根据两个
58、标志的状态决定程序是否转移,共有移,共有4 4条,它用于判断两个无符号数的大小。条,它用于判断两个无符号数的大小。 带符号数带符号数条件条件转移指令,这类指令也根据两个标志的状态决定程序是否转移指令,这类指令也根据两个标志的状态决定程序是否转移,共有转移,共有4 4条,它用于判断两个有符号数(补码)的大小。条,它用于判断两个有符号数(补码)的大小。 指令格式:指令格式: 标号标号:操作符操作符 短标号短标号 功能:如果条件满足,则功能:如果条件满足,则IP+IP+位移量位移量IPIP。 在转移指令中,位移量为当前在转移指令中,位移量为当前IPIP到转移目的地址处的字节距离。在到转移目的地址处的
59、字节距离。在8086/80888086/8088状态下,位移量只能是状态下,位移量只能是8 8位,取值在位,取值在-128-128127127之间,当位移量为之间,当位移量为正时,表示向前转;当位移量为负时,表示向后转。正时,表示向前转;当位移量为负时,表示向后转。 无条件无条件转移指令不作任何判断,无条件地转移到指令中指定的目的地址转移指令不作任何判断,无条件地转移到指令中指定的目的地址处执行程序。处执行程序。 1 1简单条件转移指令简单条件转移指令 8086/8088 CPU8086/8088 CPU中标志寄存器设置了进位标志中标志寄存器设置了进位标志CFCF、零标志、零标志ZFZF、符号
60、标志、符号标志SFSF、溢出标志溢出标志OFOF、奇偶标志、奇偶标志PFPF共计共计5 5个,个,80386/80486/Pentium CPU80386/80486/Pentium CPU保留了这保留了这5 5个个标志。根据这标志。根据这5 5个状态标志位,设置了个状态标志位,设置了1010条简单条件转移指令:条简单条件转移指令: JC JC 标号地址标号地址 ;如果有进位(借位),即;如果有进位(借位),即CF = 1CF = 1转移到标号地址转移到标号地址 JNC JNC 标号地址标号地址 ;CF = 0CF = 0转移到标号地址转移到标号地址 JE/JZ JE/JZ 标号地址标号地址
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度游戏开发合作保密协议3篇
- 铝合金门窗生产批次检验与质量控制合同(二零二四年版)
- 2024年度二手房买卖合同中的房屋买卖合同的有效期2篇
- 人力资源员工培训设计方案
- 房贷借款合同模板标准版
- 2024年度企业信息网络安全服务合同2篇
- 《女生自我保护主题》课件
- 2024年度二手房买卖合同(个人与个人之间)
- 关于监理费延期的补充协议
- 《头晕与眩晕诊断》课件
- 广东省深圳市两校2023-2024学年高二上学期期末联考数学试卷(含答案)
- 高一新生学习方法指导课件
- 参加美术教师培训心得体会(30篇)
- 国开电大可编程控制器应用实训形考任务1实训报告
- 2024领导力培训课程ppt完整版含内容
- 森林火灾中的自救与互救课件
- 数据新闻可视化
- 中学生应急救护知识讲座
- ISO9001质量管理体系培训教材
- 纸质文物保护修复的传统及现代技术研究
- 前庭周围性眩晕个案护理
评论
0/150
提交评论