汇编语言指令系统_第1页
汇编语言指令系统_第2页
汇编语言指令系统_第3页
汇编语言指令系统_第4页
汇编语言指令系统_第5页
已阅读5页,还剩97页未读 继续免费阅读

下载本文档

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

文档简介

1、第 4 章第第4 4 章章8086/80888086/8088指令系指令系统统第 4 章什么是指令系统计算机的指令系统就是指该计算机计算机的指令系统就是指该计算机能够执行的全部指令的集合能够执行的全部指令的集合每种计算机都有它支持的指令集合每种计算机都有它支持的指令集合 1616位位80868086指令系统是指令系统是Intel 80 x86Intel 80 x86系列微处理器指令系统的基础系列微处理器指令系统的基础第 4 章8086指令系统概述Intel 8086Intel 8086指令系统共有指令系统共有117117条基条基本指令,可分成本指令,可分成6 6个功能组个功能组 数据传送类指令

2、数据传送类指令 算术运算类指令算术运算类指令 位操作类指令位操作类指令 串操作类指令串操作类指令 控制转移类指令控制转移类指令 处理机控制类指令处理机控制类指令教学重点重点掌握常用指令功能及应用重点掌握常用指令功能及应用常用传送指令常用传送指令加减法指令加减法指令逻辑运算和移位指令逻辑运算和移位指令控制转移指令控制转移指令字符(串)输入输出功能调用字符(串)输入输出功能调用第 4 章学习指令的注意事项指令的功能指令的功能该指令能够实现何种操作。该指令能够实现何种操作。通常指令助记符就是指令功能的英文单词或通常指令助记符就是指令功能的英文单词或其缩写形式其缩写形式指令支持的寻址方式指令支持的寻址

3、方式该指令中的操作数该指令中的操作数可以采用何种寻址方式可以采用何种寻址方式指令对标志的影响指令对标志的影响该指令执行后是否对该指令执行后是否对各个标志位有影响,以及如何影响各个标志位有影响,以及如何影响其他方面其他方面该指令其他需要特别注意的地该指令其他需要特别注意的地方,如指令执行时的约定设置、必须预置的方,如指令执行时的约定设置、必须预置的参数、隐含使用的寄存器等参数、隐含使用的寄存器等第 4 章汇编语言指令格式由由4 4部分组成:部分组成:标号标号: :指令助记符指令助记符 目的操作数目的操作数, ,源操作数源操作数 ;注释;注释 标号表示该指令在主存中的逻辑地址标号表示该指令在主存中

4、的逻辑地址 每个指令助记符就代表一种指令每个指令助记符就代表一种指令 目的和源操作数表示参与操作的对象目的和源操作数表示参与操作的对象 注释是对该指令或程序段功能的说明注释是对该指令或程序段功能的说明教学提示全面而准确地理解每条指令全面而准确地理解每条指令的功能和应用,是编写汇编的功能和应用,是编写汇编语言程序的关键语言程序的关键第 4 章4.1 数据传送类指令数据传送是计算机中最基本、最重要数据传送是计算机中最基本、最重要的一种操作的一种操作传送指令也是最常使用的一类指令传送指令也是最常使用的一类指令传送指令把数据从一个位置传送到另传送指令把数据从一个位置传送到另一个位置一个位置除标志寄存器

5、传送指令外,均除标志寄存器传送指令外,均不影响不影响标志标志位位重点掌握重点掌握MOV XCHG XLAT PUSH POP LEA第 4 章4.1.1 通用数据传送指令提供方便灵活的通用传送操作提供方便灵活的通用传送操作有有3条指令条指令MOVXCHGXLAT第 4 章1. 传送指令MOV(move)把一个字节或字的操作数从源地址传把一个字节或字的操作数从源地址传送至目的地址送至目的地址MOV reg/mem,immMOV reg/mem,imm;立即数送寄存器或主存;立即数送寄存器或主存例题例题4.1MOV reg/mem/seg,regMOV reg/mem/seg,reg;寄存器送(段

6、)寄存器或主存;寄存器送(段)寄存器或主存例题例题4.2MOV reg/seg,memMOV reg/seg,mem;主存送(段)寄存器;主存送(段)寄存器例题例题4.3MOV reg/mem,segMOV reg/mem,seg;段寄存器送寄存器或主存;段寄存器送寄存器或主存例题例题4.5第 4 章例例4.1:立即数传送:立即数传送mov al,4mov al,4;al4al4,字节传送,字节传送mov cx,mov cx,0 0ffhffh;cx00ffhcx00ffh,字传送,字传送mov si,200hmov si,200h;si0200hsi0200h,字传送,字传送mov mov

7、byte ptrbyte ptr si, si,0ah0ah;byte ptr byte ptr 说明是字节操作说明是字节操作mov mov word ptrword ptr si+2, si+2,0bh0bh;word ptr word ptr 说明是字操作说明是字操作 注意立即数是字节量还是字量注意立即数是字节量还是字量 明确指令是字节操作还是字操作明确指令是字节操作还是字操作第 4 章例例4.2:寄存器传送:寄存器传送mov ax,bxmov ax,bx;axbxaxbx,字传送,字传送mov ah,almov ah,al;ahalahal,字节传送,字节传送mov ds,axmov d

