《第三章节-8086寻址方式和指令系统课件.ppt》由会员分享,可在线阅读,更多相关《第三章节-8086寻址方式和指令系统课件.ppt(268页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第 3 章 8086寻址方式 和指令系统本章要点n寻址方式n常用指令的功能、格式、操作、对标志的影响n计算机是如何实现转移、调用、中断的地址指令地址:指令通常存放在内存中操作数地址:操作数可以存放在多个地方 :MOV BX,123ADD AX,BX MOV AX,2000H IN AX,12H :JMP L1 :CALL SUB1 :INT 21HCSIP3.1 3.1 概概 述述操作数可能的存放方式操作数可能的存放方式:直接包含在指令中直接包含在指令中 立即数立即数 立即寻址立即寻址包含在某个寄存器中包含在某个寄存器中 寄存器操作数寄存器操作数 寄存器寻址寄存器寻址在内存中在内存中 存储器操
2、作数存储器操作数(内存操作数)(内存操作数)存储器寻址存储器寻址u还可以在外设(接口)I/O寻址MOV BX,123MOV AX,2000H MOV AX,BXIN AX,12H 3.2.1 3.2.1 地址地址n段基址n有效地址(EA)/偏移地址/偏置(OFFSET)n位移量(DISP)段寄存器位移量=02H1000段基址10000H11000H物理地址物理地址11002H有效地址EA=1000HEA=1002HMOV AX,1000HMOV AX,2BX(BX)=1000H一、立即寻址方式n操作数直接存放在指令中,紧跟在操作码之后。n这种操作数被称为立即数 imm它可以是8位数值i8(00
3、HFFH)也可以是16位数值i16(0000HFFFFH)n立即寻址方式常用来给寄存器、存储器赋值操作数指令立即寻址指令MOV AX,34EAH ;AX34EAHMOV byte ptr1000H,20;1000H20MOV X,20 ;X20二、寄存器寻址方式 操作数存放在CPU的内部寄存器reg中,可以是:8位寄存器r8:AH、AL、BH、BL、CH、CL、DH、DL16位寄存器r16:AX、BX、CX、DX、SI、DI、BP、SP段寄存器seg:DS、SS、ES寄存器号寄存器号指令操作数操作数寄存器MOV AL,BXMOV AX,BL错误用法错误用法n存储器寻址方式操作数在存储器中。指令
4、中给出操作数在主存中的地址信息(偏移地址,称之为有效地址EA),而段地址在默认的或用段超越前缀指定的段寄存器中。物理地址段地址EA(有效地址)段地址(段寄存器)16 EA=偏移地址/基址变址位移量 表3.1 存储器存取时约定段和可修改段的基数(P50)存储器存取方式约定段可超越使用的段偏移量取指令CS无IP堆栈操作SS无SP源字符串DSCS,ES,SSSI目的字符串ES无DI用BP作基址SSCS,ES,DS有效地址通用数据读写(除BP)DSCS,ES,SS有效地址三、直接寻址方式三、直接寻址方式n有效地址在指令中直接给出有效地址在指令中直接给出n默认的段地址在默认的段地址在DSDS段寄存器,可
5、使用段超越前段寄存器,可使用段超越前缀改变。缀改变。EA指令操作数操作数存储器段基址段基址段寄存器 MOV AX,2000H;AX(DS:2000H);指令代码:A10020 MOV AX,ES:2000H;AX(ES:2000H);指令代码:26A10020直接寻址指令直接寻址指令错误用法DATA1 DB 1,2DATA2 DW 1,2 :MOV AL,DATA2MOV AX,DATA1 MOV 1002H,1000H :10000H :DATA111000H11001HDATA211002H11003H11004H11005H :11006HDS四、寄存器间接寻址方式n有效地址存放在基址寄
6、存器BX、BP或变址寄存器SI、DI中。n默认的段地址在DS段寄存器,可使用段超越前缀改变(如果使用BP,则默认的段地址在SS段寄存器)。EA寄存器操作数操作数存储器段基址段基址段寄存器寄存器号寄存器号指令错误用法:MOV AX,CXMOV BX,AXMOV AX,BLMOV BX,1五、基址/变址(相对)寻址方式有效地址是寄存器内容与有符号8位或16位位移量之和,寄存器可以是BX、BP或SI、DI。有效地址BX/BP/SI/DI8/16位位移量段地址对应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是SS;可用段超越前缀改变。地址地址寄存器操作数操作数存储器段基址段基址段寄存器指令寄存
7、器号寄存器号位移量位移量EA基址/变址寻址指令MOV CX,36HBX ;CX(DS:BX36H)MOV CX,BX+36HMOV AX,8BX;AX(DS:BX8)MOV-20BP,AL;SS:BP-20(AL)功能执行相对基址变址寻址指令相对基址变址寻址指令MOV AX,BX+SI+06H;AX(DS:BX+SI+06H)MOV AX,06HBXSI ;物理地址(实地址、绝对地址)0地址逻辑地址(虚地址、相对地址、EA)0地址物理地址逻辑地址00000H0000:0000H00001H0000:0001H10000H用户区11000:0000H10001H1000:0001H20000H用
8、户区22000:0000H20001H2000:0001H地 址 总 结寻址类型寻址类型 指令指令 源源 地址生成地址生成 目标目标 寄存器寻址寄存器寻址 MOV AX,BX寄存器寄存器BX寄存器寄存器AX数据数据3AH寄存器寄存器CH寄存器寄存器CL存储器地址存储器地址10300H寄存器寄存器间接寻址间接寻址 MOV BX,CL立即寻址立即寻址 MOV CH,3AHDS10HBX10000H0300H设:设:BX=0300H,SI=0200H,ARRAY=1000H,DS=1000H寄存器寄存器CL存储器地址存储器地址11234H直接寻址直接寻址 MOV 1234H,CLDS10HDISP1
9、0000H1234H 寻址类型寻址类型 指令指令 源源 地址生成地址生成 目标目标基址加变址寻址基址加变址寻址 MOV BX+SI,BP寄存器寄存器BP存储器地存储器地址址10500H寄存器寄存器DX存储器地存储器地址址11500H(相对相对)基址加变址寻址基址加变址寻址 MOV ARRAYBX+SI,DX DS10HBXSI10000H0300H0200H DS10HARRAYBX+SI10000H1000H0300H+0200H设:设:BX=0300H,SI=0200H,ARRAY=1000H,DS=1000H存储器地存储器地址址10304H寄存器寄存器CL基址基址/变址寻址变址寻址 MO
10、V CL,BX+4(寄存器相对寻址寄存器相对寻址)DS10HBX4 10000H0300H4n串操作指令的操作数是主存中连续存放的数据串(String)即在连续的主存区域中,字节或字的序列n串操作指令的操作对象是以字(W)为单位的字串,或是以字节(B)为单位的字节串六、串寻址串寻址方式源操作数用寄存器SI寻址,默认在数据段DS中,但允许段超越:DS:SI目的操作数用寄存器DI寻址,默认在附加段ES中,不允许段超越:ES:DI每执行一次串操作指令,SI和DI将自动修改:1(对于字节串)或2(对于字串)执行指令CLD指令后,DF=0,地址指针增1或2执行指令STD指令后,DF=1,地址指针减1或2
11、串操作的准备源操作数用寄存器SI寻址,默认在数据段DS中,但允许段超越:DS:SI目的操作数用寄存器DI寻址,默认在附加段ES中,不允许段超越:ES:DI置方向标志,DF=0,增地址方向;DF=1,减地址方向执行STD指令后,DF=1执行CLD指令,DF=0字符串长度(数据个数)置CX8086通过输入输出指令与外设进行数据交换;呈现给程序员的外设是端口(Port)即I/O地址8086用于寻址外设端口的地址线为16条,端口最多为21665536(64K)个,端口号为0000HFFFFH每个端口用于传送一个字节的外设数据端口七、I/O端口寻址输入输出寻址方式8086的端口有64K个,不分段,有两种
12、寻址方式v直接寻址直接寻址:只用于寻址00HFFH前256个端口,操作数i8表示端口号(长指令格式)(长指令格式)v间接寻址:间接寻址:可用于寻址全部64K个端口,DX寄存器的内容是端口号(短指令格式)(短指令格式)对大于FFH的端口只能采用间接寻址方式长指令格式:IN 累加器,端口号 (直接寻址)短指令格式:IN 累加器,DX (间接寻址)n输入指令输入指令(INPUT)长指令格式:OUT 端口号,累加器 (直接寻址)短指令格式:OUT DX,累加器 (间接寻址)n输出指令输出指令(OUTPUT)3.3 80863.3 8086的指令格式及数据类型的指令格式及数据类型指令的机器码表示方法机器
13、语言:计算机唯一能识别的语言 10111111 00111010 11110000n汇编语言汇编语言面向机器的程序设计语言。是一种用符号表示的低级程序语言,通常为特定计算机或计算机系列设计的,与机器语言很接近。MOV DI,0F03AH 助记符 目 源操作码操作数1000101 11 1100011 操作码 D WMODREGR/M 送至SP寄存器 字寄存器SP BX MOV SP,BX 表3.2 8086的编码方式(52页)指令中的操作数n无操作数n单操作数n双操作数指令中的数据类型n无符号数n带符号数nASCII码nBCD数(压缩、非压缩)3.4 80863.4 8086指令系统指令系统1
14、、数据传送指令2、算术运算指令3、逻辑运算和移位指令4、字符串指令5、程序控制指令6、处理器控制指令一、数据传送指令数据传送是计算机中最基本、最重要的一种操作传送指令也是最常使用的一类指令传送指令把数据从一个位置传送到另一个位置除标志寄存器传送指令外,均不影响标志位1、通用数据传送指令 (1)MOV传送指令 指令格式:MOV 目标,源 指令功能:目标 (源)立即数立即数段寄存器段寄存器CS DS ES SSCS DS ES SS通用寄存器通用寄存器AX BX CX DXAX BX CX DXBP SP SI DIBP SP SI DI存存储储器器注注 意意1)源操作数可以是源操作数可以是8/1
15、6位的立即数、寄存器操作数、位的立即数、寄存器操作数、内存操作数。目标操作数不允许为立即数,其余同源内存操作数。目标操作数不允许为立即数,其余同源操作数。源、目不能同时为内存操作数。操作数。源、目不能同时为内存操作数。2)源、目操作数类型必须匹配源、目操作数类型必须匹配3)不能向段寄存器写立即数不能向段寄存器写立即数4)以以CS、IP为目标的一切传送指令都是非法的为目标的一切传送指令都是非法的立即数传送立即数传送mov al,4;al4,字节传送mov cx,0ffh;cx00ffh,字传送mov si,200h;si0200h,字传送mov byte ptr si,0ah;byte ptr
16、说明是字节操作mov word ptr si+2,0bh;word ptr 说明是字操作寄存器传送寄存器传送mov ax,bxmov ax,bx;axbxaxbx,字传送,字传送mov ah,almov ah,al;ahalahal,字节传送,字节传送mov ds,axmov ds,ax;dsaxdsax,字传送,字传送mov si,almov si,al;sialsial,字节传送,字节传送存储器传送存储器传送mov al,bxmov al,bxmov dx,bpmov dx,bp;dxss:bpdxss:bpmov es,simov es,si;esds:siesds:si段寄存器传送段寄
17、存器传送mov si,dsmov si,dsmov ax,esmov ax,es;axesaxesmov ds,axmov ds,ax;dsaxesdsaxes注 意两个操作数的类型不一致例如源操作数是字节,而目的操作数是字;或相反两个操作数不能都是存储器传送指令很灵活,但主存之间的直接传送却不允许段寄存器的操作有一些限制段寄存器属专用寄存器,对他们的操作有限制两个操作数的类型要一致绝大多数双操作数指令,除非特别说明,目的操作数与源操作数必须类型一致,否则为非法指令MOV AL,050AH;非法指令:050Ah为字,而AL为字节寄存器有明确的字节或字类型,有寄存器参与的指令其操作数类型就是寄存
18、器的类型对于存储器单元与立即数同时作为操作数的情况,必须显式指明;byte ptr指示字节类型,word ptr指示字类型两个操作数不能都是存储器8086指令系统不允许两个操作数都是存储单元(除串操作指令),要实现这种传送,可通过寄存器间接实现Mov buffer1,buffer2mov ax,buffer1mov ax,buffer1;axbuffer1(将buffer1内容送ax)mov buffer2,axmov buffer2,ax;buffer2ax;这里buffer1和buffer2是两个字变量;实际表示直接寻址方式要小心段寄存器的操作不允许立即数传送给段寄存器MOV DS,100
19、H MOV AX,100H MOV DS,AX;非法指令:立即数不能传送段寄存器不允许直接改变CS值MOV CS,AX;不允许使用的指令不允许段寄存器之间的直接数据传送MOV DS,ES MOV AX,ES MOV DS,AX;非法指令:不允许段寄存器间传送(2)PUSH 进栈操作指令进栈操作指令指令格式指令格式:PUSH 源操作数源操作数指令功能指令功能:SP(SP)2 (SP)+1,(SP)(源操作数源操作数)堆栈(Stack)SP栈底栈顶12H34H56H78HSSMOV AX,1234HMOV BX,5678HPUSH AXPUSH BXAXBX12 3456 78汇编语句汇编语句 例
20、子例子 说明说明PUSH reg16 PUSH BX 16位寄存器位寄存器PUSH mem16 PUSH WORD PTRBX 16位寻址方式位寻址方式PUSH seg PUSH DS 任何段寄存器任何段寄存器例:现场保护恢复例:现场保护恢复push ax;进入子程序后push bxpush ds.pop ds;返回主程序前pop bxpop ax 指令格式:指令格式:POP 目标目标指令功能:目标指令功能:目标 (SP)+1,SP)SP (SP)+2(3)POP 出栈操作指令出栈操作指令堆栈(Stack)SP栈底栈顶12H34H56H78HSSPOP BXPOP AX56H78H12H34H
21、 POP指令指令汇编语句汇编语句 例子例子 说明说明POP reg16 POP CX 16位寄存器位寄存器POP mem16 POP WORD PTRBX+1 16位存储器地址位存储器地址POP seg POP DS 任何段寄存器任何段寄存器(4)XCHG 交换指令指令格式:指令格式:XCHG 目标目标,源源 指令功能:(目标)指令功能:(目标)(源源)将寄存器的内容与任何其他寄存器或存储单元将寄存器的内容与任何其他寄存器或存储单元的内容交换。的内容交换。例:寄存器间交换例:寄存器间交换mov ax,1234h ;ax=1234hmov bx,5678h ;bx=5678hxchg ax,bx
22、 ;ax=5678h,bx=1234hxchg ah,al ;ax=7856h例:寄存器与存储器交换例:寄存器与存储器交换xchg ax,2000hxchg ax,2000h ;字交换;字交换;等同于;等同于 xchg 2000h,axxchg 2000h,axxchg al,2000h xchg al,2000h ;字节交换;字节交换;等同于;等同于 xchg 2000h,alxchg 2000h,al 注意:注意:xchg al,10(5)XLAT 表转换指令表转换指令指令格式:指令格式:XLAT 转换表转换表 或:或:XLAT指令功能指令功能:AL (BX)+(AL)指令把指令把AL寄存
23、器中的内容转换成存储在存寄存器中的内容转换成存储在存储器中的数字。通常采用直接查表技术,储器中的数字。通常采用直接查表技术,实现将一个代码转换为另一个代码。实现将一个代码转换为另一个代码。TABLE DB 30H,31H,32H,33H,34H,35H.36H,37H,38H DB 39H,A,B,C,D,E,F MOV AL,15 ;AL 15 MOV BX,OFFSET TABLE ;BX 表格首地址表格首地址 XLAT TABLE ;得到得到(AL)F AL(BX)+(AL)AL(TABLE+15)ALF 2、输入输出指令8086通过输入输出指令与外设进行数据交换;呈现给程序员的外设是端
24、口(Port)即I/O地址8086用于寻址外设端口的地址线为16条,端口最多为21665536(64K)个,端口号为0000HFFFFH每个端口用于传送一个字节的外设数据输入输出寻址方式8086的端口有64K个,不分段,有两种寻址方式v直接寻址直接寻址:只用于寻址00HFFH前256个端口,操作数i8表示端口号(长指令格式)(长指令格式)v间接寻址:间接寻址:可用于寻址全部64K个端口,DX寄存器的内容是端口号(短指令格式)(短指令格式)对大于FFH的端口只能采用间接寻址方式长指令格式:IN 累加器,端口号 指令功能:AL(端口号)字节 AX(端口号)字短指令格式:IN 累加器,DX 指令功能
25、:AL(DX)字节 AX(DX)字(1)输入指令输入指令(INPUT)例:输入字量例:输入字量;直接寻址,字节量输入in al,21hmov ah,alin al,20h;直接寻址,字量输入in ax,20h;间接寻址,字量输入mov dx,20hin ax,dx长指令格式:OUT 端口号,累加器 指令功能:端口号 (AL);字节 端口号 (AX);字短指令格式:OUT DX,累加器 指令功能:(DX)(AL);字节 (DX)(AX);字(2)输出指令输出指令(OUTPUT)例:输出字节量例:输出字节量;间接寻址,字节量输出mov dx,3fchmov al,80hout dx,al注意:注意
26、:IN AL,123H MOV DX,123H IN AL,DXIN BL,10H3.地址传送指令地址传送指令将存储器单元的逻辑地址送至指定的寄存器有效地址传送指令 LEA指针传送指令 LDS和LES注意,不是获取存储器单元的内容(1)LEA 取有效地址传送指令指令格式:LEA 寄存器16,源指令功能:寄存器16源EA将源操作数的有效地址传送至指定的16位寄存器中例:获取有效地址例:获取有效地址mov bx,0400hmov si,3chlea bx,bx+si+0f62h;BX0400h003ch0f62h139EH10000HDATA101H11000H00HMOV BX,DATA1LEA
27、 BX,DATA1MOV BX,OFFSET DATA1MOV SI,1000HLEA BX,SIMOV BX,OFFSET SI n指令格式:LDS 寄存器16,源n指令功能:寄存器16(源)DS(源+2)nLDS指令将主存中源指定的字送至寄存器,并将源的下一字送DS寄存器(2)LDS 将双字指针送到寄存器和DS指令 n指令格式:LES 寄存器16,源n指令功能:寄存器16(源)ES(源+2)nLES指令将主存中源指定的字送至寄存器,并将源的下一字送ES寄存器(3)LES 将双字指针送到寄存器和ES指令 例:地址指针传送例:地址指针传送mov word ptr 3060h,0100hmov
28、word ptr 3062h,1450hles di,3060h;(es)=1450h,(di)=0100hlds si,3060h;(ds)=1450h,(si)=0100h3060H00H3061H01H3062H50H3063H14H4.标志传送指令标志寄存器传送指令用来传送标志寄存器FLAGS的内容,方便进行对各个标志位的直接操作有2对4条指令低8位传送:LAHF和SAHF16位传送:PUSHF和POPF指令格式:LAHF 指令功能:AH(FLAGS的低字节)LAHF指令将标志寄存器的低字节送寄存器AHSF/ZF/AF/PF/CF状态标志位分别送入AH的第7/6/4/2/0位,而AH的
29、第5/3/1位任意(1)LAHF 标志低字节送标志低字节送AH指令指令指令格式:SAHF 指令功能:FLAGS的低字节(AH)SAHF将AH寄存器内容送FLAGS的低字节用AH的第7/6/4/2/0位相应设置SF/ZF/AF/PF/CF标志(2)SAHF AH送标志寄存器送标志寄存器(3)PUSHF 标志进栈指令标志进栈指令指令格式:PUSHF指令功能:SP(SP)2 (SP)+1,(SP)(FLAGS)(4)POPF 标志出栈指令标志出栈指令指令格式:POPF指令功能:FLAGS(SP)+1,(SP)SP(SP)2例:置位单步标志例:置位单步标志pushf;保存全部标志到堆栈pop ax;从
30、堆栈中取出全部标志or ax,0100h;设置D8=TF=1,;ax其他位不变push ax;将ax压入堆栈popf;FLAGSAX;将堆栈内容取到标志寄存器二、二、算术运算类指令算术运算类指令算术运算类指令处理的数据:算术运算类指令处理的数据:无符号二进制整数无符号二进制整数 带符号二进制整数带符号二进制整数 无符号压缩十进制整数无符号压缩十进制整数 无符号非压缩十进制整数无符号非压缩十进制整数要注意标志位的变化要注意标志位的变化 1.加法指令(1)ADD 加法指令n指令格式:ADD 目标,源n指令功能:目标(目标)(源)例:加法运算例:加法运算mov al,0fbhmov al,0fbh;
31、al=0fbhal=0fbhadd al,07hadd al,07h;al=02hal=02hmov word ptr 200h,4652h mov word ptr 200h,4652h;200h,201h=4652h200h,201h=4652hmov bx,1fehmov bx,1feh;bx=1fehbx=1fehadd al,bladd al,bl;al=00hal=00hadd word ptr bx+2,0f0f0hadd word ptr bx+2,0f0f0h;200h,201h=3742h200h,201h=3742h错误:ADD AL,312ADD AX,BLADD 10
32、00H,BXADD DATA1,DATA2 (2)ADC 带进位加法指令带进位加法指令 指令格式:ADC 目标,源指令功能:目标(目标)(源)CFADC指令将源与目的操作数相加,再加上进位CF标志,结果送到目的操作数ADC指令按状态标志的定义相应设置ADC指令主要与ADD配合,实现多精度加法运算例:双字加法例:双字加法mov ax,4652h;ax=4652hadd ax,0f0f0h;ax=3742h,CF=1mov dx,0234h;dx=0234hadc dx,0f0f0h;dx=f325h,CF=0 0234 4652H F0F0 F0F0H F325 3742HDX AX(3)INC
33、 增量指令指令格式:INC 目标指令功能:目标(目标)1INC指令对操作数加1(增量)INC指令不影响进位CF标志,按定义设置其它状态标志inc bxinc bx inc byte ptr bx(4)AAA 加法ASCII(非压缩BCD)调整指令指令格式:AAA指令功能:AL把AL中的和调整为非压缩BCD格式 AH(AH)+调整产生的进位值使用AAA指令前,应先执行以AL为目的操作数的加法指令AAA指令在调整中产生了进位,则AH要加上进位,同时CF=AF=1,否则CF=AF=0;对其他标志无定义 AH AL ADD AL,BL “9”00111001 “5”AAA 01101110 +0000
34、0110 00000000 01110100 +00000001 00001111 00000001 00000100 CF(AF)AH AL AFADD AL,BL “9”00111001 “9”AAA 01110010 00000000 01111000 +00000001 00001111 00000001 00001000 CF(AF)例:非压缩例:非压缩BCD加加mov ax,0608hmov ax,0608h;ax=0608hax=0608h,非压缩非压缩BCDBCD码表示真值码表示真值6868mov bl,09h mov bl,09h ;bl=09hbl=09h,非压缩,非压缩B
35、CDBCD码表示真值码表示真值9 9add al,bl add al,bl ;二进制加法:;二进制加法:al=08h+09h=11hal=08h+09h=11hAaa Aaa ;十进制调整:;十进制调整:ax=0707hax=0707h;实现非压缩;实现非压缩BCDBCD码加法:码加法:68689 97777(5)DAA 加法十进制(压缩BCD)调整指令指令格式:DAA指令功能:AL把AL中的和调整为压缩BCD格式 AL ADD AL,BL 38 00111000 15 DAA 01001101 53 01010011 CF0 AL AFADD AL,BL 88 10001000 49 DAA
36、 11010001 11010111 +01100000 137 1 CF例:压缩例:压缩BCD加法加法mov al,68h;al=68h,压缩BCD码表示真值68mov bl,28h;bl=28h,压缩BCD码表示真值28add al,bl ;二进制加法:al=68h+28h=90hdaa;十进制调整:al=96h;实现压缩BCD码加法:6828962.减法指令(1)SUB 减法指令(subtract)指令格式:SUB 目标,源指令功能:目标(目标)(源)例:减法运算例:减法运算mov al,0fbh;al=0fbhsub al,07h;al=0f4h,CF0mov word ptr 200
37、h,4652h;200h=4652hmov bx,1feh;bx=01fehsub al,bl;al=0f6hsub word ptr bx+2,0f0f0h;200h=5562h,CF1(2)SBB 带借位减法指令指令格式:SBB 目标,源指令功能:目标(目标)(源)CFSBB指令将目的操作数减去源操作数,再减去借位CF(进位),结果送到目的操作数。SBB指令按照定义相应设置状态标志SBB指令主要与SUB配合,实现多精度减法运算例:双字减法例:双字减法mov ax,4652h;ax=4652hsub ax,0f0f0h;ax=5562h,CF=1mov dx,0234h;dx=0234hsb
38、b dx,0f0f0h;dx=1143h,CF=1 02344652H -F0F0F0F0H 11435562H(3)DEC 减量指令指令格式:DEC 目标指令功能:目标(目标)1DEC指令不影响进位CF标志,按定义设置其他状态标志dec cxdec word ptr si INC指令和指令和DEC指令都是单操作数指令指令都是单操作数指令 主要用于对计数器和地址指针的调整主要用于对计数器和地址指针的调整 MOV CL,100L1:DEC CL JNZ L1(4)NEG 求补指令指令格式:NEG 目标指令功能:目标 0(目标)NEG指令对操作数执行求补运算:用零减去操作数,然后结果返回操作数求补
39、运算也可以表达成:将操作数按位取反后加1NEG指令对标志的影响与用零作减法的SUB指令一样例:求补运算例:求补运算mov ax,0ff64hneg al;ax=ff9ch,OF=0、SF=1、ZF=0、PF=1、CF=1sub al,9dh;ax=ffffh,OF=0、SF=1、ZF=0、PF=1、CF=1neg ax;ax=0001h,OF=0、SF=0、ZF=0、PF=0、CF=1dec al;ax=0000h,OF=0、SF=0、ZF=1、PF=1、CF=1neg ax;ax=0000h,OF=0、SF=0、ZF=1、PF=1、CF=0(5)CMP 比较指令(compare)指令格式:C
40、MP 目标,源指令功能:(目标)(源)CMP指令将目的操作数减去源操作数,按照定义相应设置状态标志CMP指令执行的功能与SUB指令,但结果不回送目的操作数例:比较例:比较AL与与100 cmp al,100 ;al-100 jb below ;al除数的绝对值;或字运算时,被除数的高16位绝对值除数的绝对值时,商就会溢出。mov al,8 mov bl,2 div bl (AH)=?DIV AX,BLDIV 10(3)CBW 字节转换为字指令指令格式:CBW;AL的符号扩展至AH指令功能:如AL的最高有效位是0,则AH00 AL的最高有效位为1,则AHFFH。AL不变(4)CWD 字转换成双字
41、指令指令格式:CWD;AX的符号扩展至DX指令功能;如AX的最高有效位是0,则DX0000H AX的最高有效位为1,则DXFFFFH。AX不变符号扩展指令常用于获得倍长的数据符号扩展指令常用于获得倍长的数据例:符号扩展例:符号扩展mov al,80h;al=80hcbw;ax=ff80hadd al,255;al=7fhcbw;ax=007fh 利利用用符符号号扩扩展展指指令令得得到到除除法法指指令令所所需需要要的的倍倍长长于于除除数的被除数数的被除数 对对无无符符号号数数除除法法应应该该采采用用直直接接使使高高8位位或或高高16位位清清0的方法,获得倍长的被除数的方法,获得倍长的被除数例:例
42、:(V V(XYXYZ Z540540)XXmov ax,xImul Y;DX.AXXYmov cx,axmov bx,dx;BX.CXXYmov ax,Zcwdadd cx,axAdc bx,dx;BX.CXBX.CXXYXYZ Zsub cx,540sbb bx,0 ;BX.CXXYZ540mov ax,Vcwdsub ax,cxsbb dx,bx ;DX.AXV(XYZ540)idiv X ;DX.AX(V V(XYXYZ Z540540)XX指令格式:AAD指令功能:AL(AH)10(AL)AH 0 AAD指令放在字节除DIV之前,先将AX中的2位非压缩BCD码的被除数调整为二进制数A
43、AD指令根据结果设置SF、ZF和PF,但对OF、CF和AF无定义(5)AAD 除法的ASCII调整指令AHAL10例:非压缩例:非压缩BCD除调整除调整mov ax,0608h;ax=0608h,非压缩BCD码表示真值68mov bl,09h ;bl=09h,非压缩BCD码表示真值9aad ;BCD码调整(ax)=680044hdiv bl;除法运算:商al=07h,余数ah=05h;实现非压缩BCD码初法:6897(余5)3.4.3 位操作指令逻辑运算和移位指令按位进行操作逻辑运算移位循环移位算术运算算术数据,有符号算术数据,有符号/无符号无符号有进位有进位/借位借位结果结果逻辑数据,无符号
44、逻辑数据,无符号无进位无进位/借位,按位运算借位,按位运算结果:真、假结果:真、假逻辑运算一、逻辑运算指令位操作类指令以二进制位为基本单位进行数据的操作,注意这些指令对标志位的影响1、逻辑运算指令NOT AND OR XOR TEST2、移位指令SHL SHR SAR3、循环移位指令ROL ROR RCL RCR(1)NOT 取反(逻辑非)指令指令格式:NOT 目标指令功能:目标目标NOT指令不影响标志位目标操作数不能是立即数n按按位位取取反反,原原来来是是“0”的的位位变变为为“1”;原来是;原来是“1”的位变为的位变为“0”设:(AL)=10101010NOT AL;(AL)=010101
45、01NOT AXNOT BXNOT BYTE PTR BX NOT WORD PTR BXNOT 10101010B(2)AND 逻辑与指令指令格式:AND 目标,源指令功能:目标(目标)(源)对两个操作数执行逻辑与运算,结果送到目的操作数AND指令设置CF=OF=0,根据结果设置SF、ZF和PF状态,而对AF未定义n只只有有相相“与与”的的两两位位都都是是1,结结果果才才是是1;否否则则,“与与”的结果为的结果为0 1 0 01 0 1 0 1 1 0 00 1 0 0 1 1 0 00 0 0 0 1AND AX,0F0FHAND AL,7FH(3)OR 逻辑或指令指令格式:OR 目标,源
46、指令功能:目标(目标)v 源对两个操作数执行逻辑或运算,结果送到目的操作数OR指令设置CF=OF=0,根据结果设置SF、ZF和PF状态,而对AF未定义n只只要要相相“或或”的的两两位位有有一一位位是是1,结结果就是果就是1;否则,结果为;否则,结果为0 1 0 10 0 1 0 1v 1 0 0 01 0 0 1 1 0 1 01 1 0 1OR AL,80HOR AL,30H正逻辑的“或”,负逻辑的“与”(4)XOR 逻辑异或指令指令格式:XOR 目标,源指令功能:目标目标/源XOR指令设置CF=OF=0,根据结果设置SF、ZF和PF状态,而对AF未定义n只只有有相相“异异或或”的的两两位位
47、不不相相同同,结结果果才才是是1;否则,结果为;否则,结果为0 1 0 1 0 1 0 1 1 0 0 1 0 0 1 0 0 1 1 1 0 0XOR AL,80H例:逻辑运算例:逻辑运算mov al,45h;逻辑与 al=01h 01000101and al,31h;CF=OF=0,SF=0、ZF=0、PF=0 00000001mov al,45h;逻辑或 al=75h 01000101or al,31h;CF=OF=0,SF=0、ZF=0、PF=0 01110101mov al,45h;逻辑异或 al=74h 01000101xor al,31h;CF=OF=0,SF=0、ZF=0、PF
48、=1 01110100mov al,45h;逻辑非 al=0bah 01000101not al;标志不变 逻辑指令应用逻辑指令应用;AND指令可用于复位某些位(同0相与),不影响其他位:将BL中D3和D0位清0,其他位不变and bl,11110110B;OR指令可用于置位某些位(同1相或),不影响其他位:将BL中D3和D0位置1,其他位不变or bl,00001001B;XOR指令可用于求反某些位(同1相异或),不影响其他位:将BL中D3和D0位求反,其他不变xor bl,00001001B(5)TEST 测试指令指令格式:TEST 目标,源指令功能:(目标)(源)对两个操作数执行逻辑与运
49、算,结果不回送到目的操作数AND指令设置CF=OF=0,根据结果设置SF、ZF和PF状态,而对AF未定义n 只只有有相相“与与”的的两两位位都都是是1,结结果果才才是是1;否否则,则,“与与”的结果为的结果为0例:测试为例:测试为0或或1test al,01h;测试AL的最低位D0jnz there;标志ZF=0,即D0=1;则程序转移到there.;否则ZF=1,即D0=0,顺序执行there:.n TEST指指令令通通常常用用于于检检测测一一些些条条件件是是否否满满足足,但又不希望改变原操作数的情况但又不希望改变原操作数的情况二、移位指令将操作数移动一位或多位,分成逻辑移位和算术移位,分别
50、具有左移或右移操作。(2 2)SHL SHL 逻辑左移指令逻辑左移指令 指令格式:指令格式:SHL SHL 目标目标,计数值计数值指令功能;逻辑左移,最高位进入指令功能;逻辑左移,最高位进入CFCF,最低位补,最低位补0 0(1 1)SAL SAL 算术左移指令算术左移指令指令格式:指令格式:SALSAL 目标目标,计数值计数值 1/CL1/CL指令功能:算术左移,最高位进入指令功能:算术左移,最高位进入CFCF,最低位补,最低位补0 0CF MSBLSB 0操作数算术/逻辑左移 SAL/SHL(3)SHR (3)SHR 逻辑右移指令逻辑右移指令指令格式:指令格式:SHR SHR 目标目标,计