【文档说明】《汇编语言程序设计》第10章80X86和Pentium指令系统简介课件.ppt,共(45)页,335.001 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44729.html
以下为本文档部分文字说明:
第10章80X86和Pentium指令系统简介10.1指令的特点10.2寻址方式10.3指令系统第10章80X86和Pentium指令系统简介10.1指令的特点10.2寻址方式10.3指令系统10.1指令的特点8086.8088的指令向上与8028
6及后来的80386、80486、各类Pentium兼容,即8086.8088的程序代码可以在更新的80286上运行,类似地,在低档CPU上的程序代码可以在更新的高档CPU上运行。在实地址方式下,80286与8086.8088的程序代码可直接在80286上运
行;在保护的虚地址方式下,8086.8088的程序要经过重新汇编之后,才能在80286上运行。第10章80X86和Pentium指令系统简介10.1指令的特点10.2寻址方式10.3指令系统10.2寻址方式80286CPU的寻址方式80386CPU的寻址方式
80486CPU的寻址方式及Win32程序简介80286CPU的寻址方式10.2寻址方式80286CPU有两种工作方式:实地址方式和保护虚地址方式。在实地址方式下,80286与8086.8088地址兼容,由16位
段选择字左移4位与16位的偏移地址相加得到20位物理地址,可寻址1MB的地址空间,与8086.8088的寻址方式相同。在保护虚地址方式下,可直接寻址的实存空间扩大到16MB,由A23~A0形成24位物理地址,可寻址的虚空间扩大到1GB,使用段描述符表来寻址。80386
CPU的寻址方式10.2寻址方式80386CPU有三种工作方式:实模式保护模式虚拟8086模式。80386CPU的寻址方式10.2寻址方式在实地址方式下,80386与80286对内存的访问方式相同,与8086.8088地址兼容,可寻址1MB的地址空间。80386CPU
的寻址方式10.2寻址方式在保护虚地址方式下,由A23~A0形成24位物理地址,可直接寻址的实存空间扩大到16MB;支持存储器的段页式结构,可寻址的虚空间扩大到4GB,访问存储器需要32位物理地址,由虚地址指示器提供48位地址指针,其
中前16位是段选择字,后32位是偏移地址。DOS操作系统和16位的Windows3X操作系统工作在实地址方式下,32位的Windows操作系统工作在保护模式下。32位的Windows操作系统,将每一个Win32应
用程序放到分开的虚拟地址空间中去运行,也就是每一个应用程序都拥有其相互独立的4GB地址空间,但不是拥有4GB的物理地址空间,而是能够在4GB的范围内寻址。操作系统将会在应用程序运行时完成4GB的虚拟地址和物理地址间的转换。80386CPU的寻址方式10.2寻址方式虚拟8086模式下,处理器
的工作方式类似于8086.8088:寻址的地址空间是1MB;段寄存器的内容作为段基值;20位存储单元地址由段基值左移4位加偏移地址构成。在虚拟8086模式下,代码段是可写的,与实模式相同,同样数据段也是可执行的,但这可能引起异常
。可见在虚拟8086模式下,可以运行DOS及其平台下的程序。但这种模式毕竟是虚拟8086的一种方式,并不完全等同于8086。80486CPU的寻址方式及Win32程序简介10.2寻址方式80486从指令系
统、寄存器组和存储器管理方式等方面来看,在体系结构上与80386几乎没有多少区别。操作模式也同80386一样,有实模式,保护模式和虚拟8086模式。80486CPU的寻址方式及Win32程序简介10.2寻址方式Win32程序运行在保护模式下的32位的Windows(Wi
n95、Win98等)操作系统环境中。Windows把每一个Win32应用程序放到分开的虚拟地址空间中去运行,每一个应用程序都拥有其相互独立的4GB地址空间,能够在4GB的地址空间范围内寻址。在DOS的实地址模式下编写汇编语言程序时,我们可以管
理系统的所有资源。32位的Windows(Win95、Win98等)工作在保护模式下,系统所有的资源对应用程序来说都是被“保护”的。Win32汇编的有关内容10.2寻址方式1.Win32ASM编译器Borland公司的MASM5.0Microsoft的MASM6.11
Win32汇编的有关内容10.2寻址方式TASM带了Import库,而MASM没有带,但SteveHutchesson为MASM建立了一个很全的Import库,基本上包括了Windows绝大部分的API函数,这些库、Include文件和其他工具还有MASM6.
14版本一起做成了一个MASM32编译器———MASM32V5。MASM32宏汇编器有很多特色,像“invoke”,可简化对API函数的调用并对数据类型进行检查。Win32汇编的有关内容10.2寻址方式使用32位的编译器时,首先要指定内存模式。如要生成.com文件,
内存模式应指定为tiny,然后按.com文件的规范写文件;生成.exe文件,内存模式应指定为small等。要生成.com文件十分方便,用mlfilename.asm即可完成编译链接,不需要exe2bin转换。与MASM5.0相比,MASM32
的伪指令功能十分强大,应用起来特别方便。Win32汇编的有关内容10.2寻址方式2.资源编辑器BorlandResourceWorkshop推荐网址:www.crackstore.comWin32汇编的有关内容10.2寻址方式3.文本编辑器Ultraedit网址:w
ww.ultraedit.comWin32汇编的有关内容10.2寻址方式4.参考手册《Win32程序员参考手册》推荐网址:www.crackstore.comWin32汇编的有关内容10.2寻址方式Win32程序框架:.386.MODELFLAT,STDCALL.D
ATA<已初始化的数据>....DATA?<未初始化的数据>....CONST<定义的常量>....CODE<label><用户程序代码>...end<label>第10章80X86和Pentium指令系统简介10.1指令的特点10.2寻址方式1
0.3指令系统10.3指令系统80286的新增指令80386的新增指令80486的新增指令80286的新增指令10.3指令系统1.普通指令共有四条:PUSHA———把8个寄存器值压入堆栈。POPA———从堆栈中弹出数据恢复8个寄存器的值。INS——
—字符串输入指令。OUTS———字符串输出指令。INS指令的功能是从指定的端口输入一字符串到指定内存地址中去。可以使用REP前缀。80286的新增指令10.3指令系统2.高级指令共有三条:ENTER———进入过程,为过程保留堆栈空间和确定过程嵌套级;LEAVE———
退出过程,释放过程所占堆栈空间;BOUND———检查地址寄存器的值是否在数组边界内。80286的新增指令10.3指令系统3.保护方式指令这类指令用于实地址模式和保护虚地址模式的切换,并完成保护模式下的一些专门操作。共有16条指令:ARPL———调整请求和特权级别;CLTS———清除任务切换标志
位;LAR———将段描述符中的存取权限装入寄存器;LGDT———将从指定地址开始的6个字节装入全局描述符表寄存器中;LIDT———将从指定地址开始的6个字节装入中断描述符表寄存器中;LLDT———将16位值装入局部描述符表寄存器;80286的新增
指令10.3指令系统LMSW———装入机器状态字寄存器;LSL———将段描述符中的段限值装入寄存器;LTR———将16位值装入任务寄存器;SGDT———把全局描述符表寄存器的内容存放到内存6个字节单元;SIDT———把中断描述符表寄存器的内容存放到内存
6个字节单元;SLDT———将局部描述符表的16位值存入内存或寄存器中;SMSW———存储机器状态字寄存器的值;VERR———校验读访问;VERW———校验写访问;STR———存储任务寄存器(与LTR方向相反)。80386的新增指令10.3指令系统1.增加的新指令
(1)测试与置位类指令(2)位扫描指令(3)数的传送与扩展指令(4)双精度移位指令(5)条件设置类指令80386的新增指令10.3指令系统(1)测试与置位类指令格式1:BT寄存器.存储器地址,寄存器.立即数功能:位测试指令,用于检查指定位,
并将该位复制到进位标志位中。格式2:BTR寄存器.存储器地址,寄存器.立即数功能:位测试且取反指令,用于检查指定位,将该位复制到进位标志位中,并将原指定位取反再置入位。80386的新增指令10.3指令系统(1)测试
与置位类指令格式3:BTR寄存器.存储器地址,寄存器.立即数功能:位测试且复位指令,用于检查指定位,将该位复制到进位标志位中,并将原指定位复位。格式4:BTS寄存器.存储器地址,寄存器.立即数功能:位测试且
置位指令,用于检查指定位,将该位复制到进位标志位中,并将原指定位置位。80386的新增指令10.3指令系统(2)位扫描指令格式1:BSF寄存器,寄存器.存储器地址功能:位扫描指令,它从源寄存器.存储器地址中的数的最低位(第0位)开始扫描直到置位位为止,
并将该置位位的索引(位号)送入目的寄存器中。格式2:BSR寄存器,寄存器.存储器地址功能:位扫描指令,它从源寄存器.存储器地址中的数的最高位(第31.15位)开始扫描直到置位位为止,并将该置位位的索引(位号)送入目的寄存器中。80386的新增指令10.3指令系统(
3)数的传送与扩展指令格式1:MOVSX寄存器,寄存器.存储器地址功能:传送有符号数到目的寄存器中,并将符号扩展到操作数的所有位。格式2:MOVZX寄存器,寄存器.存储器地址功能:传送无符号数到目的寄存器中,并用0进行扩展。80386的新增指令10.3指令系统(4)双精度移位指令
格式1:SHLD寄存器.存储器地址,寄存器,CL.立即数功能:双精度左移指令,第一个操作数左移N(第三个操作数指出)位,其右边空出位由第二个操作数的左边N位填补,CF保持第一个操作数最后一次的移出位。格式2:SHRD寄存器.存储器地址,寄存器,CL.立即
数功能:双精度右移指令,参见SHLD。80386的新增指令10.3指令系统(5)条件设置类指令这类指令用于测试指定的标志位所处的状态,根据测试结果,将指定的一个8位寄存器或内存单元置1或0:结果为真,8位寄存器或内存单元置1;结果为假,8位寄存器或
内存单元置0。这类指令有:SETA.SETNBE,还有SETAE.SETNC、SETB.SETNAE.SETC、SETNA.SETBE、SETE.SETZ、SETG.SETNLE、SETGE.SETNL、SETL.SETNGE、SETLE.SETNG、SETNE.S
ETNZ、SETNO、SETNS、SETO、SETP.SETPE、SETPO.SETNP、SETS等。80386的新增指令10.3指令系统格式:SETE8位寄存器.内存单元功能:如果ZF=1则寄存器.存储器地址=1,否则寄存器.存储器地址=0。80386的新增指令10.3指令系统2.增强功能的
指令(1)转换指令(2)字符串操作指令(3)整数乘指令IMUL(4)堆栈操作指令(5)中断返回指令IRETD80386的新增指令10.3指令系统(1)转换指令CDQ:转换在EAX中带符号的双字到EDX,EAX中为带符号的四字。它把EAX中的符号位扩展到EDX中的所有位来
实现转换。CWDE:把字转换为双字。它把AX中的符号位扩展到EAX中的其他位来把AX中的字转换成EAX中的双字。80386的新增指令10.3指令系统(2)字符串操作指令字符串操作指令CMPSD、INSD、LODSD、MOVSD、OUTSD、SCASD、S
TOSD可见它们是在字符串操作指令CMPS、INS、LODS、MOVS、OUTS、SCAS、STOS各指令后加D,变成了对双字的操作,类似于加B对字节操作、加W对字操作。仍然是由寄存器DS:SI指向源串,ES:DI指向目标串。80386的新增指令10.3指令系统(3)整数乘指令IMUL
在80286中,IMUL有两种格式:IMUL16位寄存器,立即数IMUL16位寄存器,16位存储器,立即数在80386中,新增一种格式:IMUL寄存器,寄存器.存储器;注意源和目标操作数位数必须相同80386的新增指令10.3指令系统(4)堆栈操作指令在80286中,PUSHA———把8个
寄存器值压入堆栈,POPA———从堆栈中弹出数据恢复8个寄存器的值。上述两个指令对8个16位的寄存器进行堆栈操作,在80386中要对相应的8个32位寄存器进行堆栈操作,需使用PUSHAD、POPAD指令
。在80386中要对32位的标志寄存器EFLAG寄存器进行堆栈操作,需使用PUSHFD、POPFD指令。80386的新增指令10.3指令系统(5)中断返回指令IRETD我们前面学过的IERT指令从堆栈中弹出16位的指针,
要从堆栈中弹出32位的指针,必须使用IRETD,以从堆栈中弹出一个双字的指针。80486的新增指令10.3指令系统1.字节交换指令BSWAP2.比较与交换指令CMPXCHG3.交换与相加指令XADD4.cache管理指令80486的新增指令10.3指令系统1.字节交换指令BSWAP
本指令用于将32位通用寄存器的双字以字节为单位,高低字节进行交换。80486的新增指令10.3指令系统2.比较与交换指令CMPXCHG本指令将存放在8位、16位、32位寄存器或存储器中的第一操作数与累加器AL、AX、EAX的内容进行
比较:如相等,则ZF=1,并将存放8位、16位、32位寄存器中的第二操作数送第一操作数的存储单元;如不相等,则ZF=0,并将第一操作数送相应累加器。80486的新增指令10.3指令系统3.交换与相加指令XADD本指令将存放在8位、1
6位、32位寄存器或存储器中的第一操作数与存放在8位、16位、32位寄存器中的第二操作数相加,结果存入到第一操作数,而将第一操作数存入到第二操作数。80486的新增指令10.3指令系统4.cache管理指令(1)INVD:清洗cache指令(2)WBINV
D:回写和清洗cache指令(3)INVLPG:作废TLB项指令