8、s,ax;dsaxdsax,字传送,字传送mov bx,almov bx,al;bxalbxal,字节传送,字节传送第 4 章例例4.3:存储器传送:存储器传送mov al,bxmov al,bxmov dx,bpmov dx,bp;dxss:bpdxss:bpmov es,simov es,si;esds:siesds:si 不存在存储器向存储器的传送指令不存在存储器向存储器的传送指令第 4 章例例4.5:段寄存器传送:段寄存器传送mov si,dsmov si,dsmov ax,esmov ax,es;axesaxesmov ds,axmov ds,ax;dsaxesdsaxes 对段寄存

9、器的操作有一些限制对段寄存器的操作有一些限制第 4 章MOV指令传送功能MOV也并非任意传送也并非任意传送立即数立即数段寄存器段寄存器CS DS ES SSCS DS ES SS通用寄存器通用寄存器AX BX CX DXAX BX CX DXBP SP SI DIBP SP SI DI存存储储器器第 4 章非法传送种种两个操作数的类型不一致两个操作数的类型不一致n例如源操作数是字节,而目的操作例如源操作数是字节,而目的操作数是字;或相反数是字;或相反两个操作数不能都是存储器两个操作数不能都是存储器n传送指令很灵活,但主存之间的直传送指令很灵活,但主存之间的直接传送却不允许接传送却不允许段寄存器

10、的操作有一些限制段寄存器的操作有一些限制n段寄存器属专用寄存器,对他们的段寄存器属专用寄存器,对他们的操作能力有限操作能力有限第 4 章两个操作数的类型要一致绝大多数双操作数指令,除非特别说明,目绝大多数双操作数指令,除非特别说明,目的操作数与源操作数必须类型一致,否则为非的操作数与源操作数必须类型一致,否则为非法指令法指令MOV AL,050AHMOV AL,050AH;非法指令:;非法指令:050Ah050Ah为字,而为字,而ALAL为字节为字节寄存器有明确的字节或字类型,有寄存器参寄存器有明确的字节或字类型,有寄存器参与的指令其操作数类型就是寄存器的类型与的指令其操作数类型就是寄存器的类

