,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第9章 80 x86/Pentium 汇编语言介绍,第9章 80 x86/Pentium 汇编,1,9.1 80 x86/Pentium微处理器简介,Intel 8086/8088 CPU诞生至今已经20年了,其间不断有新产品,如80286、80386、80486(统称80 x86)及Pentium处理器。,这些CPU都是向下兼容的,并进行了指令扩展,从而提供了更加强大的功能。,9.1 80 x86/Pentium微处理器简介,2,80286、80386、80486、Pentium的指令,80286、80386、80486、Pentium的指令比8086/8088的指令,除了寄存器增多了,操作数类型可以使用双字类型以外,,增加了一些指令和一些新的指令类型。,新增加的指令类型是:,条件设置指令,位处理指令(位测试、位扫描),支持高级语言的指令(边界测试、栈空间处理)。,80286、80386、80486、Pentium的指,3,2.80386、80486、80586、Pentium 扩充了三种寻址方式:,带比例因子的变址寻址,基址加比例因子的变址寻址,相对基址加比例因子的变址寻址。,2.80386、80486、80586、Pentium,4,9.1.1 80286微处理器,CPU增加了一个极其状态字MSW。,新增指令:,1.PUSH,2.PUSHA 依次将通用寄存器AX.BX.CX.DX.SP.SI.DI的内容压入堆栈,3.POPA 依次将栈顶的内容弹至DI.SI.SP.DX.CX.BX.AX,9.1.1 80286微处理器CPU增加了一个极其状态字MS,5,9.2.2 有符号数乘法指令,(1)IMUL Reg,Imm;Reg只能是16位或32位通用寄存器,(2)IMUL Reg1,Reg2/Mem,Imm;,Reg1,Reg2只能是16位通用寄存器,(3)移位指令 可直接用立即数表示移位次数。SAL ax,2,RCR bx,4,9.2.2 有符号数乘法指令(1)IMUL Reg,Imm,6,9.3 80386新增指令,80386 可对32位数据直接操作。其内部寄存器也是32位,同时增加了一种32位的内存寻址方式,其偏移地址由3部分构成:,(1)一个32位的基址寄存器,(2)一个可以乘上1、2、4、8的32位变址寄存器,(3)一个32位的偏移量。,EA=32位基址寄存器+32位变址寄存器*(1.2.4.8)+32位偏移量,9.3 80386新增指令80386 可对32位数据直接操作,7,9.3.1 数据传送与填充指令,1.MOVSX Reg,Reg/Mem,将位数较少的源操作数传送到位数较多的目的操作数中。,2.MOVZX Reg,Reg/Mem,与上面的区别是党员操作输得位数少于目的操作数位数时,目的操作数的高位用0填充。不影响标志位,9.3.1 数据传送与填充指令1.MOVSX Reg,Reg,8,9.3.2 堆栈操作指令,1.PUSH Imm32 ;,将32位立即数压入堆栈,2.PUSHAD,将所有通用寄存器的内容依次压入堆栈。,3.POPAD,将当前栈顶内容依次弹出至相应寄存器,4.PUSHFD,9.3.2 堆栈操作指令1.PUSH Imm32,9,9.3.3 取段寄存器指令,1.LFS Reg,Mem,将源操作数所指存储单元的4字节或6字节内容传送到指定的寄存器及段寄存器FS.,2.LGS Reg,Mem,与上相同,但寄存器为GS,3.LSS Reg,Mem,与上相同,但寄存器为SS,9.3.3 取段寄存器指令1.LFS Reg,Mem,10,9.3.4 有符号数乘法指令,IMUL Reg1,Reg2/Mem ;16位或32位通用寄存器,但指令中原操作数和目的操作数必须一致,9.3.4 有符号数乘法指令IMUL Reg1,Reg2/M,11,9.3.5符号扩展指令,1.CWDE,将AX中16位有符号数的符号扩展到EAX的高16为中,不影响标志位。,2.CDQ,将EAX中32位有符号数的符号扩展到EDX寄存器。,9.3.5符号扩展指令1.CWDE,12,9.3.6移位指令,1.SHLD Reg/Mem,Reg,CL/Imm,将第一位操作数左移若干位,空出位用第二操作数(与第一操作数相同的通用寄存器)高位部分填充,但第二操作数内容不变,标志位CF中保留地一操作数最后的移出位。受影响的标志位有CF.OF.PF.SF.ZF,2.SHRD Reg/Mem,Reg,CL/Imm,基本功能与上相同,但是为向右移动。,9.3.6移位指令1.SHLD Reg/Mem,Reg,CL,13,9.3.7 位操作指令,1.位扫描指令 BSF Reg,Reg,Mem,对第二操作树丛最低位到最高位进行扫描,将首先扫描到的“1”位送到第一操作数,且使zF置1。否则,置0。,2.位检测指令,(1)BT Reg/Mem,Reg/Mem,第一操作数指定要检测的内容,第二操作数指要测定的位,将被测内容指定测试位的值送至CF.,(2)BTC Reg/Mem,Reg/Mem,9.3.7 位操作指令1.位扫描指令 BSF Reg,Reg,14,(3)BTC Reg/Mem,Reg/Mem,该指令在BT指令功能的基础上,将被测位清0。,(4),BTC Reg/Mem,Reg/Mem,该指令在BT指令功能基础上,将被测位置1。,(3)BTC Reg/Mem,Reg/Mem,15,9.4 80486新增指令,9.4.1 字节交换指令 BSWAP Reg32,将32位通用寄存器的高低字节以字节位单位进行交换,该指令不影响标志位。,9.4.2 交换并相加指令 XADDReg/Mem,Reg,先交换两个操作数的值,再进行加法操作,结果送至第一操作数。,9.4 80486新增指令9.4.1 字节交换指令 BS,16,9.4.3 比较交换指令,CMPXCHG,Reg/Mem,reg,将第一操作数的内容与相同的位数的第二操作数的内容比较,若相等,则ZF置1,否则ZF清零。,9.4.4 Cache管理指令,1.使整个片内的Cache无效 INVD,2.写回并使Cache无效指令 WBINNVD,3.使TLB无效指令 INVLPG,9.4.3 比较交换指令 CMPXCHG Reg/Mem,17,9.5 Pentium 新增指令,1.8字节比较交换指令,CMPXCHGB Mem64,将EDX:EAX重的内容送至指定的8字节存储器操作数相比较。相等,ZF置1,否则,Zf清零。,2.处理器特征识别指令 CPUID,将处理器的信息送至EAX,特征标志字送EDX.,3.读时间表记计数器指令 RDTSC,将Pentium CPU 中64位时间表记计数器的低32位送至EAX,高32位送至EDX.,9.5 Pentium 新增指令1.8字节比较交换指令 CM,18,4.读模型专用寄存器指令 RDMSR,将ECX所制定的模型专用寄存器的低32位送至EAX,高32位送至EDX.,5.写模型专用寄存器指令 WRMSP,将ECX:EAX的内容送至ECX指定的模型专用寄存器。,4.读模型专用寄存器指令 RDMSR,19,谢谢指导,本课件到此结束!,谢谢指导,本课件到此结束!,谢谢指导,本课件到此结束!谢谢指导,本课件到此结束!,20,