您好,欢迎访问三七文档
121世纪高等院校规划教材汇编语言程序设计相伟主编徐小平李珍香副主编中国水利水电出版社22电子教案3本章内容32位CPU的工作模式32位CPU的内部寄存器32位CPU的内存管理32位地址的寻址方式32位CPU指令系统32位常用伪指令32位汇编程序的上机过程程序实例4实模式保护模式虚拟8086模式第1节32位CPU的工作模式5一、实模式:只能访问实地址的工作模式,80386处理器被复位或加电时以实模式启动。第1节32位CPU的工作模式特点:①386CPU都只有低20位地址线起作用,仅能寻址第一个1MB的内存空间,禁用CPU的所有保护功能,也不支持分页;②采用16位分段,段地址与偏移地址都是16位,20位物理地址是由16位段地址左移4位加上16位偏移地址得到的;③CPU总是从地址CS:IP处取指令,EIP的高16位为0。SS:SP指向堆栈段的栈顶地址,ESP的高16位为0;可以使用32位寄存器和32位操作数,但以32位表示偏移地址时,只使用其中的低16位,高16位为0。当控制寄存器CR0的PE位为0时,CPU工作在实模式下。6二、保护模式当控制寄存器CR0的PE位为1时,CPU工作在保护模式下。在此模式下,它的所有功能都是可用的。全部地址线都能寻址;支持多任务,能够快速地进行任务切换和保护任务环境;4个特权级和完善的特权检查机制,既能实现资源共享又能保证代码和数据的安全和保密及任务的隔离;支持虚拟8086方式,便于执行8086程序。特点:①具有4个特权级:0级、1级、2级和3级,其中0级为最高特权级,3级为最低特权级;②采用32位段,即偏移地址是32位,每段的长度可达4GB;③特权指令只能由运行在特权级0下的程序使用;④程序设计方法与实模式基本相同,但部分指令所执行的操作与实模式有一定差别。第1节32位CPU的工作模式7是保护模式下的一种工作方式,也称为V8086模式,或者简称为V86模式。在此模式下,处理器类似于8086。寻址的地址空间是1M字节;段寄存器的内容作为段值解释;20位存储单元地址由段地址乘以16加偏移地址构成。可以运行DOS及以其为平台的软件。但V86模式毕竟是虚拟8086的一种方式,所以不完全等同于8086。当标志寄存器中的VM位为1时,处理器就处于V86模式。三、虚拟8086模式特点:①可以运行8086程序;②分段寻址与实模式相同;③分页寻址与保护模式相同;④支持保护机制;⑤该模式下的程序处于特权级3,因而不能使用特权指令。第1节32位CPU的工作模式8第2节32位CPU的内部寄存器9一、通用寄存器32位通用寄存器有8个,分别是EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP,其中它们的低16位分别与8086、80286的寄存器AX、BX、CX、DX、SI、DI、BP、SP相同,可以独立使用。AX、BX、CX、DX也可分成两个8位寄存器:AH、AL、BH、BL、CH、CL、DH、DL。第2节32位CPU的内部寄存器10第2节32位CPU的内部寄存器二、指令指针和标志寄存器(1)指令指针寄存器指令指针寄存器EIP的低16位是16位的指令指针寄存器IP,它与前面介绍过的8086CPU中的IP相同。由于实方式下段的最大范围是64K,所以EIP中的高16位必须是0,仍相当于只有低16位的IP起作用。(2)标志寄存器80386的标志寄存器记为EFLAGS,在保留了8086的9个标志位的基础上,新增加了4个控制标志。11①IOPLI/O特权标志也称为I/O特权级字段,用2位二进制位来表示,取值为0-3在保护模式中,部分指令(如STI、CLI、IN、OUT、INS、OUTS等)是I/O敏感指令,I/O字段规定了使用这些指令的特权级,其中0级特权最高,3级特权最低。当IOPL值确定后,如果当前的特权级别在数值上小于等于IOPL的值,那么,该I/O指令可执行否则将发生一个保护异常。②NT嵌套任务标志32位CPU允许执行多个任务,任务之间可以互相切换和嵌套。当NT=1时,表示当前执行的任务嵌套于另一个任务中,任务完成后可以用IRET指令返回原来的任务;当NT=0时,表示当前执行的任务是独立任务,不能用IRET指令终止该任务返回。第2节32位CPU的内部寄存器12③RF恢复标志该标志与调试寄存器一起用于断点和单步操作。程序在执行断点或单步之前,先对该位进行检查,当RF=1时,下一条指令的所有故障均被忽略。在成功地完成了一条指令时RF将自动复位为0。④VM虚拟8086方式标志当80386处于保护模式时,如果该标志的值为1,则表示CPU处于虚拟的8086方式下,否则,处理机处于一般保护方式下的工作状态。第2节32位CPU的内部寄存器13第2节32位CPU的内部寄存器(3)段寄存器除了CS、DS、ES和SS外,32位的386CPU还引入了另外两个16位的段寄存器FS和GS。通常,FS和GS用来存放数据段的段地址,也称为附加段寄存器。(4)其它寄存器32位CPU还包括系统地址寄存器、调试寄存器和测试寄存器等,这些寄存器主要供操作系统使用,以支持虚拟存储管理与多任务。对于应用程序来说,一般不使用这些寄存器。14物理地址的计算方式实方式下,32位CPU的内存管理与16位CPU是一致保护方式下,段地址可以长达32位,其值可以不是16的倍数,每个段的最大容量可达4G。段寄存器的值表示的不是段基地址,而是段基地址的“选择器”,段基地址需由操作系统通过一定的方法取得,然后再和段内偏移量相加,从而求得存储单元的物理地址,与16位CPU的物理地址计算完全不同段寄存器的引用代码段寄存器CS:CS和EIP结合实现取出下条指令。堆栈段寄存器SS:在实模式下,32位CPU把ESP的低16位SP作为指向堆栈的指针,SS和SP结合实现栈顶单元数据段寄存器DS:是主要的数据段寄存器,是除访问堆栈以外数据时的默认段寄存器。存储单元的内容第3节32位CPU的内存管理15第3节32位CPU的内存管理存储单元的内容32位CPU存储单元内容的存储格式与16位CPU的存储格式完全一致,也都采用“高高低低”的原则来存取数据。例题16第4节32位地址的寻址方式立即寻址:指令中的立即数可以是32位。例:MOVEAX,11223344HMOVEBX,1寄存器寻址:8个32位通用寄存器EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP可供使用。如:MOVEDX,EAXMOVESP,EBP存储器寻址当用32位地址偏移量进行寻址时,内存地址的偏移量可分为三部分:一个32位基址寄存器,一个可乘1、2、4或8的32位变址寄存器,一个8位/32位的偏移常量,并且这三部分还可进行任意组合,省去其中之一或之二。具体组合见图。17第4节32位地址的寻址方式18第4节32位地址的寻址方式说明:(1)比例因子:是386及其后继机型新增加的寻址方式中的一个术语,其值可为1、2、4、8。在寻址中,可用变址寄存器的内容乘以比例因子来取得变址值。这类寻址方式对访问元素长度为2、4、8字节的数组特别有用。(2)和有效地址相组合的段寄存器的规定①地址中寄存器的书写顺序决定该寄存器是基址寄存器,还是变址寄存器;如:[EBX+EBP]中的EBX是基址寄存器,EBP是变址寄存器,而[EBP+EBX]中的EBP是基址寄存器,EBX是变址寄存器;②默认段寄存器的选用取决于基址寄存器,当基址寄存器是EBP或ESP时,默认的段寄存器是SS,除此之外默认的段寄存器是DS;③在指令中,如果使用段前缀的方式,则显式段寄存器优先。19第4节32位地址的寻址方式32位存储器寻址指令举例:MOVAX,[123456H];默认段寄存器DSMOVEDX,[EBX+EBP];默认段寄存器DSMOVEBX,[EBP+EBX];默认段寄存器SSMOVEAX,[EAX+100H];默认段寄存器DSMOVEDX,ES:[EAX*4+200H];显式段寄存器ESMOV[ESP+EDX*2],AX;默认段寄存器SSMOVEBX,GS:[EAX+EDX*2+300H];显式段寄存器GSMOVAX,[ESP];默认段寄存器SS20第5节32位CPU指令系统数据传送指令算术运算指令逻辑运算和移位指令控制转移指令串操作指令21第5节32位CPU指令系统一、数据传送指令1.通用数据传送指令组(1)数据传送指令MOVMOV指令的格式、功能和使用及需注意的地方都与前面介绍的相同,只是在传送数据的位数上可以是8位、16位或32位。例如:MOVEAX,12345678HMOVEAX,EBXMOVEAX,[EBX]MOVES:[EBX+EDX*4],DX22第5节32位CPU指令系统(2)传送填充指令MOVSX/MOVZX指令的主要功能和限制与MOV指令类似,不同之处是在传送时,对目的操作数的高位进行填充。根据其填充方式,又分为符号填充和零填充。符号填充指令MOVSX的填充方式是用源操作数的符号位来填充目的操作数的高位数据位;零填充指令MOVZX的填充方式是恒用0来填充目的操作数的高位数据位。例如:MOVBL,95HMOVSXAX,BL;AX=FF95HMOVSXESI,BL;ESI=FFFFFF95HMOVZXESI,BL;ESI=00000095H23第5节32位CPU指令系统(3)交换指令XCHG交换指令除交换的数据位数可以是32位以外,其余的都与前面介绍的指令相同。(4)进栈指令PUSH进栈指令PUSH的格式与前面介绍的相同,只是功能增强了:一是操作数长度可以达32位,二是操作数还可以是立即数。例如:PUSHEAXPUSHGSPUSH1234HPUSH11223344H24第5节32位CPU指令系统(5)出栈指令POP出栈指令POP除允许弹出32位操作数外,其余的同前面介绍的POP指令。(6)32位通用寄存器全进栈指令PUSHAD和全出栈指令POPADPUSHAD指令和POPAD指令提供了压入和弹出8个32位通用寄存器的有效手段。25第5节32位CPU指令系统2.地址传送指令组(1)装入有效地址指令LEALEA指令的格式和功能同前介绍,只是目的操作数可以是16位或32位通用寄存器。例如:MOVEBX,11223344HMOVECX,12345678HLEAESI,[EBX+ECX+1200H];执行后ESI=23569CBCH(2)指针送寄存器和段寄存器指令LDS/LES/LFS/LGS/LSS该组指令的指令格式如下:LDS/LES/LFS/LGS/LSSREG,SRC功能:把内存单元的一个“低字”传送给指令中指定的16位寄存器,把随后的一个“高字”传给相应的段寄存器(DS、ES、FS、GS和SS)。26第5节32位CPU指令系统(3)标志传送指令组PUSHFD和POPFD80386新增加的32位标志寄存器进栈和出栈指令有PUSHFD和POPFD,这两条指令是PUSHF和POPF指令的扩展。PUSHFD指令的功能是将整个标志寄存器的内容压入堆栈;POPFD指令的功能是将栈顶的一个双字弹出到32位的标志寄存器中。(4)累加器专用传送指令组80386累加器专用指令组含有IN、OUT和XLAT三条指令。这三条指令的格式和功能同前面介绍,只是在使用时可以是32位。例如:INEAX,DX;从DX规定的端口输入一个双字OUT20H,EAX;输出一个双字到20H端口换码表指令XLAT在32位指令中,存放基值的寄存器可以是EBX。27第5节32位CPU指令系统二、算术运算指令1.加、减、乘和除法指令组80386加法、减法、乘法和除法指令组的格式和功能同前面介绍,不同点是操作数可以扩展到32位。例如:ADDEAX,EDXADCEAX,DWORDPTR[BX]INCECXSUBEDI,4SBBDWORDPTR[EDI],DXDECESICMPEAX,EDXNEGEAXMULDWORDPTR[BX+3]DIVEBX28第5节32位CPU指令系统2.符号扩展指令组除CBW、CWD外,还有CWDE和CDQ。它们的格式为:
本文标题:32位汇编.
链接地址:https://www.777doc.com/doc-2918689 .html