11、型对于存储器单元与立即数同时作为操作数的对于存储器单元与立即数同时作为操作数的情况,必须显式指明;情况,必须显式指明;byte ptrbyte ptr指示字节类型,指示字节类型,word ptrword ptr指示字类型指示字类型第 4 章两个操作数不能都是存储器80868086指令系统不允许两个操作数都是指令系统不允许两个操作数都是存储单元(除串操作指令),要实现这存储单元(除串操作指令),要实现这种传送,可通过寄存器间接实现种传送,可通过寄存器间接实现mov ax,buffer1mov ax,buffer1;axbuffer1axbuffer1(将(将buffer1buffer1内容送内容

12、送axax)mov buffer2,axmov buffer2,ax;buffer2axbuffer2ax;这里;这里buffer1buffer1和和buffer2buffer2是两个字变量是两个字变量;实际表示直接寻址方式;实际表示直接寻址方式第 4 章要小心段寄存器的操作不允许立即数传送给段寄存器不允许立即数传送给段寄存器MOV DS,100H;非法指令:立即数不能传送段寄存器;非法指令:立即数不能传送段寄存器不允许直接改变不允许直接改变CS值值MOV CS,SI ;不允许使用的指令;不允许使用的指令不允许段寄存器之间的直接数据传送不允许段寄存器之间的直接数据传送MOV DS,ES;非法指

13、令:不允许段寄存器间传送;非法指令:不允许段寄存器间传送第 4 章2. 交换指令XCHG(exchange)把两个地方的数据进行互换把两个地方的数据进行互换寄存器与寄存器之间对换数据寄存器与寄存器之间对换数据寄存器与存储器之间对换数据寄存器与存储器之间对换数据不能在存储器与存储器之间对换数据不能在存储器与存储器之间对换数据XCHG reg,reg/memXCHG reg,reg/mem;reg reg reg/memreg/mem例题例题4.7例题例题4.6第 4 章例例4.6:寄存器间交换:寄存器间交换mov ax,1234hmov ax,1234h;ax=1234hax=1234hmov

14、bx,5678hmov bx,5678h;bx=5678hbx=5678hxchg ax,bxxchg ax,bx;ax=5678hax=5678h,bx=1234hbx=1234hxchg ah,alxchg ah,al;ax=7856hax=7856h第 4 章例例4.7:寄存器与存储器交换:寄存器与存储器交换xchg ax,2000hxchg ax,2000h ;字交换;字交换;等同于;等同于 xchg 2000h,axxchg 2000h,axxchg al,2000h xchg al,2000h ;字节交换;字节交换;等同于;等同于 xchg 2000h,alxchg 2000h,a

15、l 第 4 章换码指令执行前:换码指令执行前:在主存建立一个在主存建立一个字节量表格字节量表格,内含要转换成的目的代码,内含要转换成的目的代码表格首地址表格首地址存放于存放于BXBX,ALAL存放相对表格首地址的存放相对表格首地址的位移量位移量换码指令执行后:换码指令执行后:将将ALAL寄存器的内容转换为寄存器的内容转换为目标代码目标代码3. 换码指令XLAT(translate)将将BX指定的缓冲区中、指定的缓冲区中、AL指定的位移指定的位移处的一个字节数据取出赋给处的一个字节数据取出赋给ALXLATXLAT;alds:bx+alalds:bx+al例题例题4.8第 4 章例例4.8:代码转

16、换:代码转换mov bx,100hmov bx,100hmov al,03hmov al,03hxlatxlat 换码指令没有显式的操作数,但使用换码指令没有显式的操作数,但使用了了BX和和AL;因为换码指令使用了隐含;因为换码指令使用了隐含寻址方式寻址方式采用默认操作数采用默认操作数第 4 章4.1.2 堆栈操作指令堆栈是一个堆栈是一个“后进先出后进先出FILO”FILO”(或说(或说“先进后先进后出出FILO”FILO”)的主存区域,)的主存区域,位于堆栈段中;位于堆栈段中;SSSS段寄段寄存器存器记录其段地址记录其段地址堆栈只有一个出口,即堆栈只有一个出口,即当前栈顶;用当前栈顶;用堆栈

17、指针堆栈指针寄存器寄存器SPSP指定指定栈顶是地址较小的一端栈顶是地址较小的一端(低端),栈底不变(低端),栈底不变第 4 章第 4 章堆栈和队列堆栈:按照后进先堆栈:按照后进先出出(LIFO)(LIFO)的原则组织的原则组织的存储器空间(栈)的存储器空间(栈)队列:按照先进先队列:按照先进先出出(FIFO)(FIFO)的原则组织的原则组织的存储器空间的存储器空间LIFOFIFO第 4 章堆栈的操作堆栈只有两种基本操作:进栈和堆栈只有两种基本操作:进栈和出栈,对应两条指令出栈,对应两条指令PUSH和和POPPUSHPUSH;进栈指令先使;进栈指令先使堆栈指针堆栈指针SPSP减减2 2,然后把一

18、个字操然后把一个字操作数存入堆栈顶作数存入堆栈顶部部POPPOP;出栈指令把栈顶;出栈指令把栈顶的一个字传送至指的一个字传送至指定的目的操作数,定的目的操作数,然后堆栈指针然后堆栈指针SPSP加加2 2第 4 章第 4 章1. 进栈指令PUSHpush axpush axpush 2000hpush 2000hPUSH r16/m16/segPUSH r16/m16/seg;SPSPSPSP2 2;SS:SPr16/m16/segSS:SPr16/m16/seg第 4 章第 4 章2. 出栈指令POPpop axpop axpop 2000hpop 2000hPOP r16/m16/segPO

19、P r16/m16/seg;r16/m16/segSS:SPr16/m16/segSS:SP;SPSPSPSP2 2第 4 章堆栈的特点堆栈操作的单位是字,进栈和出栈只对字量堆栈操作的单位是字,进栈和出栈只对字量字量数据从栈顶压入和弹出时,都是低地址字量数据从栈顶压入和弹出时,都是低地址字节送低字节,高地址字节送高字节字节送低字节,高地址字节送高字节堆栈操作遵循先进后出原则,但可用存储器堆栈操作遵循先进后出原则,但可用存储器寻址方式随机存取堆栈中的数据寻址方式随机存取堆栈中的数据堆栈常用来堆栈常用来n临时存放数据临时存放数据n传递参数传递参数n保存和恢复寄存器保存和恢复寄存器例题例题4.11第

20、 4 章例例4.11:现场保护恢复:现场保护恢复push axpush ax;进入子程序后;进入子程序后push bxpush bxpush dspush ds.pop dspop ds;返回主程序前;返回主程序前pop bxpop bxpop axpop ax第 4 章4.1.3 标志传送指令标志寄存器传送指令用来传送标标志寄存器传送指令用来传送标志寄存器志寄存器FLAGS的内容的内容标志位操作指令直接对标志位操作指令直接对CF、DF、IF标志进行复位或置位标志进行复位或置位第 4 章1. 标志寄存器传送标志寄存器传送指令用来传送标标志寄存器传送指令用来传送标志寄存器志寄存器FLAGS的内容

21、,方便进的内容,方便进行对各个标志位的直接操作行对各个标志位的直接操作有有2对对4条指令条指令n低低8位传送:位传送:LAHF和和SAHFn16位传送:位传送:PUSHF和和POPF第 4 章标志低字节进出AH指令LAHFLAHF;AHFLAGSAHFLAGS的低字节的低字节LAHFLAHF指令将标志寄存器指令将标志寄存器的低字节送寄存器的低字节送寄存器AHAHSF/ZF/AF/PF/CFSF/ZF/AF/PF/CF状态标状态标志位分别送入志位分别送入AHAH的第的第7/6/4/2/07/6/4/2/0位,而位,而AHAH的的第第5/3/15/3/1位任意位任意SAHFSAHF;FLAGSFL

22、AGS的低字节的低字节AHAHSAHFSAHF将将AHAH寄存器内容寄存器内容送送FLAGSFLAGS的低字节的低字节用用AHAH的第的第7/6/4/2/07/6/4/2/0位位相应设置相应设置SF/ZF/AF/ SF/ZF/AF/ PF/CFPF/CF标志标志第 4 章第 4 章标志寄存器进出堆栈指令PUSHFPUSHF;SPSPSPSP2 2;SS:SPFLAGSSS:SPFLAGSPUSHFPUSHF指令将标志寄存指令将标志寄存器的内容压入堆栈,器的内容压入堆栈,同时栈顶指针同时栈顶指针SPSP减减2 2POPFPOPF;FLAGSSS:SPFLAGSSS:SP;SPSPSPSP2 2P

23、OPFPOPF指令将栈顶字单元指令将栈顶字单元内容送标志寄存器,同内容送标志寄存器,同时栈顶指针时栈顶指针SPSP加加2 2例题例题4.12第 4 章第 4 章例例4.12:置位单步标志:置位单步标志pushfpushf;保存全部标志到堆栈;保存全部标志到堆栈pop axpop ax;从堆栈中取出全部标志;从堆栈中取出全部标志or ax,0100hor ax,0100h ;设置;设置D D8 8=TF=1=TF=1,;axax其他位不变其他位不变push axpush ax;将;将axax压入堆栈压入堆栈popfpopf;FLAGSAXFLAGSAX;将堆栈内容取到标志寄存器;将堆栈内容取到标

24、志寄存器第 4 章2. 标志位操作标志位操作指令直接对标志位操作指令直接对CF、DF、IF标志进行复位或置位,常用于特标志进行复位或置位,常用于特定的情况定的情况对标志位进行设置的指令对标志位进行设置的指令nCLC STC CMCnCLD STDnCLI STI第 4 章进位标志操作指令用于任意设置进位标志用于任意设置进位标志CLCCLC;复位进位标志:;复位进位标志:CF0CF0STCSTC;置位进位标志:;置位进位标志:CF1CF1CMCCMC;求反进位标志:;求反进位标志:CFCFCFCF第 4 章方向标志操作指令串操作指令中,需要使用串操作指令中,需要使用CLDCLD;复位方向标志:;

25、复位方向标志:DF0DF0STDSTD;置位方向标志:;置位方向标志:DF1DF1第 4 章中断标志操作指令在编写中断服务程序时,需要在编写中断服务程序时,需要控制可屏蔽中断的允许和禁止控制可屏蔽中断的允许和禁止CLICLI;复位中断标志:;复位中断标志:DF0DF0STISTI;置位中断标志:;置位中断标志:DF1DF1第 4 章4.1.4 地址传送指令地址传送指令将存储器单元的逻地址传送指令将存储器单元的逻辑地址送至指定的寄存器辑地址送至指定的寄存器n有效地址传送指令有效地址传送指令 LEAn指针传送指令指针传送指令 LDS和和LES注意不是获取存储器单元的内容注意不是获取存储器单元的内容

26、第 4 章有效地址传送指令LEA(load EA)将存储器操作数的有效地址传将存储器操作数的有效地址传送至指定的送至指定的16位寄存器中位寄存器中例题例题4.13LEA r16,memLEA r16,mem;r16memr16mem的有效地址的有效地址EAEA第 4 章例例4.13:获取有效地址:获取有效地址mov bx,0400hmov bx,0400hmov si,3chmov si,3chlea bx,bx+si+0f62hlea bx,bx+si+0f62h;BXBX0400h0400h003ch003ch0f62h0f62h139EH139EH 获得主存单元的有效地址;不是物理地获得

27、主存单元的有效地址;不是物理地址,也不是该单元的内容址,也不是该单元的内容 可以实现计算功能可以实现计算功能第 4 章指针传送指令LDS r16,memLDS r16,mem;r16memr16mem,;DSmem+2DSmem+2LDSLDS指令将主存中指令将主存中memmem指定的字送至指定的字送至r16r16,并将并将memmem的下一字送的下一字送DSDS寄存器寄存器LES r16,memLES r16,mem;r16memr16mem,;ESmem+2ESmem+2LESLES指令将主存中指令将主存中memmem指定的字送至指定的字送至r16r16,并将并将memmem的下一字送的下

28、一字送ESES寄存器寄存器例题例题4.14第 4 章第 4 章例例4.14:地址指针传送:地址指针传送mov word ptr 3060h,0100hmov word ptr 3060h,0100hmov word ptr 3062h,1450hmov word ptr 3062h,1450hles di,3060hles di,3060h ;es=1450hes=1450h,di=0100hdi=0100hlds si,3060hlds si,3060h ;ds=1450hds=1450h,si=0100hsi=0100h memmem指定主存的连续指定主存的连续4 4个字节作为逻辑个字节作

29、为逻辑地址(地址(3232位的地址指针),送入位的地址指针),送入DS:r16DS:r16或或ES:r16ES:r16第 4 章4.1.5 输入输出指令8086通过输入输出指令与外设进行数据通过输入输出指令与外设进行数据交换;呈现给程序员的外设是交换;呈现给程序员的外设是端口端口(Port)即)即I/O地址地址8086用于寻址外设端口的地址线为用于寻址外设端口的地址线为16条,端口最多为条,端口最多为21665536(64K)个,)个,端口号为端口号为0000HFFFFH每个端口用于传送一个字节的外设数据每个端口用于传送一个字节的外设数据第 4 章输入输出寻址方式8086的端口有的端口有64K

