1、4.2 80 x86 CPU4.3 基本执行环境基本执行环境一般情况下,各段在存储器中的分配是由操作系统负责的。描述子表:段描述子被组织成线性表(变长的数组)存放在内存中。80386以上CPU有三种类型的描述子表:全局描述子表GDT、局部描述子表LDT和中断描述子表IDT。GDT和IDT只有一份,LDT可以有若干份,每个任务可以有一份。每个任务的LDT含有该任务自身的代码段、数据段和堆栈段的段描述子,也包含该任务所使用的一些门描述子。GDT含有每一个任务都可能或可以访问段的段描述子,通常包含描述操作系统所使用的代码段、数据段和堆栈段的段描述子,也包含多种特殊数据段描述子。4.4.3 80X86
2、4.4.3 80X86寻址方式寻址方式定义:用一个32位基址寄存器的内容加上一个32位变址寄存器的内容与一个比例因子的积来寻址内存 定义:用基址或变址寄存器内容位移量来寻址内存 定义:用一个基址寄存器和一个变址寄存器间接寻址内存 EABX/BPSI/DI定义:用一个基址加一个变址寄存器的内容再加上偏移量寻址内存注意注意例:MOV BL,NUMBER MOV AX,2000H例:MOV CL,BX MOV BP,DL 定义:操作数的地址在基址或变址寄存器中 寄存器间接寻址方式寄存器reg可以是:8位、16位、32位、段寄存器定义:操作数在存储器中定义:操作数直接存放在指令中EA BX/BP/SI
3、/DI位移量EA BX/BPSI/DI位移量 直接寻址方式数据寻址方式立即数寻址方式例:MOV AX,44H MOV AL,A 寄存器寻址方式定义:操作数存放在寄存器中例:MOV BL,AL MOV AX,CX基址变址寻址例:MOV AX,BXSI MOV BX,BPSI寄存器相对寻址例:MOV BL,DI+100 MOV ARRAYSI,CL相对基址变址寻址例:MOV BL,BX+DI+100 MOV AX,FILEBX+SI比例变址寻址例:MOV EAX,EBX4*ECX MOV EAX,ARRAY4*ECX MOV AX,EBX2*EDI 传送类指令可分为传送类指令可分为5 5种:数据传
4、送指令、地种:数据传送指令、地址传送指令、标志位传送指令、类型转换指令址传送指令、标志位传送指令、类型转换指令和和I/OI/O指令。指令。这一类指令除了这一类指令除了SAHFSAHF、POPFPOPF外,外,其余指令对标志位均无影响。其余指令对标志位均无影响。(1)数据传送指令数据传送指令MOVMOV指令指令例:例:MOV ESI,EDI MOV ESI,EDI MOV 2000H,CX MOV 2000H,CX MOV DS,BX MOV DS,BX 例:例:MOV BL,44 MOV BL,44 MOV DI,78H MOV DI,78H 例:例:MOV EAX,BXMOV EAX,BX
5、例:例:MOV DS,2000HMOV DS,2000H 例:例:MOV BX,ESMOV BX,ES MOV BX,ESMOV BX,ES PUSHPUSH指令指令 指令POPPOP指令指令 格式:格式:PUSH SRC/PUSHA/PUSHAD/PUSHF/PUSHFDPUSH SRC/PUSHA/PUSHAD/PUSHF/PUSHFD功能:将源操作数内容压栈,同时自动修改栈顶指针功能:将源操作数内容压栈,同时自动修改栈顶指针 例:例:PUSH BXPUSH BX PUSH AX PUSH AX 格式:格式:POP DST/POPA/POPAD/POPF/POPFDPOP DST/POPA
6、/POPAD/POPF/POPFD 功能:功能:从堆栈弹出数据从堆栈弹出数据 例:例:POP DXPOP DX POP ES POP ES 注意注意:出栈的顺序与入栈的顺序恰好相反:出栈的顺序与入栈的顺序恰好相反寄存器之间交换寄存器之间交换寄存器和存储单元之间交换寄存器和存储单元之间交换 例:例:XCHG EAX,EDXXCHG EAX,EDX 例:例:XCHG AL,SIXCHG AL,SI 其它数据传送指令其它数据传送指令XLAT XLAT 换码指令换码指令其它数据传送指令其它数据传送指令格式:格式:XLATXLAT或或XLAT OPRXLAT OPR功能:将功能:将ALAL与与BXBX内
7、容之和为偏移地址的存储单元内容送入内容之和为偏移地址的存储单元内容送入ALAL例:例:MOV ALMOV AL,5 5 MOV BX MOV BX,offsetK5offsetK5 XLAT XLAT执行情况如下:执行情况如下:结果为:结果为:AL=32AL=32AL=5K51248163264MOVSX MOVSX 符号扩展指令符号扩展指令格式:格式:MOVSX OPR1MOVSX OPR1,OPR2OPR2功能:将功能:将OPR2OPR2中的数据符号扩展后送至中的数据符号扩展后送至OPR1OPR1MOVZX MOVZX 零扩展指令零扩展指令格式:格式:MOVZX OPR1MOVZX OPR
8、1,OPR2OPR2功能:将功能:将OPR2OPR2中的数据零扩展后送至中的数据零扩展后送至OPR1OPR1说明:说明:(1 1)MOVSXMOVSX和和MOVZXMOVZX中源操作数长度是目标操作数的一半。中源操作数长度是目标操作数的一半。(2 2)MOVSXMOVSX将目的操作数的高一半全部以源操作数的符号位填充。将目的操作数的高一半全部以源操作数的符号位填充。(3 3)零扩展指将目的操作数的高一半以)零扩展指将目的操作数的高一半以0 0填充。填充。(2)地址传送指令地址传送指令LEALEA指令指令 指令类型指令类型格式:格式:LEA REGLEA REG,SRCSRC功能:功能:源操作数
9、的有效地址(源操作数的有效地址(偏移地址偏移地址)送指定寄存器)送指定寄存器注意注意:SRCSRC是一个存储单元是一个存储单元例:例:LEA AXLEA AX,NUMBNUMB LDSLDS指令指令 格式:格式:LDS REGLDS REG,SRCSRC功能:将功能:将SRCSRC存储单元存放的存储单元存放的4 4个字节送指定的寄存器个字节送指定的寄存器REGREG和和 DSDS,其中(,其中(SRCSRC)REGREG,(,(SRCSRC2 2)DSDS例:例:LDS DI,LISTLDS DI,LIST LESLESLFSLFSLGSLGSLSSLSS指令指令 格式:同格式:同LDSLDS
10、功能:将存储在功能:将存储在SRCSRC中的地址送中的地址送REGREG寄存器和相应的段寄存器寄存器和相应的段寄存器 (3)标志位传送指令标志位传送指令格式:格式:LAHFLAHF功能:将标志寄存器的最右功能:将标志寄存器的最右8 8位送位送AHAH寄存器寄存器 格式:格式:SAHFSAHF功能:将功能:将AHAH内容送标志寄存器的最右内容送标志寄存器的最右8 8位位常用标志位常用标志位CFCF(进位标志)(进位标志)含义:最高位有进位或借位,则含义:最高位有进位或借位,则CFCF置置“1”1”,否则置,否则置“0”0”AFAF(辅助进位标志)(辅助进位标志)SFSF(符号标志)(符号标志)含
11、义:算术或逻辑运算结果为正,含义:算术或逻辑运算结果为正,SFSF置置“0”0”,为负则置,为负则置“1“1“ZFZF(零标志)(零标志)含义:算术或逻辑运算结果为含义:算术或逻辑运算结果为0 0,ZFZF置置“1”1”,否则置,否则置“0”0”PFPF(奇偶标志)(奇偶标志)含义:算术或逻辑操作结果的低含义:算术或逻辑操作结果的低8 8位含有偶数个位含有偶数个“1”1”,则则PFPF置置“1”1”,否则置,否则置“0”0”OFOF(溢出标志)(溢出标志)含义:若两个操作数的符号相同而结果的符号与之相含义:若两个操作数的符号相同而结果的符号与之相 反则反则OFOF置置“1”1”,否则置,否则置
12、“0”0”例:实现例:实现BX-AXBX-AX和和DX-CXDX-CX相加,结果存放在相加,结果存放在BX-AXBX-AX。SUM32 PROC NEARSUM32 PROC NEAR ADD AX,CX ADD AX,CX ADC BX,DX ADC BX,DX RET RETSUM32 ENDPSUM32 ENDP加法指令加法指令ADDADD格式:格式:ADD DSTADD DST,SRCSRC功能:功能:将源操作数和目标操作数相加,结果送入目标操作数将源操作数和目标操作数相加,结果送入目标操作数例:求例:求NUMNUM和和NUM+1NUM+1单元内字节数据和的程序段。单元内字节数据和的程
13、序段。MOV DI,OFFSET NUMMOV DI,OFFSET NUM MOV AL,0 MOV AL,0 ADD AL,NUM ADD AL,NUM ADD AL,NUM+1 ADD AL,NUM+1 例:例:ADD AL,BLADD AL,BL ADD CL,44 ADD CL,44 ADD BX,AL ADD BX,ALADCADC格式:格式:ADC DSTADC DST,SRCSRC功能:将源操作数、目标操作数和功能:将源操作数、目标操作数和CFCF的值相加送目标操作数的值相加送目标操作数例:例:ADC AL,AHADC AL,AH ADC AX,BX ADC AX,BXINCIN
14、C格式:格式:INC OPRINC OPR功能:将除段寄存器以外任何存储器或存储单元内容加功能:将除段寄存器以外任何存储器或存储单元内容加1 1例:例:INC BLINC BL INC WORD PTR BX INC WORD PTR BXXADDXADD格式:格式:XADD DSTXADD DST,SRCSRC功能:功能:将目标操作数和源操作数相加,和数放在目标操作数将目标操作数和源操作数相加,和数放在目标操作数 中,原目标操作数内容送入源操作数中,原目标操作数内容送入源操作数例:例:XADD BL,DLXADD BL,DL格式:格式:CMPXCHG DSTCMPXCHG DST,SRCSR
15、C功能:功能:将目标操作数和累加器内容比较,若相等则将源操作数复制将目标操作数和累加器内容比较,若相等则将源操作数复制 到目标操作数,否则将目标操作数复制到累加器到目标操作数,否则将目标操作数复制到累加器相减后的差存在相减后的差存在ALAL,标志位变化如下:,标志位变化如下:ZF=0,CF=1,AF=1,SF=1,OF=0,PF=1ZF=0,CF=1,AF=1,SF=1,OF=0,PF=1格式:格式:SBB DSTSBB DST,SRCSRC功能:从目标操作数中减去源操作数和功能:从目标操作数中减去源操作数和CFCF,结果存入目标操作数,结果存入目标操作数 格式:格式:CMP OPR1CMP
16、OPR1,OPR2OPR2功能:功能:用目标操作数减去源操作数,根据结果设置标志位用目标操作数减去源操作数,根据结果设置标志位执行结果执行结果:DX.AX:DX.AX 0234 4652H0234 4652H F0F0 F0F0HF0F0 F0F0H 1143 5562H1143 5562H例:例:movmov ax,0ff64h ax,0ff64h negneg al al ;ax=ff9chax=ff9ch,OF=0OF=0、SF=1SF=1、ZF=0ZF=0、PF=1PF=1、CF=1CF=1格式:格式:NEG OPRNEG OPR功能:使操作数按位求反再加功能:使操作数按位求反再加1
17、1,结果送入目标操作数,结果送入目标操作数例:例:movmov ax,4652h ax,4652h sub ax,0f0f0h sub ax,0f0f0h movmov dx,0234h dx,0234h sbbsbb dx,0f0f0h dx,0f0f0h减法指令减法指令SUBSUB格式:格式:SUB DSTSUB DST,SRCSRC功能:功能:从目标操作数中减去源操作数,结果存入目标操作数从目标操作数中减去源操作数,结果存入目标操作数例:实现例:实现36H36H减去减去48H48H,分析标志位的变化情况。,分析标志位的变化情况。MOV AL,36H MOV AL,36H SUB AL,4
18、8H SUB AL,48H例:例:SUB DXSUB DX,MATHSIMATHSI SUB BPBALANCE SUB BPBALANCE,10001000 SUB ECX SUB ECX,EBPEBPSBBSBB例:例:SBB AH,ALSBB AH,AL SBB DI,BP+2 SBB DI,BP+2DECDEC格式:格式:DEC OPRDEC OPR功能:将目标操作数减功能:将目标操作数减1 1例:例:DEC ALDEC AL NEGNEGCMPCMP例:例:CMP BX,CXCMP BX,CX CMP BP+2,SI CMP BP+2,SI CMP AL,00010000B CMP
19、AL,00010000BCMPXCHGCMPXCHG例:例:CMPXCHG CXCMPXCHG CX,DXDX 注意注意:该指令只用于该指令只用于80486/Pentium80486/Pentium微处理器微处理器乘法指令对标志的影响乘法指令对标志的影响:MULMUL指令指令-若乘积的高一半(若乘积的高一半(AHAH或或DXDX)为)为0 0,则,则OF=CF=0OF=CF=0;否则;否则OF=CF=1OF=CF=1IMULIMUL指令指令-若乘积的高一半是低一半的符号扩展,则若乘积的高一半是低一半的符号扩展,则OF=CF=0OF=CF=0;否则均;否则均为为1 1,对标志位,对标志位AFAF
20、、PFPF、ZFZF、SFSF无定义无定义乘法指令应用举例乘法指令应用举例:无符号:无符号:movmov al,0b4h al,0b4h movmov bl,11h bl,11h mulmul blbl;例:例:IMUL DHIMUL DH IMUL IMUL WORD PTR SIWORD PTR SI IMUL EDI IMUL EDI有符号:有符号:movmov al,0b4h al,0b4h movmov bl,11h bl,11h ImulImul blbl乘法指令乘法指令 MUL MUL格式:格式:MUL SRCMUL SRC功能:将累加器(功能:将累加器(EAXEAX,AXAX或
21、或ALAL)与源操作数作为无符号数相乘)与源操作数作为无符号数相乘例:例:MUL CLMUL CL MUL CX MUL CX MUL ECX MUL ECX;AL;AL乘乘CLCL,无符号的积存在,无符号的积存在AXAX中中;AX;AX乘乘CXCX,无符号的积存在,无符号的积存在DX-AXDX-AX中中;EAX;EAX乘乘ECXECX,无符号的积存在,无符号的积存在EDX-EAXEDX-EAX中中 IMUL IMUL格式:格式:IMUL SRCIMUL SRC功能:将累加器(功能:将累加器(EAXEAX,AXAX或或ALAL)与源操作数作为有符号数相乘)与源操作数作为有符号数相乘;AL;AL
22、乘乘DHDH,有符号的积存在,有符号的积存在AXAX中中;AXAX内容与内容与SISI寻址的存储单元中字内容相乘,寻址的存储单元中字内容相乘,结果送结果送DX-AXDX-AX;EAXEAX中内容与中内容与EDIEDI中的带符号数相乘,结果送中的带符号数相乘,结果送EDX-EDX-EAXEAX;OF=CF=1OF=CF=1,AXAX高高8 8位不为位不为0 0;OF=CF=1OF=CF=1,AXAX高高8 8位含有效数字位含有效数字除法指令除法指令 DIV DIV格式:格式:DIV SRCDIV SRC功能:将两个无符号数相除功能:将两个无符号数相除注意注意:SRCSRC为为8 8位,目标操作数
23、位,目标操作数AXAX,商,商ALAL中,余数中,余数AHAH;SRCSRC为为1616位,目标操作数高位字位,目标操作数高位字DXDX,低位字,低位字AXAX,商商AXAX,余数,余数DXDX;SRCSRC为为3232位,目的操作数高位,目的操作数高3232位位EDXEDX,低,低3232位位EAXEAX例:例:DIV CLDIV CL DIV CX DIV CX DIV DWORD PTRSI DIV DWORD PTRSI IDIV IDIV格式:格式:IDIV SRCIDIV SRC功能:将两个有符号数相除功能:将两个有符号数相除例:例:IDIV CLIDIV CL IDIV CX I
24、DIV CX IDIV DWORD PTRSI IDIV DWORD PTRSI除法指令应用举例除法指令应用举例:无符号无符号 movmov ax,0400h ax,0400h movmov bl,0b4h bl,0b4h div div blbl;商;商alal05h05h5 5 余数余数ahah7ch7ch124124有符号有符号 movmov ax,0400h ax,0400h movmov bl,0b4h bl,0b4h idividiv blbl;商;商alalf3hf3h-13-13 余数余数ahah24h24h3636LODSLODSB格式:LODSB功能:AL(SI)SISI1
25、LODSW格式:LODSW功能:AX (SI)SISI2LODSD格式:LODSD功能:EAX(SI)SISI4STOSSTOSB格式:STOSB功能:(DI)AL DIDI1STOSW格式:STOSW功能:(DI)AX DIDI2STOSD格式:STOSD功能:(DI)EAX DIDI4MOVSMOVSB格式:MOVSB功能:(DI)(SI)SISI1 DIDI1MOVSW格式:MOVSW功能:(DI)(SI)SISI2 DIDI2MOVSD格式:MOVSD功能:(DI)(SI)SISI4 DIDI4CMPSCMPSB格式:CMPSB功能:(DI)(SI)SISI1 DIDI1CMPSW格式
26、:CMPSW功能:(DI)(SI)SISI2 DIDI2CMPSD格式:CMPSD功能:(DI)(SI)SISI4 DIDI4SCASSCASB格式:SCASB功能:AL(DI)DIDI1SCASW格式:SCASW功能:AX(DI)DIDI2CMPSD格式:SCASD功能:EAX(DI)DIDI4可以是可以是CMPS或或SCAS可以是可以是MOVS、STOS、LODS(1)(1)标志位处理指令标志位处理指令格式:格式:CLCCLC功能:功能:CF0CF0标志位处理指令标志位处理指令CLCCLC特点:只影响本指令指定的标志位,不影响其他标志位特点:只影响本指令指定的标志位,不影响其他标志位 格式:格式:CLCCLC功能:功能:CFCFCFCF求反求反CMCCMC格式:格式:STCSTC功能:功能:CF1CF1STCSTC格式:格式:CLDCLD功能:功能:DF0DF0CLDCLD格式:格式:STDSTD功能:功能:DF1DF1STDSTD格式:格式:CLICLI功能:功能:IF0IF0CLICLI格式:格式:STISTI功能:功能:IF1IF1STISTI