80 x86的指令系统和寻址方式课件

上传人:94****0 文档编号:241294840 上传时间:2024-06-16 格式:PPT 页数:173 大小:1.86MB
返回 下载 相关 举报
80 x86的指令系统和寻址方式课件_第1页
第1页 / 共173页
80 x86的指令系统和寻址方式课件_第2页
第2页 / 共173页
80 x86的指令系统和寻址方式课件_第3页
第3页 / 共173页
点击查看更多>>
资源描述
第第3章章 80 x86的指令系统和寻址方式的指令系统和寻址方式 3.1 80 x86的寻址方式 3.2 80 x86的指令系统 3.3 80 x86的机器语言指令概况第3章 80 x86的指令系统和寻址方式1基本概念指令的构成w指令由操作码和操作数两部分组成w操作码说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分w操作数是指令执行的参与者,即各种操作的对象w有些指令不需要操作数,通常的指令都有一个或两个操作数,也有个别指令有3个甚至4个操作数基本概念指令的构成指令由操作码和操作数两部分组成2基本概念与数据有关的寻址方式w在指令中为了取得操作数地址所使用的方式w寻找操作数的过程就是操作数的寻址w不同的指令系统都规定一些寻址方式供编程时选用w操作数采取哪一种寻址方式,会影响机器运行的速度和效率基本概念与数据有关的寻址方式在指令中为了取得操作数地址所使3一个简单的汇编指令w传送指令 格式:MOV DST,SRC 操作:(DST)(SRC)例:MOV AX,BX 执行指令前:(AX)=1234H,(BX)=4321H 执行指令后:(AX)=4321H,(BX)=4321H一个简单的汇编指令传送指令4操作数的类型w寄存器(R):字节、字、双字w存储单元(M):字节、字、双字w立即数(imm):字节、字、双字操作数的类型寄存器(R):字节、字、双字5 3.180 x86的寻址方式的寻址方式一、与数据有关的寻址方式一、与数据有关的寻址方式二、与转移地址有关的寻址方式二、与转移地址有关的寻址方式1.立即(数)寻址2.寄存器寻址3.直接寻址4.寄存器间接寻址5.寄存器相对寻址6.基址变址寻址7.相对基址变址寻址8.比例变址寻址方式9.基址比例变址寻址方式10.相对基址比例变址寻址方式 3.180 x86的寻址方式一、与数据有关的寻址方式二、61.立即(数)寻址w操作数直接包含在指令中,紧跟在操作码之后的寻址方式,称为立即寻址方式,这种操作数被称为立即数(imm)n它可以是8位数值i8(00HFFH)n也可以是16位数值i16(0000HFFFFH)w立即数寻址方式常用来给R/M赋值w立即数只能用于源操作数1.立即(数)寻址操作数直接包含在指令中,紧跟在操作码之后的7立即寻址例3.1 MOV AL,9 ;(AL)=09H例3.2 MOV AX,3064H;(AX)=3064H 立即寻址例3.1 MOV AL,9 ;(AL)=08立即数寻址的执行立即数寻址的执行92.寄存器寻址w操作数存放在CPU的内部寄存器(reg)中,这些寄存器可以是:n8位寄存器:AH、AL、BH、BL、CH、CL、DH、DLn16位寄存器:AX、BX、CX、DX、SI、DI、BP、SPn4个段寄存器seg:CS、DS、SS、ES2.寄存器寻址操作数存放在CPU的内部寄存器(reg)中,10寄存器寻址wMOV AX,BX ;如指令执行前(AX)=1234H,(BX)=5678H ;则指令执行后(AX)=5678H,(BX)保持不变。注意:注意:源寄存器和目的寄存器的位数必须一致。MOV AX,BL ()寄存器寻址MOV AX,BX11w这里先引入有效地址EA(Effective Address)的概念:在8086里,把操作数的偏移地址称为有效地址,下面五种计算EA的方法体现了五种寻址方式。这里先引入有效地址EA(Effective Address)123、直接寻址方式(Direct addressing)w在这种寻址方式中,操作数存放在存储单元中,而这个存储单元的有效地址就在指令的操作码之后 3、直接寻址方式(Direct addressing)在这13直接寻址方式wMOV AX,2000H 如果(DS)=3000H,则执行情况如下图所示,最后的执行结果为(AX)=3050H。直接寻址方式MOV AX,2000H14直接寻址方式w跨越段前缀 MOV AX,2000h MOV AX,ES:2000hw符号地址 MOV AX,VALUE MOV AX,VALUE MOV AX,ES:VALUE MOV AX,ES:VALUE直接寻址方式跨越段前缀154.寄存器间接寻址w有效地址存放在基址寄存器BX,BP中或变址寄存器SI、DI中w所使用的寄存器相当于地址指针,当修改其内容后可指向不同的存储单元w书写时用括住寄存器名,以区别于寄存器寻址w若以BX、SI、DI间接寻址,操作数默认在数据段;若以BP间接寻址,操作数默认在堆栈段;4.寄存器间接寻址有效地址存放在基址寄存器BX,BP中或变16寄存器间接寻址wMOV AX,BX 如果(DS)=2000H,(BX)=1000H,则物理地址=20000H+1000H=21000H执行情况如下图所示,最后的执行结果为(AX)=50A0H。寄存器间接寻址MOV AX,BX 如果(DS)=17寄存器间接寻址w使用跨越段前缀改变段 MOV AX,SI MOV AX,DS:SI MOV CL,BX MOV CL,DS:BX MOV BL,BP MOV BL,SS:BP MOV AX,ES:SI MOV CL,SS:BX MOV BL,DS:BP寄存器间接寻址使用跨越段前缀改变段185.寄存器相对寻址方式w有效地址是寄存器内容与有符号8位或16位位移量之和,寄存器可以是BX、BP或SI、DI w段地址对应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是SS;可用段超越前缀改变w该方式不仅可以修改指针,还可以修改位移量,对数组操作十分方便5.寄存器相对寻址方式有效地址是寄存器内容与有符号8位或1619寄存器相对寻址方式wMOV AX,COUNTSI(也可表示为MOV AX,COUNT+SI)其中COUNT为16位位移量的符号地址。如果(DS)=3000H,(SI)=2000H,COUNT=3000H,则物理地址=30000H+2000H+3000H=35000H。寄存器相对寻址方式MOV AX,COUNTSI 其中20寄存器相对寻址方式MOV AX,10HSI MOV AX,DS:10HSIMOV AX,ARRAYBX MOV AX,DS:ARRAYBXMOV TABLEDI,AL MOV DS:TABLEDI,ALMOV TABZBP,BL MOV SS:TABZBP,BL 寄存器相对寻址方式21代码段DS数据段操作码24H00H12H34H56H78H9AHMOV AL,0024HSI0024H(SI)=0(AL)=12H(SI)=1(AL)=34H(SI)=2(AL)=56H(SI)=3(AL)=78H(SI)=4(AL)=9AHEA=24H+(SI)(SI)可看作数据起始单元可看作数据起始单元的偏移量的偏移量数组内某元素距数组数组内某元素距数组起始单元的偏移起始单元的偏移通过修改通过修改SI可遍历整个数组可遍历整个数组代码段DS数据段操作码24H00H12H34H56H78H9226.基址变址寻址方式w有效地址由基址寄存器(BX或BP)的内容加上变址寄存器(SI或DI)的内容构成:EABX/BPSI/DIw段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用跨越段前缀改变6.基址变址寻址方式有效地址由基址寄存器(BX或BP)的内容23基址变址寻址方式wMOV AX,BXDI(或写为 MOV AX,BX+DI)如(DS)=2100H,(BX)=0158H,(DI)=10A5H则 EA=0158H+10A5H=11FDH物理地址=21000H+11FDH=221FDH基址变址寻址方式MOV AX,BXDI 如(DS24基址变址寻址方式MOV AX,BXSI MOV AX,DS:BX+SIMOV AX,BPDI MOV AX,SS:BP+DIMOV AX,DS:BPDI MOV AX,DS:BP+DI基址变址寻址方式257.相对基址变址寻址方式w有效地址是基址寄存器(BX/BP)、变址寄存器(SI/DI)与一个8位或16位位移量之和:EABX/BPSI/DI8/16位位移量w该方式中,BX/BP选一,SI/DI选一w段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用跨越段前缀改变7.相对基址变址寻址方式有效地址是基址寄存器(BX/BP)、26相对基址变址寻址方式wMOV AX,MASKBXSI(或 MOV AX,MASKBX+SI,或 MOV AX,MASK+BX+SI)如(DS)=3000H,(BX)=2000H,(SI)=1000H,MASK=0250H,则物理地址=30000H+2000H+1000H+0250H=33250H最后的执行结果是(AX)=1234H。相对基址变址寻址方式MOV AX,MASKBXSI27相对基址变址寻址方式MOV AX,06HBX+SI MOV AX,DS:BX+SI+06HMOV AL,TABBXDI MOVAL,DS:TABLEBXDI MOV TAB1BPSI,DXMOV SS:TAB1BPSI,DX MOV AX,ARRAYBXBP MOV AX,DASIDI 相对基址变址寻址方式28BX、SI分别存放数组的脚标MOV AL,ARRAYBXSIDS数据段ARRAYSIBX二维数组起始单元二维数组起始单元 EA 之间表示相加的关系之间表示相加的关系BXSI BX+SIBX、SI分别存放数组的脚标MOV AL,ARRAYBX2916位/32位寻址有效地址的组成四种成份四种成份16位寻址位寻址32位寻址位寻址位移量0,8,16位0,8,32位基址寄存器BX,BP任何32位通用寄存器变址寄存器SI,DI除ESP以外的32位通用寄存器比例因子无1,2,4,816位/32位寻址有效地址的组成四种成份16位寻址32位寻址308、比例变址寻址方式w操作数的有效地址是变址寄存器的内容乘以指令中指定的比例因子再加上位移量之和 MOV EAX,COUNTESI*4 8、比例变址寻址方式操作数的有效地址是变址寄存器的内容乘以指319、基址比例变址寻址方式w操作数的有效地址是变址寄存器的内容乘以指令中指定的比例因子再加上基址寄存器的内容之和 MOV ECX,EAXEDX*89、基址比例变址寻址方式操作数的有效地址是变址寄存器的内容乘3210、相对基址比例变址寻址方式w操作数的有效地址是变址寄存器的内容乘以指令中指定的比例因子再加上基址寄存器的内容和位移量之和 MOV EAX,TABLEEBPEDI*410、相对基址比例变址寻址方式操作数的有效地址是变址寄存器的3380 x86的指令系统和寻址方式课件3480 x86的指令系统和寻址方式课件3580 x86的指令系统和寻址方式课件36二、与转移地址有关的寻址方式 程序代码亦存放在存储器中,如程序代码亦存放在存储器中,如何控制程序的走向(转移位置的地何控制程序的走向(转移位置的地址址CS:IP)是本部分所涉及的内容,是本部分所涉及的内容,由于它们与具体的指令相关,他们由于它们与具体的指令相关,他们的介绍放在指令中讲解。的介绍放在指令中讲解。二、与转移地址有关的寻址方式 程序代码亦存放在存储器中,如何37 3.3 80 x86的指令系统的指令系统w指令分类指令分类n功能功能n格式格式w数据传送指令数据传送指令w算术运算指令算术运算指令w逻辑指令逻辑指令w串操作指令串操作指令w程序转移指令程序转移指令w处理器控制指令处理器控制指令w双操作数指令(双操作数指令(DEST,SRC)w单操作数指令(单操作数指令(DEST)w无操作数指令(隐含,按约定寻找操作数)无操作数指令(隐含,按约定寻找操作数)3.3 80 x86的指令系统指令分类数据传送指令双操作38一、数据传送指令w数据传送是计算机中最基本、最重要的一种操作w传送指令也是最常使用的一类指令w传送指令把数据从一个位置传送到另一个位置w除标志寄存器传送指令外,均不影响标志位一、数据传送指令数据传送是计算机中最基本、最重要的一种操作391.通用数据传送指令wMOV(move)wMOVSX(move with sign-extend)wMOVZX(move with zero-extend)wPUSHwPOPwPUSHA/PUSHAD(push all registers)wPOPA/POPAD(pop all registers)wXCHG(exchange)1.通用数据传送指令MOV(move)40传送指令MOV(move)w格式:MOVdst,src ;传送指令(move)执行操作:(dst)(src)功能:将源操作数(字节或字)传送到目的地址。w注意:注意:目的操作数dst和源操作数src不能同时用存储器寻址方式,这个限制适用于所有指令;目的操作数dst不能是CS,也不能用立即数方式;目的操作数dst和源操作数src不允许同时为段寄存器;MOV指令不影响标志位。传送指令MOV(move)格式:MOVdst,src 41传送指令MOV数据传送方向示意立即数立即数 段寄存器段寄存器CSCS DS ES SS DS ES SS通用寄存器通用寄存器AX BX CX DXAX BX CX DXBP SP SI DIBP SP SI DI存存储储器器传送指令MOV数据传送方向示意立即数 段寄存器通用寄存42传送指令MOV(move)MOV AL,5MOV AX,BXMOV BP,DSMOV DS,AXMOV BX,AXMOV ES:VAR,12MOV AL,BX MOV DS,1234H MOV CS,AX MOV DS,CS MOV VAR1,VAR2 MOV 12,AL 传送指令MOV(move)MOV AL,5MOV AL,BX43MOVSX带符号扩展w格式:MOVSX DST,SRC 执行操作:(DST)符号扩展(SRC)MOVSX reg1,reg2 MOVSX reg,mem注:源操作数可以8/16位的寄存器或存储单元,目标操作数则必须是16/32位寄存器。例:MOVSX EAX,CL MOVSX EDX,EDIMOVSX带符号扩展格式:MOVSX DST,SRC44MOVZX带零扩展w格式:MOVZX DST,SRC 操作(DST)零扩展(SRC)MOVSX reg1,reg2 MOVSX reg,mem例:MOVZX DX,AL MOVZX EAX,DATAMOVZX带零扩展格式:MOVZX DST,SRC45PUSH进栈w格式:PUSH SRC 操作:16位指令:(SP)(SP)2 (SP)+1,(SP)(SRC)32位指令:(ESP)(ESP)4 (ESP)+3,(ESP)+2,(ESP)+1,(ESP)(SRC)注:源操作数可为R/MPUSH进栈格式:PUSH SRC46POP进栈w格式:POP DST 操作:16位指令:(DST)(SP)+1,(SP)(SP)(SP)+2 32位指令:(DST)(ESP)+3,(ESP)+2,(ESP)+1,(ESP)(ESP)(ESP)4注:源操作数可为R/MPOP进栈格式:POP DST47堆栈操作指令应用举例push ax;进入子程序后push bxpush ds.pop ds;返回主程序前pop bxpop ax堆栈操作指令应用举例push ax;进入子程序后48PUSHA/PUSHAD所有寄存器进栈w格式:PUSHA PUSHAD 操作:所有16位通用寄存器依次进栈 所有32位通用寄存器依次进栈PUSHA/PUSHAD所有寄存器进栈格式:PUSHA49POPA/POPAD所有寄存器出栈w格式:POPA POPAD 操作:16位通用寄存器依次出栈 32位通用寄存器依次出栈POPA/POPAD所有寄存器出栈格式:POPA50XCHG(exchange)交换指令w格式:XCHG DST,SRCw操作:(DST)(SRC)n寄存器与寄存器之间对换数据n寄存器与存储器之间对换数据注注意意:不不能能在在存存储储器器与与存存储储器器之之间对换数据间对换数据XCHG(exchange)交换指令格式:XCHG DST51交换指令交换指令XCHG寄存器间交换寄存器间交换mov ax,1234h;ax=1234hmov bx,5678h;bx=5678hxchg ax,bx;ax=5678h,bx=1234hxchg ah,al;ax=7856hxchg ax,ds:2000h;字交换xchg al,ds:2000h;字节交换交换指令XCHG寄存器间交换mov ax,1234h;a52交换指令XCHG例题分析w例例:(BX)=6F30H,(BP)=0200H,(SI)=0046H,(SS)=2F00H,(2F246H)=4154H,在指令在指令 XCHG BX,BP+SI执行后,相关寄存器和执行后,相关寄存器和存储器的内容是什么?存储器的内容是什么?w分析:源操作数的物理地址=(SS)16+(BP)+(SI)=2F000H+0200H+0046H=2F246Hw指令的功能:(BX)(2F246H)w指令执行结果:(BX)=4154H,(2F246H)=6F30H交换指令XCHG例题分析例:(BX)=6F30H,(B532.累加器专用传送指令wIN(input)输入wOUT(output)输出wXLAT(translate)换码注:这组指令只限于使用累加器EAX,AX或AL传送信息2.累加器专用传送指令IN(input)输入54IN输入指令w长格式:IN AL,PORT(字节)IN AX,PORT(字)IN EAX,PORT(双字)w操作:(AL)(PORT)(字节)(AX)(PORT1,PORT(字)(EAX)(PORT3,PORT+2,PORT1,PORT)(双字)IN输入指令长格式:IN AL,PORT(字节)55IN输入指令w短格式:IN AL,DX(字节)IN AX,DX(字)IN EAX,DX(双字)w操作:(AL)(DX)(字节)(AX)(DX)+1,(DX)(字)(EAX)(DX)+3,(DX)+2,(DX)+1,(DX)双字)IN输入指令短格式:IN AL,DX(字节)56OUT输出指令w长格式:OUT PORT,AL(字节)OUT PORT,AX(字)OUT PORT,EAX(双字)w操作:(AL)(PORT)(字节)(AX)(PORT1,PORT(字)(EAX)(PORT3,PORT+2,PORT1,PORT)(双字)OUT输出指令长格式:OUT PORT,AL(字节)57OUT输出指令w短格式:OUT DX,AL(字节)OUT DX,AX(字)OUT DX,EAX(双字)w操作:(AL)(DX)(字节)(AX)(DX)+1,(DX)(字)(EAX)(DX)+3,(DX)+2,(DX)+1,(DX)双字)OUT输出指令短格式:OUT DX,AL(字节)58w例:在打印机接口中,数据寄存器的端口地址为378H,状态寄存器的端口地址为379H,控制寄存器的端口地址为37AH。获取打印机状态:MOV DX,379H IN AL,DX控制打印机:MOV DX,37AH OUT DX,AL 例:在打印机接口中,数据寄存器的端口地址为378H,状59XLAT换码指令w格式:XLAT OPR 或 XLATw操作:16位指令:(AL)(BX)+(AL)32位指令:(AL)(EBX)+(AL)XLAT换码指令格式:XLAT OPR 或 XLAT60 Mov ax,1234H mov cl,4 mov bx,100hloop1:ror ax,4 Xlat ;显示输出 ;跳转至loop1(BX)(AL)DS数据段30H31H32H78H34H33H(AL)=34H换码指令XLAT例题 Mov ax,1234H(BX)(AL)DS数据段3613.地址传送指令wLEA(load effective address)wLDS(load DS with pointer)wLES(load ES with pointer)wLFS(load FS with pointer)wLGS(load GS with pointer)wLSS(load SS with pointer)3.地址传送指令LEA(load effective add62LEA有效地址传送指令w格式:LEA REG,SRCw操作:(REG)SRC的有效地址n目标操作数可为16位/32位的寄存器,但不能为段寄存器n源操作数可为除立即数和寄存器外的任何一种寻址方式LEA有效地址传送指令格式:LEA REG,SRC63LEA有效地址传送指令w例:(BX)0400H,(SI)003CH (0403CH)1234H MOV BX,BXSI LEA BX,BX+SILEA有效地址传送指令例:(BX)0400H,(SI)064LDS指针送寄存器和段寄存器w格式:LDS REG,SRCw操作:(REG)(SRC)(DS)(SRC2)或 (DS)(SRC4)n目标寄存器不能为段寄存器n源操作数只能为存储器寻址方式LDS指针送寄存器和段寄存器格式:LDS REG,SRC65w例例:(DS)=B000H,(BX)=080AH,(0B080AH)=05AEH,(0B80CH)=4000H,(405AEH)=9634H,在在执行指令执行指令LDS DI,BXMOV AX,DI后,后,(AX)=?BX=080AHB0000H0B080AH40000H34H96HAEH05H00H40H405AEH05AEH0B080CH(DI)=05AEHDI)=05AEH(DS)=4000HDS)=4000Hw结果结果:(DS)=4000H(DI)=05AEH(AX)=9634H例:(DS)=B000H,(BX)=080AH,(0B66标志寄存器传送指令wLAHF(load AH with flags)wSAHF(store AH into flags)wPUSHF/PUSHFD(push the flags or eflags)wPOPF/POPFD(pop the flags or eflags)标志寄存器传送指令LAHF(load AH with fla67wLAHF标志送AH寄存器n格式:LAHFn操作:(AH)(FLAGS的低字节)wSAHF AH送标志寄存器指令n格式:SAHFn操作:(FLAGS的低字节)(AH)LAHF标志送AH寄存器68wPUSHF/PUSHFD标志进栈n格式:PUSH 或 PUSHFDn操作:(SP)(SP)2(SP)+1,(SP)(FLAGS)n操作:(ESP)(ESP)2(ESP)+3,(ESP+2),(ESP)+1,(ESP)(EFLAGS)AND 0FCFFFFHPUSHF/PUSHFD标志进栈69wPOPF/POPFD标志出栈指令n格式:POPF 或 POPFDn操作:(FLAGS)(SP)+1,(SP)(SP)(SP)+2 n操作:(EFLAGS)(ESP)+3,(ESP)+2,(ESP)+1,(ESP)(ESP)(ESP)+4 POPF/POPFD标志出栈指令705.类型转换指令wCBW(convert byte to word)wCWD/CWDE(convert word to double word)wCDQ(convert double to quad)wBSWAP(byte swap)5.类型转换指令CBW(convert byte to w71wCBW字节转换为字n格式:CBWn操作:(AL)符号扩展到AH,形成AX中的字wCWD/CWDE 字转换为双字n格式:CWD 或 CWDEnCWD操作:(AX)符号扩展到DX,形成DX:AX双子nCWDE操作:(AX)符号扩展到EAXCBW字节转换为字72wCDQ双子转换为4字n格式:CDQn操作:(EAX)符号扩展到EDX,形成EDX:EAX中的4字CDQ双子转换为4字73wBSWAP字节交换指令n格式 BSWAP r32n操作:将指定的32位寄存器的字节次序变反,1,4;2,3互换n例:BSWAP EAX(EAX)11223344H(EAX)44332211H486及以后CPUBSWAP字节交换指令74二、算术运算指令(部分)w四则运算是计算机经常进行的一种操作。算术运算指令实现二进制(和十进制)数据的四则运算w请注意算术运算类指令对标志的影响w双操作数指令除源操作数为立即数的情况外,必须有一个操作数在寄存器w单操作数不允许使用立即数方式二、算术运算指令(部分)四则运算是计算机经常进行的一种操作。751.加法指令wADDwADC(add with carry)wINC(increment)wXADD(exchange and add)1.加法指令ADD76加法指令wADD n格式:ADD DST,SRCn操作:(DST)(SRC)+(DST)wADCn格式:ADC DST,SRCn操作:(DST)(SRC)+(DST)+CFwINCn格式:INC OPRn操作:(OPR)(OPR)+1w可作字节、字、双字运算加法指令ADD 77加法指令wXADD 相加并交换n格式:XADD DST,SRCn操作:TEMP(SRC)(DST)(SRC)(DST)(DST)TEMP486及以后CPU加法指令XADD 相加并交换78加法指令w标志位设置nZFnSFnCF 最高有效位向高位有进位nOF 两个操作数符号相同,结果符号与之相反nINC不影响CF位加法指令标志位设置79加法指令举例ADD AX,BXADD AL,BLSUB CX,20HADD DL,DA_BYTESUB DA_WORD,DX若若(AL)=0E5H,执行执行ADD AL,0A4H 后,后,AL及各标志位的情况及各标志位的情况?11110 01011010 01001000 1001+CF=1,ZF=0,SF=1,OF=0w若认为是无符号数,则若认为是无符号数,则为为229+164=393=256+137229+164=393=256+137w若认为是有符号数,则若认为是有符号数,则为为(-27)+(-92)=-119(-27)+(-92)=-119加法指令举例ADD AX,BX若(AL)=0E5H,执行A80加法指令举例w例:实现例:实现2F365H和和2E024H的加法的加法运算运算MOV DX,2MOV AX,0F365HADD AX,0E024HADC DX,52 F3655 E0248 D389+手工计算手工计算2 F3655 E0248 D389+1F365E024D389+CF=1,ZF=0,SF=1,OF=0000200050008+0001CF=0,ZF=0,SF=0,OF=0AXDX加法指令举例例:实现2F365H和2E024H的加法运算812.减法指令wSUB(subtract)wSBB(subtract with borrow)wDEC(decrement)wNEG(negate)wCMP(compare)wCMPXCHG(compare and exchange)wCMPXCHG8B(compare and exchange 8 byte)2.减法指令SUB(subtract)82减法指令wSUBn格式:SUB DST,SRCn操作:(DST)(DST)(SRC)wSBBn格式:SBB DST,SRCn操作:(DST)(DST)(SRC)CF减法指令SUB83减法指令wDECn格式:DEC OPRn操作:(OPR)(OPR)1wNEG 求补n格式:NEG OPRn操作:(OPR)(OPR)减法指令DEC84减法指令wCMP 比较运算n格式:CMP OPR1,OPR2n操作:(OPR1)(OPR2)wCMPEXCHG 比较并交换n格式:CMPXCHG DST,SRCn操作:累加器(AC)与DST比较 如:(AC)(DST)则:ZF1,(DST)(SRC)否则:ZF0,(AC)(DST)SRC只能为8,16,32位寄存器,累加器可以是AL,AX,EAX减法指令CMP 比较运算85减法指令wCMPXCHG8Bn格式:CMPXCHG8B DST n操作:EDX:EAX与DST比较 如(EDX:EAX)(DST)则:ZF1,(DST)(ECX:EBX)否则:ZF0,(EDX:EAX)(DST)减法指令CMPXCHG8B86减法指令w标志位设置nZF nSFnCF 最高有效位向高位产生借位nOF 两个操作数符号相反,结果与减数符号相同nDEC不影响CFnNEG指令当操作数为0时,CF0,其它均为1 只有128,32768,65536时,OF1,其它均为0。减法指令标志位设置87减法指令举例w例:执行指令例:执行指令MOV AL,-73SUB AL,-87后,后,AL及个标志及个标志位的情况位的情况1011 01111010 10010000 1110CF=0,ZF=0,SF=0,OF=0-73的补码表示的补码表示14-87的补码表示的补码表示AL=0EH减法指令举例例:执行指令1011 01111010 10088减法指令举例例:例:AL=13H,执行指令执行指令NEG AL后后AL的值的值10000 00000001 00111110 1101ALAL=-13H1001 00100000 00011001 0011+CF=1,ZF=0,SF=1,OF=0减法指令举例例:AL=13H,执行指令10000 00008980 x86的指令系统和寻址方式课件90CMP指令详解w根据CMP指令的结果如何判断两个操作数的大小。w无符号数比较X,YnXY 则CF0nXYn则,有如下三种可能lXY=0 X-Y结果 为:SF=0,OF0l0=XY X-Y结果 为:SF0,OF0lX=0,YYCMP指令详解有符号数X,Y92CMP指令详解w有符号数X,Yn若XYn则,有如下三种可能l0=XY X-Y结果 为:SF=1,OF0lXY=0 X-Y结果 为:SF1,OF0lX=0 X-Y结果 为:SF1,OF0 SF0,OF1n可得如下规则:l若SF OF=1,则XYCMP指令详解有符号数X,Y93CMP举例:(CMP AL,BL)AL=-2BL=1271111 11100111 11110111 1111-SF=0OF=1相异,相异,ALBLAL=-2BL=-111111 11101111 11111111 1111-SF=1OF=0相异,相异,ALBLAL=127BL=-210111 11111111 11101000 0001-SF=1OF=1相同,相同,ALBLCMP举例:(CMP AL,BL)AL=-11111 111953.乘法指令wMUL(unsigned multiple)无符号数乘法wIMUL(signed multiple)带符号数乘法3.乘法指令MUL(unsigned multiple)无96乘法指令wMUL、IMULn格式:MUL/IMUL SRCn操作:字节:(AX)(AL)(SRC)字:(DX,AX)(AX)(SRC)双子:(EDX,EAX)(EAX)(SRC)注:指令中的源操作数可以使用除立即数方式以外的任何一种寻址方式乘法指令MUL、IMUL97乘法指令w标志位设置nCF,OF外的标志位无定义nMUL指令如果乘积的高一半为0,则CF0,OF0否则CF1,OF1nIMUL指令如果乘积的高一半为低一半的符号扩展则CF0,OF0;否则CF1,OF1乘法指令标志位设置984.除法指令wDIV(unsigned divide)无符号数除法wIDIV(signed divide)带符号数除法4.除法指令DIV(unsigned divide)无符号数99除法指令wDIV、IDIVw格式:DIV/IDIV SRCw操作:字节 (AL)(AX)/SRC 的商(AH)(AX)/SRC的余数 字 (AX)(DX,AX)/SRC 的商(DX)(DX,AX)/SRC的余数 双字:(EAX)(EDX,EAX)/SRC 的商 (EDX)(EDX,EAX)/SRC的余数w对条件码均无定义除法指令DIV、IDIV10080 x86的指令系统和寻址方式课件1015.十进制调整指令w十进制数调整指令对二进制运算的结果进行十进制调整,以得到十进制的运算结果w分成压缩BCD码和非压缩BCD码调整5.十进制调整指令十进制数调整指令对二进制运算的结果进行十进102三、逻辑指令(逻辑逻辑)位操作类指令以二进制位为基本位操作类指令以二进制位为基本单位进行数据的操作;这是一类常用的单位进行数据的操作;这是一类常用的指令,都应该特别掌握指令,都应该特别掌握w逻辑运算指令w位测试指令w位扫描指令w移位指令三、逻辑指令(逻辑)位操作类指令以二进制位为基本单位进行数1031.逻辑运算指令w格式:AND DST,SRCOR DST,SRCXOR DST,SRCNOT DST TEST OPR1,OPR2w操作:(DST)(DST)(SRC)(DST)(DST)(SRC)(DST)(DST)(SRC)(DST)(DST)(OPR1)(OPR2)wNOT不影响标志位,CF0,OF0,SF,ZF根据结果设置 1.逻辑运算指令格式:AND DST,SRC104逻辑运算指令例:要求屏蔽AL的0,1两位 MOV AL,0BFHAND AL,0FCH 1011 1111 AND 1111 1100 1011 1100(AL)=0BCH逻辑运算指令例:要求屏蔽AL的0,1两位MOV AL,0BF105逻辑运算指令MOV AL,43HOR AL,20H 0100 0010 OR 0010 0000 0110 0000 (AL)=63H例:要求使AL的第5位置1 逻辑运算指令MOV AL,43H例:要求使AL的第5位置1106逻辑运算指令例:要求将AL的第0,1位取反MOV AL,11HXOR AL,03H 0001 0001 XOR 0000 0011 0001 0010 (AL)=12H逻辑运算指令例:要求将AL的第0,1位取反MOV AL,111074.移位指令w逻辑移位指令w算术移位指令w循环移位指令4.移位指令逻辑移位指令108逻辑移位指令w格式:SHL OPR,CNT SHR OPR,CNTw操作:将OPR按 CNT 指定的次数左/右移位,移出的位 CF,空出的位补0,结果 DSTw受影响标志:OF(CNT=1时),CF,ZF,SF,PFw说明:nOPR 可以是R、MnCNT为1或CLn该指令可用于无符号数/2的操作逻辑移位指令格式:SHL OPR,CNT109算术移位指令w格式:SAL OPR,CNT SAR OPR,CNTw操作:nSAL与SHL完全相同nSAR每右移1位,最低位 CF,最高位保持不变(用于带符号数的除法),结果 OPRw受影响标志:OF(CNT=1时),CF,ZF,SF,PFw说明:nDST 可以是R、MnCNT为1或CL算术移位指令格式:SAL OPR,CNT 110移位指令应用举例MOV CL,4MOV AL,0F0H;AL=F0HSHL AL,1;AL=E0H;CF=1,SF=1、ZF=0、PF=0,OF=0SHR AL,1;AL=70H;CF=0,SF=0、ZF=0、PF=0、OF=1SAR AL,CL;AL=03H;CF=1,SF=0、ZF=0、PF=1SAR AL,1;AL=38H;CF=0,SF=0、ZF=0、PF=0、OF=0移位指令应用举例MOV CL,4SHR AL,1;AL=7111循环移位指令wROL(rotate left)wROR(rotate right)wRCL(rotate left through carry)wRCR(rotate right through carry)循环移位指令ROL(rotate left)112循环移位指令wROLw格式:ROL OPR,CNTw操作:wRORw格式:ROR OPR,CNTw操作:循环移位指令ROLROR113循环移位指令wRCLw格式:RCL OPR,CNTw操作:wRCRw格式:RCR OPR,CNTw操作:循环移位指令RCLRCR114循环移位指令 将DX.AX中32位数值左移一位SHL AX,1SHL AX,1RCL DX,1RCL DX,1DXAXCF0循环移位指令 将DX.AX中32位数值左移一位SHL 115循环移位指令位传送;把AL最低位送BL最低位,保持AL不变ROR AL,1RCL BL,1ROL AL,1 ALCFBLCFALCFAL之之D0循环移位指令位传送;把AL最低位送BL最低位,保持AL不变116四、串操作指令w串操作指令是8086指令系统中比较独特的一类指令,采用比较特殊的数据串寻址方式,在操作主存连续区域的数据时,特别好用、因而常用w串操作指令的操作数是主存中连续存放的数据串(String)即在连续的主存区域中,字节或字的序列w串操作指令的操作对象是以双字或字(W)为单位的字串,或是以字节(B)为单位的字节串四、串操作指令串操作指令是8086指令系统中比较独特的一类指117四、串操作指令wMOVS(move string)wCMPS(compare string)wSCAS(sacn string)wLODS(load from string)wSTOS(store in to string)wINS(input from port to string)wOUTS(output string to prot)四、串操作指令MOVS(move string)118四、串操作指令w与REP相配合工作的MOVS,STOS,LODS,INS和OUTS指令nREP重复串操作直到计数寄存器Count Reg的内容为0为止n格式:REP string primitiven操作:l如(Count Reg)=0,则退出REP,否则往下执行l(Count Reg)(Count Reg)-1l执行其后的串指令l重复13四、串操作指令与REP相配合工作的MOVS,STOS,LOD119四、串操作指令wMOVS串传送指令n格式:可有四种lMOVS DEST,SRClMOVSBlMOVSWlMOVSD四、串操作指令MOVS串传送指令120四、串操作指令wMOVS ES:BYTE PTRDI,DS:SIw执行的操作:n(Destination-index)(Source-index)n字节操作:l(Source-index)(Source-index)1l(Destination-index)(Destination-index)1n字操作l(Source-index)(Source-index)2l(Destination-index)(Destination-index)2n双字操作l(Source-index)(Source-index)4l(Destination-index)(Destination-index)4(注:DF=0用,DF=1用)四、串操作指令MOVS ES:BYTE PTRDI,D121四、串操作指令w例 编写程序,传输20字节的字符串。DATSEG SEGMENT DATAX DB ABCDEFGHIJKLMNOPQRST DATAY DB 20 DUP(?)DATSEG ENDS四、串操作指令例 编写程序,传输20字节的字符串。DATS122CODSEG SEGMENT ASSUME CS:CODSEG,DS:DATSEG,ES:DATSEGSTART:MOV AX,DATSEG MOV DS,AX MOV ES,AX CLD MOV SI,OFFSET DATAX MOV DI,OFFSET DATAY MOV CX,20 REP MOVSB MOVAX,4C00H INT 21HCODSEG ENDS END STARTREP MOVS byte ptr di,siREP MOVS byte ptr di,siCODSEG SEGMENT ASSUME123四、串操作指令w执行串处理指令之前应该做好如下工作:n源串的首地址(或末地址)存入SIn目标串的首地址(或末地址)存入DIn串长度存入CXn建立方向标志 CLD,STD四、串操作指令执行串处理指令之前应该做好如下工作:12480 x86的指令系统和寻址方式课件125四、串操作指令四、串操作指令wSTOS 存入串指令n格式:STOS DST STOSB STOSW STOSD四、串操作指令STOS 存入串指令126四、串操作指令四、串操作指令w执行的操作:n字节操作:l(Destination-index)(AL)l(Destination-index)(Destination-index)1n字操作l(Destination-index)(AX)l(Destination-index)(Destination-index)2n双字操作l(Destination-index)(EAX)l(Destination-index)(Destination-index)4(注:DF=0用,DF=1用)四、串操作指令执行的操作:127四、串操作指令四、串操作指令把附加段中的10个字节的缓冲区置为20Hextra segment mess2 db 10 dup(?)extra ends lea di,mess2 mov cx,10 cld rep stosblea di,meass2mov ax,2020hmov cx,5rep stosw四、串操作指令把附加段中的10个字节的缓冲区置为20Hlea128四、串操作指令四、串操作指令wLODS 从串取指令n格式:LODS SRC LODSB LODSW LODSDn执行的操作l字节操作(AL)(Source-index),(Source-index)(Source-index)1l字操作(AX)(Source-index),(Source-index)(Source-index)2l双字操作(EAX)(Source-index),(Source-index)(Source-index)4四、串操作指令LODS 从串取指令129例3.37 编写程序:(1)用STOS指令将0AAH存入100个存储器字节;(2)利用LODS指令测试这些存储器单元的内容是否是0AAH,如果不是则显示“bad memory”。DTSEG SEGMENT DATAM DB 100 DUP(?)MESG DB bad memory,$DTSEG ENDS例3.37 编写程序:(1)用STOS指令将0AAH130CDSEG SEGMENT ASSUMECS:CDSEG,DS:DTSEG,ES:DTSEG START:MOV AX,DTSEG MOV DS,AX MOV ES,AX CLD MOV CX,50 MOV DI,OFFSET DATAM MOV AX,0AAAAH REP STOSW MOV SI,OFFSET DATAM MOV CX,100 CDSEG SEGMENT ASSUMECS131AGAIN:LODSB XOR AL,0AAH JNZ OVER LOOPAGAIN JMP EXITOVER:MOV AH,09 MOV DX,OFFSET MESG INT 21H EXIT:MOV AX,4C00H INT 21HCDSEG ENDS END START AGAIN:LODSB 132四、串操作指令四、串操作指令w与REPE/REPZ和REPNE/REPNZ联合工作的CMPS和SCASwREPE/REPZ当相等/为零时重复串操作n格式:REPE(REPZ)String Primitiven执行的操作:l如(Count Reg)=0或ZF=0时退出,否则往下执行l(Count Reg)(Count Reg)-1l执行其后的串指令l重复13四、串操作指令与REPE/REPZ和REPNE/REPNZ联133四、串操作指令四、串操作指令wREPNE/REPNZ当相不等/不为零时重复串操作n格式:REPNE(REPNZ)String Primitiven执行的操作:l如(Count Reg)=0或ZF=1时退出,否则往下执行l(Count Reg)(Count Reg)-1l执行其后的串指令l重复13四、串操作指令REPNE/REPNZ当相不等/不为零时重复串134四、串操作指令四、串操作指令wCMPS 串比较w格式:CMPS SRC,DST CMPSB CMPSW CMPSD四、串操作指令CMPS 串比较135四、串操作指令四、串操作指令w执行的操作:n(Destination-index)-(Source-index)n字节操作:l(Source-index)(Source-index)1l(Destination-index)(Destination-index)1n字操作l(Source-index)(Source-index)2l(Destination-index)(Destination-index)2n双字操作l(Source-index)(Source-index)4l(Destination-index)(Destination-index)4(注:DF=0用,DF=1用)四、串操作指令执行的操作:136四、串操作指令四、串操作指令wSCAS 串扫描指令w格式:SCAS DST SCASB SCASW SCASD四、串操作指令SCAS 串扫描指令137四、串操作指令四、串操作指令n执行的操作l字节操作(AL)(Destination-index),(Destination-index)(Destination-index)1l字操作(AX)(Destination-index),(Destination-index)(Destination-index)2l双字操作(EAX)(Destination-index),(Destination-index)(Destination-index)4四、串操作指令执行的操作13880 x86的指令系统和寻址方式课件139w例 假设有人将电子字典中的LABEL误拼为LABLE,编写程序比较这两个词,并根据比较结果显示(1)如果相同,则显示The spelling is correct;(2)如果不同,则显示Wrong splling。DATASEG SEGMENTDAT_DICT DB LABELDAT_TYPE DB LABLEMESS1 DB The spelling is correct,$MESS2 DB Wrong spelling,$DATASEG ENDS CODESEG SEGMENTASSUME CS:CODESEG,DS:DATASEG,ES:DATASEG例 假设有人将电子字典中的LABEL误拼为LABLE140START:MOV AX,DATASEG MOV DS,AX MOV ES,AX CLD MOV SI,OFFSET DAT_DICT MOV DI,OFFSET DAT_TYPE MOV CX,05 REPECMPSB JEOVER MOV DX,OFFSET MESS2 JMP DISP OVER:MOV DX,OFFSET MESS1 DISP:MOV AH,09 INT 21H MOV AX,4C00H INT 21HCODSEG ENDS END STARTSTART:MOV AX,DATASEG141w例 编写程序,将姓名中的HU DAMING(胡大明)修改为HU DANING(胡大宁),并显示出正确的姓名。DATA SEGMENTNAME DB HU DAMING,$DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA START:MOV AX,DATAMOVDS,AX MOVES,AX 例 编写程序,将姓名中的HU DAMING(胡大明)修改为H142 CLD MOV AL,MMOV DI,OFFSET NAME MOVCX,09 REPN
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!