30、个,无需分段,个,无需分段,设计有两种寻址方式设计有两种寻址方式v直接寻址直接寻址:只用于寻址:只用于寻址00HFFH前前256个端口,操作数个端口,操作数i8表示端口号表示端口号v间接寻址间接寻址:可用于寻址全部:可用于寻址全部64K个端个端口,口,DX寄存器的值就是端口号寄存器的值就是端口号对大于对大于FFH的端口只能采用间接寻的端口只能采用间接寻址方式址方式第 4 章输入指令IN将外设数据传送给将外设数据传送给CPU内的内的AL/AXIN AL,i8IN AL,i8;字节输入:;字节输入:ALI/OALI/O端口(端口(i8i8直接寻址)直接寻址)IN AL,DXIN AL,DX;字节输

31、入:;字节输入:ALI/OALI/O端口(端口(DXDX间接寻址)间接寻址)IN AX,i8IN AX,i8;字输入:;字输入:AXI/OAXI/O端口(端口(i8i8直接寻址)直接寻址)IN AX,DXIN AX,DX;字输入:;字输入:AXI/OAXI/O端口(端口(DXDX间接寻址)间接寻址)例题例题4.15第 4 章例例4.15:输入字量:输入字量;直接寻址,字节量输入;直接寻址,字节量输入in al,21hin al,21hmov ah,almov ah,alin al,20hin al,20h;直接寻址,字量输入;直接寻址,字量输入in ax,20hin ax,20h;间接寻址,字

32、量输入;间接寻址,字量输入mov dx,20hmov dx,20hin ax,dxin ax,dx 两段功能相同两段功能相同 字量数据传送实字量数据传送实际上实现了连续的际上实现了连续的两个端口地址的字两个端口地址的字节量传送节量传送第 4 章输出指令OUT将将CPU内的内的AL/AX数据传送给外设数据传送给外设OUT i8,ALOUT i8,AL;字节输出:;字节输出:I/OI/O端口端口ALAL(i8i8直接寻址)直接寻址)OUT DX,ALOUT DX,AL;字节输出:;字节输出:I/OI/O端口端口ALAL(DXDX间接寻址)间接寻址)OUT i8,AXOUT i8,AX;字输出:;字

33、输出:I/OI/O端口端口AXAX(i8i8直接寻址)直接寻址)OUT DX,AXOUT DX,AX;字输出:;字输出:I/OI/O端口端口AXAX(DXDX间接寻址)间接寻址)例题例题4.16第 4 章例例4.16:输出字节量:输出字节量;间接寻址,字节量输出;间接寻址,字节量输出mov dx,3fchmov dx,3fchmov al,80hmov al,80hout dx,alout dx,al第 4 章4.2 算术运算类指令四则运算是计算机经常进行的一种操四则运算是计算机经常进行的一种操作。算术运算指令实现二进制(和十作。算术运算指令实现二进制(和十进制)数据的四则运算进制)数据的四则

34、运算请注意算术运算类指令请注意算术运算类指令对标志的影响对标志的影响n掌握:掌握:ADD/ADC/INC、SUB/SBB/DEC/ NEG/CMPn熟悉:熟悉:MUL/IMUL、DIV/IDIVn理解:理解:CBW/CWD、DAA/DAS、 AAA/ AAS/AAM/AAD第 4 章加法指令ADDADD指令将源与目的操作数相加,结指令将源与目的操作数相加,结果送到目的操作数果送到目的操作数ADD指令按状态标志的定义相应设置指令按状态标志的定义相应设置ADD reg,imm/reg/memADD reg,imm/reg/mem;regregregregimm/reg/memimm/reg/mem

35、ADD mem,imm/regADD mem,imm/reg;memmemmemmemimm/regimm/reg例题例题4.17a第 4 章例例4.17a:加法运算:加法运算mov al,0fbhmov al,0fbh;al=0fbhal=0fbhadd al,07hadd al,07h;al=02hal=02hmov word ptr 200h,4652hmov word ptr 200h,4652h;200h=4652h200h=4652hmov bx,1fehmov bx,1feh;bx=1fehbx=1fehadd al,bladd al,bl;al=00hal=00hadd wor

36、d ptr bx+2,0f0f0hadd word ptr bx+2,0f0f0h;200h=3742h200h=3742h第 4 章带进位加法指令ADCADC指令将源与目的操作数相加,再加上进指令将源与目的操作数相加,再加上进位位CF标志,结果送到目的操作数标志,结果送到目的操作数ADC指令按状态标志的定义相应设置指令按状态标志的定义相应设置ADC指令主要与指令主要与ADD配合,实现多精度加法配合,实现多精度加法运算运算ADC reg,imm/reg/memADC reg,imm/reg/mem;regregregregimm/reg/memimm/reg/memCFCFADC mem,im

37、m/regADC mem,imm/reg;memmemmemmemimm/regimm/regCFCF例题例题4.17b第 4 章例例4.17b:双字加法:双字加法mov ax,4652hmov ax,4652h;ax=4652hax=4652hadd ax,0f0f0hadd ax,0f0f0h ;ax=3742hax=3742h,CF=1CF=1mov dx,0234hmov dx,0234h;dx=0234hdx=0234hadc dx,0f0f0hadc dx,0f0f0h ;dx=f325hdx=f325h,CF=0CF=0;DX.AXDX.AX0234 4652H0234 4652

38、HF0F0 F0F0HF0F0 F0F0HF325 3742HF325 3742H第 4 章增量指令INC(increment)INC指令对操作数加指令对操作数加1(增量)(增量)INC指令不影响进位指令不影响进位CF标志,按标志,按定义设置其他状态标志定义设置其他状态标志INC reg/memINC reg/mem;reg/memreg/memreg/memreg/mem1 1inc bxinc bxinc byte ptr bxinc byte ptr bx第 4 章减法指令SUB(subtract)SUB指令将目的操作数减去源操作数,指令将目的操作数减去源操作数,结果送到目的操作数结果送

39、到目的操作数SUB指令按照定义相应设置状态标志指令按照定义相应设置状态标志SUB reg,imm/reg/memSUB reg,imm/reg/mem;regregregregimm/reg/memimm/reg/memSUB mem,imm/regSUB mem,imm/reg;memmemmemmemimm/regimm/reg例题例题4.18a第 4 章例例4.18a:减法运算:减法运算mov al,0fbhmov al,0fbh;al=0fbhal=0fbhsub al,07hsub al,07h;al=0f4hal=0f4h,CFCF0 0mov word ptr 200h,4652

40、hmov word ptr 200h,4652h;200h=4652h200h=4652hmov bx,1fehmov bx,1feh;bx=1fehbx=1fehsub al,blsub al,bl;al=al=0f6h0f6hsub word ptr bx+2,0f0f0hsub word ptr bx+2,0f0f0h;200h=5562h200h=5562h,CFCF1 1第 4 章带借位减法指令SBBSBB指令将目的操作数减去源操作数,再减指令将目的操作数减去源操作数,再减去借位去借位CF(进位),结果送到目的操作数。(进位),结果送到目的操作数。SBB指令按照定义相应设置状态标志指

41、令按照定义相应设置状态标志SBB指令主要与指令主要与SUB配合,实现多精度减法配合,实现多精度减法运算运算SBB reg,imm/reg/memSBB reg,imm/reg/mem;regregregregimm/reg/memimm/reg/memCFCFSBB mem,imm/regSBB mem,imm/reg;memmemmemmemimm/regimm/regCFCF例题例题4.18b第 4 章例例4.18b:双字减法:双字减法mov ax,4652hmov ax,4652h;ax=4652hax=4652hsub ax,0f0f0hsub ax,0f0f0h ;ax=5562ha

42、x=5562h,CF=1CF=1mov dx,0234hmov dx,0234h;dx=0234hdx=0234hsbb dx,0f0f0hsbb dx,0f0f0h ;dx=1143hdx=1143h,CF=1CF=1;DX.AXDX.AX0234 4652H0234 4652HF0F0 F0F0HF0F0 F0F0H1143 5562H1143 5562H第 4 章减量指令DEC(decrement)DEC指令对操作数减指令对操作数减1(减量)(减量)DEC指令不影响进位指令不影响进位CF标志,按标志,按定义设置其他状态标志定义设置其他状态标志DEC reg/memDEC reg/mem;

43、reg/memreg/memreg/memreg/mem1 1dec cxdec cxdec word ptr sidec word ptr si INC指令和指令和DEC指令都是单操作数指令指令都是单操作数指令 主要用于对计数器和地址指针的调整主要用于对计数器和地址指针的调整第 4 章求补指令NEG(negative)NEG指令对操作数执行求补运算:用指令对操作数执行求补运算:用零减去操作数,然后结果返回操作数零减去操作数,然后结果返回操作数求补运算也可以表达成:将操作数按求补运算也可以表达成:将操作数按位取反后加位取反后加1NEG指令对标志的影响与用零作减法指令对标志的影响与用零作减法的的

44、SUB指令一样指令一样NEG reg/memNEG reg/mem;reg/mem0reg/mem0reg/memreg/mem例题例题4.19第 4 章例例4.19:求补运算:求补运算mov ax,0ff64hmov ax,0ff64hneg alneg al;ax=ff9chax=ff9ch,OF=0OF=0、SF=1SF=1、ZF=0ZF=0、PF=1PF=1、CF=1CF=1sub al,9dhsub al,9dh;ax=ffffhax=ffffh,OF=0OF=0、SF=1SF=1、ZF=0ZF=0、PF=1PF=1、CF=1CF=1neg axneg ax;ax=0001hax=0

45、001h,OF=0OF=0、SF=0SF=0、ZF=0ZF=0、PF=0PF=0、CF=1CF=1dec aldec al;ax=0000hax=0000h,OF=0OF=0、SF=0SF=0、ZF=1ZF=1、PF=1PF=1、CF=1CF=1neg axneg ax;ax=0000hax=0000h,OF=0OF=0、SF=0SF=0、ZF=1ZF=1、PF=1PF=1、CF=0CF=0第 4 章比较指令CMP(compare)CMP指令将目的操作数减去源操作数,指令将目的操作数减去源操作数,按照定义相应设置状态标志按照定义相应设置状态标志CMP指令执行的功能与指令执行的功能与SUB指令,

46、但指令,但结果不回送目的操作数结果不回送目的操作数CMP reg,imm/reg/memCMP reg,imm/reg/mem;regregimm/reg/memimm/reg/memCMP mem,imm/regCMP mem,imm/reg;memmemimm/regimm/reg例题例题4.20第 4 章例例4.20:比较:比较AL与与100cmp al,100cmp al,100;al-100al-100jb belowjb below;al100al100,跳转到,跳转到belowbelow执行执行sub al,100sub al,100;al100al100,alal-100ala

47、l-100inc ahinc ah;ahah+1ahah+1below:below: . 执行比较指令之后,可以根据标志执行比较指令之后,可以根据标志判断两个数是否相等、大小关系等判断两个数是否相等、大小关系等第 4 章4.2.3 乘法指令MUL r8/m8MUL r8/m8;无符号字节乘法;无符号字节乘法;AXALAXALr8/m8r8/m8MUL r16/m16MUL r16/m16;无符号字乘法;无符号字乘法;DX.AXAXDX.AXAXr16/m16r16/m16IMUL r8/m8IMUL r8/m8;有符号字节乘法;有符号字节乘法;AXALAXALr8/m8r8/m8IMUL r1

48、6/m16IMUL r16/m16;有符号字乘法;有符号字乘法;DX.AXAXDX.AXAXr16/m16r16/m16例题例题4.21第 4 章第 4 章乘法指令的功能乘法指令乘法指令分无符号和有符号乘法指令分无符号和有符号乘法指令乘法指令的源操作数显式给出,乘法指令的源操作数显式给出,隐含隐含使用另一个操作数使用另一个操作数AX和和DXn字节量相乘:字节量相乘:AL与与r8/m8相乘,得到相乘,得到16位位的结果,存入的结果,存入AXn字量相乘:字量相乘:AX与与r16/m16相乘,得到相乘,得到32位的结果,其高字存入位的结果,其高字存入DX,低字存入,低字存入AX乘法指令利用乘法指令利

49、用OF和和CF判断乘积的高一判断乘积的高一半是否具有有效数值半是否具有有效数值第 4 章乘法指令对标志的影响乘法指令如下影响乘法指令如下影响OF和和CF标志:标志:nMUL指令指令若乘积的高一半(若乘积的高一半(AH或或DX)为为0,则,则OF=CF=0;否则;否则OF=CF=1nIMUL指令指令若乘积的高一半是低一半若乘积的高一半是低一半的符号扩展,则的符号扩展,则OF=CF=0;否则均为;否则均为1乘法指令对其他状态标志乘法指令对其他状态标志没有定义没有定义 对标志没有定义:指令执行后这些标志是任对标志没有定义:指令执行后这些标志是任意的、不可预测(就是谁也不知道是意的、不可预测(就是谁也

50、不知道是0还是还是1) 对标志没有影响:指令执行不改变标志状态对标志没有影响:指令执行不改变标志状态第 4 章例例4.21:乘法运算:乘法运算mov al,0b4hmov al,0b4h;al=b4h=180al=b4h=180mov bl,11hmov bl,11h;bl=11h=17bl=11h=17mul blmul bl;ax=Obf4h=3060ax=Obf4h=3060;OF=CF=1OF=CF=1,AXAX高高8 8位不为位不为0 0mov al,0b4hmov al,0b4h;al=b4h=al=b4h=7676mov bl,11hmov bl,11h;bl=11h=17bl=

51、11h=17imul blimul bl;ax=faf4h=ax=faf4h=12921292;OF=CF=1OF=CF=1,AXAX高高8 8位含有效数字位含有效数字第 4 章4.2.4 除法指令DIV r8/m8DIV r8/m8;无符号字节除法:;无符号字节除法:ALAXALAXr8/m8r8/m8的商,的商,AhAXAhAXr8/m8r8/m8的余数的余数DIV r16/m16DIV r16/m16;无符号字除法:;无符号字除法:;AXDX.AXAXDX.AXr16/m16r16/m16的商,的商,DXDX.AXDXDX.AXr16/m16r16/m16的余数的余数IDIV r8/m8

52、IDIV r8/m8;有符号字节除法:;有符号字节除法:ALAXALAXr8/m8r8/m8的商,的商,AhAXAhAXr8/m8r8/m8的余数的余数IDIV r16/m16IDIV r16/m16;有符号字除法:;有符号字除法:;AXDX.AXAXDX.AXr16/m16r16/m16的商,的商,DXDX.AXDXDX.AXr16/m16r16/m16的余数的余数例题例题4.22第 4 章第 4 章除法指令的功能除法指令分无符号和有符号除法指令除法指令分无符号和有符号除法指令除法指令的除数显式给出,隐含使用除法指令的除数显式给出,隐含使用另一个操作数另一个操作数AX和和DX作为被除数作为被

53、除数n字节量除法:字节量除法:AX除以除以r8/m8,8位商存入位商存入AL,8位余数存入位余数存入AHn字量除法:字量除法:DX.AX除以除以r16/m16,16位商位商存入存入AX,16位余数存入位余数存入DX除法指令对标志没有定义除法指令对标志没有定义除法指令会产生结果溢出除法指令会产生结果溢出第 4 章除法错中断当被除数远大于除数时,所得的商就当被除数远大于除数时,所得的商就有可能超出它所能表达的范围。如果有可能超出它所能表达的范围。如果存放商的寄存器存放商的寄存器AL/AX不能表达,便不能表达,便产生溢出,产生溢出,8086CPU中就产生编号为中就产生编号为0的内部中断的内部中断除法

54、错中断除法错中断n对对DIV指令,除数为指令,除数为0,或者在字节除时,或者在字节除时商超过商超过8位,或者在字除时商超过位,或者在字除时商超过16位,位,则发生除法溢出则发生除法溢出n对对IDIV指令,除数为指令,除数为0,或者在字节除时,或者在字节除时商不在商不在-128127范围内,或者在字除时范围内,或者在字除时商不在商不在-3276832767范围内,则发生除范围内,则发生除法溢出法溢出第 4 章例例4.22:除法运算:除法运算mov ax,0400hmov ax,0400h;ax=400h=1024ax=400h=1024mov bl,0b4hmov bl,0b4h;bl=b4h=

55、180bl=b4h=180div bldiv bl;商;商alal05h05h5 5;余数;余数ahah7ch7ch124124mov ax,0400hmov ax,0400h;ax=400h=1024ax=400h=1024mov bl,0b4hmov bl,0b4h;bl=b4h=bl=b4h=7676idiv blidiv bl;商;商alalf3hf3h1313;余数;余数ahah24h24h3636第 4 章4.2.5 符号扩展指令CBWCBW;ALAL的符号扩展至的符号扩展至AHAH;如;如ALAL的最高有效位是的最高有效位是0 0,则,则AHAH0000;ALAL的最高有效位为的

56、最高有效位为1 1,则,则AHAHFFHFFH。ALAL不变不变CWDCWD;AXAX的符号扩展至的符号扩展至DXDX;如;如AXAX的最高有效位是的最高有效位是0 0,则,则DXDX0000;AXAX的最高有效位为的最高有效位为1 1,则,则DXDXFFFFHFFFFH。AXAX不变不变什么是符号扩展什么是符号扩展符号扩展指令常用于获得倍长的数据符号扩展指令常用于获得倍长的数据 不影响标志位不影响标志位例题例题4.23例题例题4.24第 4 章第 4 章符号扩展的概念符号扩展是指用一个操作数的符号位符号扩展是指用一个操作数的符号位(即最高位)形成另一个操作数,后(即最高位)形成另一个操作数,

57、后一个操作数的各位是全一个操作数的各位是全0(正数)或全(正数)或全1(负数)。(负数)。符号扩展不改变数据大小符号扩展不改变数据大小n对于数据对于数据64H(表示数据(表示数据100),其最高),其最高位位D7为为0,符号扩展后高,符号扩展后高8位都是位都是0,成为,成为0064H(仍表示数据(仍表示数据100)n对于数据对于数据ff00H(表示有符号数(表示有符号数256),),其最高位其最高位D15为为1,符号扩展后高,符号扩展后高16位都位都是是1,成为,成为ffffff00H(仍表示有符号数(仍表示有符号数256)第 4 章例例4.23:符号扩展:符号扩展mov al,80hmov

58、al,80h;al=80hal=80hcbwcbw;ax=ff80hax=ff80hadd al,255add al,255;al=7fhal=7fhcbwcbw;ax=007fhax=007fh第 4 章例例4.24:AXBXcwdcwd;DX.AXAXDX.AXAXidiv bxidiv bx;AXDX.AXAXDX.AXBXBX 利用符号扩展指令得到除法指令所利用符号扩展指令得到除法指令所需要的倍长于除数的被除数需要的倍长于除数的被除数 对无符号数除法应该采用直接使高对无符号数除法应该采用直接使高8位或高位或高16位清位清0的方法,获得倍长的的方法,获得倍长的被除数被除数第 4 章4.2

59、.6 十进制调整指令q压缩压缩BCD码就是通常码就是通常的的8421码;它用码;它用4个二个二进制位表示一个十进进制位表示一个十进制位,一个字节可以制位,一个字节可以表示两个十进制位,表示两个十进制位,即即0099q非压缩非压缩BCD码用码用8个个二进制位表示一个十二进制位表示一个十进制位,只用低进制位,只用低4个个二进制位表示一个十二进制位表示一个十进制位进制位09,高,高4位位任意,通常默认为任意,通常默认为0十进制数调整指令对二进制运算的结果进十进制数调整指令对二进制运算的结果进行十进制调整,以得到十进制的运算结果行十进制调整,以得到十进制的运算结果分成压缩分成压缩BCDBCD码和非压缩

60、码和非压缩BCDBCD码调整码调整第 4 章第 4 章BCD码(Binary Coded Decimal)二进制编码的十进制数:一位十二进制编码的十进制数:一位十进制数用进制数用4位二进制编码来表示位二进制编码来表示8086支持压缩支持压缩BCD码和非压缩码和非压缩BCD码的调整运算码的调整运算真值真值 864二进制编码二进制编码08H 40H压缩压缩BCD码码08H 64H非压缩非压缩BCD码码08H 0604H第 4 章压缩BCD码加、减调整指令(ADD AL,i8/r8/m8ADD AL,i8/r8/m8)(ADC AL,i8/r8/m8ADC AL,i8/r8/m8)DAADAA;AL

温馨提示

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

评论

0/150

提交评论