1、第九章 高档微处理器Pentium 一. 概述 二. 寄存器组 三. 实方式下存储器地址的产生 四. 保护方式下存储器地址的产生 五. 保护机制 六. 寻址方式 七. 指令系统 八. 实模式下的汇编语言程序设计 九. 保护方式下的汇编语言程序设计,一. 概述,1. Pentium的特性1) 与8086/8088相比2) 两种工作方式: 实方式和 保护方式 2. Pentium的内部结构,1. Pentium的特性,工作速度更快,1) 主频加快 133Mhz, 350Mhz,450Mhz,750Mhz,1Ghz, .,2) 字长加长(内部寄存器, 内部总线等) : 32位,3) 总线传输率提高:
2、总线64位, 并支持突发式读写(使总线周期缩短),4) 先进执行技术 (指令流水线, 分支预测, 高速缓存等),指令流水线 ( Computer Pipeline) 原理象工业生产上的装配流水线: 指令流水线由多个不同功能的电路单元组成, 一条指令分成多个步骤分别由这些电路单元执行. 由于使多条指令或多个操作并行处理, 可实现在一个时钟周期完成一条指令, 提高CPU的执行速度.注意: 每条指令的执行步骤并未减少,CPU执行指令的过程: 1. 取指令FI (Fetch Instruction): 从内存或高速缓存中读取指令 2. 译码D (Decode): 将指令进行解码 3. 取操作数FO (
3、Fetch Operands): 获取执行指令所需的数据 4. 执行指令E (Execution Instruction): 执行指令 5. 回写W (Write Back): 将执行结果保存到内存或某个寄存器中.,在Dos下: 单任务 应用程序和操作系统是同级的 应用程序可以管理系统的所有资源(包括内存,各端口,中断向量表等),具有保护功能,故, 一个编得不好的程序会影响整个系统的运行,甚至造成死机.,例如: 一个程序把键盘中断关掉了,所有程序就都不能从键盘获得键入的数据,直到有程序重新打开键盘为止. 一个程序陷入死循环,没有其他程序可以把它终止掉,造成系统死机.,在Windows下: 多任
4、务 应用程序和操作系统不是同级的, 即程序是有级别之分的.操作系统工作在最高级0级中,而应用程序工作在最低级3级中, 所有的资源对应用程序来说是被“保护”的:应用程序对IO端口和内存的访问受到限制, 使其无法访问其他程序运行的内存.,故, 一个编得不好的程序不会影响整个系统的运行,例如: 如果DOS应用程序无法正常返回系统, 只是出现该程序未正常结束的 提示, 允许用户强行结束该任务;并不影响其他程序(任务)的执行.,支持虚拟存储器,程序的局部性特点: 因程序的代码和数据大都按顺序存放, 如果存储器中的某一单元被访问, 其邻近单元可能很快也被访问; 如果某一单元被访问,该单元将可能很快被再访问
5、.,程序的局部性特点是高速缓存和虚拟存储器的理论基础,高速缓存Cache: 解决CPU与主存储器间的速度冲突., 采用比DRAM读写速度更快的SRAM构成,用来存储CPU可能最需要的程序或数据快. 每次访问主存储器时,都先访问高速缓存, 若访问的内容在高速缓存中,就从高速缓存获取程序或数据;否则,再访问主存储器,获取需要的数据,并把有关内容及相关数据块取入高速缓存。,虚拟存储器Virtual Memory: 解决实际安装的内存空间小,而运行大型程序或多任务需要大空间的冲突., 尽管Pentium可寻址的物理空间达4G(32根地址线), 实际不会安装如此大的内存(PC机一般16MB256MB).
6、 Pentium内的存储器管理机制支持虚拟存储器的使用,提供比实际安装的内存大得多的存储空间.使程序员在编写大型程序时,不用考虑计算机中物理存储器的实际容量.并使系统能实现多任务的运行. 采用软件和硬件相结合的技术(虚拟存储技术),将程序划分为多个固定大小的块(称为页面),当需要的时候,页面被调到主存内;不需要时,就保存在磁盘上.,2) 两种工作方式 (实方式和保护方式),开机/复位后, CPU运行在实方式下, 通过设置控制寄存器CR0中的D0位为1, 切换至保护方式.,实方式: 相当一个可进行32位操作的快速8086/8088,实方式下, CPU不能发挥其优越性, 不能支持多用户, 多任务的
7、操作系统., I/O地址为16位,可寻址的I/O空间仍为64K但对I/O端口的读写访问受到特权级别等的限制, 支持虚拟8086方式, 把V86任务(DOS应用程序)作为保护方式下的一个任务运行.可支持多个V86任务, 每个V86任务是相对独立的., 特权级4个和完善的特权检查机制, 保证程序的安全性, 实现任务间的隔离., 支持多任务, 能够快速地进行任务切换和保护任务环境, 采用分段管理机制和分页管理机制为程序的共享和保护, 以及虚拟存储器提供了硬件支持, 32根地址线有效,可寻址4G的物理地址空间,保护方式下:,指令指针,控制 ROM,控制部件,地址生成 (U流水线),地址生成 (V流水线
8、),ALU (U流水线),ALU (V流水线),整数寄存器组,桶形移位器,8K字节数据高速缓存,TLB,浮点部件,控制 寄存器组,加法,除法,乘法,总 线 部 件,页 面 部 件,预取缓冲器 指令译码器,8K字节代码高速缓存,TLB,分支目标 缓冲器,分支检验 与目标地址,预取 地址,控制,64位 数据总线,32位 地址总线,32位地址总线,64位数据总线,256,32,32,32,32,32,32,2. Pentium内部结构,二. 寄存器组 1. 实方式下寄存器组 2. 保护方式下寄存器组 3. 控制寄存器 4. 标志寄存器,2. Pentium 保护模式下寄存器组,在实方式下寄存器组的基
9、础上增加了4个寄存器:, 全局描述符表寄存器GDTR (48位)Global Descriptor Table Register 中断描述符表寄存器IDTR (48位)Interrupt Descriptor Table Register 局部描述符表寄存器LDTR (16位)Local Descriptor Table Register 任务寄存器TR (16位)Task Register,3. 80386的4个控制寄存器: CR0 , CR4 : 包含一些控制CPU操作的信息如: 工作方式控制位 PE 启用或禁用分页管理机制的控制位 PG控制浮点协处理器操作的控制位 MP, EM, TS,
10、 ET, NE控制高速缓存的控制位 CD, NW CR1 保留,供今后开发的处理器使用不能使用CR1, 否则将引起无效指令操作异常 CR2和CR3 : 供分页管理机制使用CR2用于发生页异常时报告出错信息(当发生页异常时,处理器把引起页异常的线性地址保存于CR2中,操作系统中的页异常处理程序可以检查CR2的内容,查出线性地址空间中的哪一页引起本次异常)CR3用于保存页目录表的起始物理地址,控制寄存器CR0,PE=0, CPU运行于实方式 ; PE=1, CPU运行于保护方式,;从实方式切换到保护方式 ; 切换前的准备工作 ;切换 MOV EAX, CR0 OR EAX, 1 MOV CR0,
11、EAX,注意: 开机或复位时,PE=0, CPU工作在实方式,PG=0, 关闭分页管理机制此时分段管理机制产生的线性地址直接作为物理地址. PG=1, 启用分页管理机制此时线性地址经过分页管理机制转换成物理地址.,注意: 开机或复位时,PG=0, CPU关闭分页管理机制,4. 标志寄存器EFLAGS,IOPL (Input/Output privilege level 输入/输出特权级标志) 用于保护方式下, 指定执行I/O指令的特权级别. 如果当前特权级别CPL大于或等于IOPL,可执行I/O指令, 否则产生一个保护异常。VM (虚拟8086方式标志)VM=1,表示工作在虚拟8086下方式。
12、VM=0, 表示工作在一般的保护方式下,三. 实模式下存储器地址的产生,与8086/8088相似, 物理地址20位 物理地址PA = 段地址 偏移地址= ( 段寄存器 ) 16 + 偏移地址= ( 段寄存器 ) 10H + 偏移地址即段寄存器的内容左移4位,加上偏移地址段地址由段寄存器提供: CS、SS、DS、ES、FS、GS 16位 偏移地址由指令中的寻址方式提供, 范围在0FFFFh。,特点: 1) 段地址直接由段寄存器得到2) 20根地址线有效,四. 保护模式下存储器地址的产生,当PG=0时, 分页管理机制关闭, 线性地址就是物理地址, 将存储空间分为若干个段,存储单元的地址为: 段基地
13、址(32位) + 段内偏移地址(32位) 其中 段基地址通过指令中的段寄存器间接获取偏移地址由指令中的寻址方式获取. 如 MOV AX, DS: EBX存储单元的段基地址通过DS 寄存器间接获取偏移地址为EBX寄存器的内容,分段管理机制, 与实方式下不同的是, 段基地址不是通过段寄存器直接得到,保护方式下, 段寄存器起到的是索引的作用(称为段选择子)., 每个段由三个参数定义: 段基值: 指示段在线性地址空间中的起始地址. 32位 段界限: 规定段的大小. 04G 段属性: 规定段的主要特性,保护方式下的段, 用于表示段的三个参数的数据称为描述符,每个描述符长8字节, 每个段都有一个相应的描述
14、符来描述.,为支持虚拟存储管理和多任务的处理,使用了多种类型的描述符, 根据功能的不同, 在不同类型的描述符中存放不同的控制信息. 利用描述符的内容, CPU可以自动完成访问范围和权限的检查.,存储段描述符格式,存储段用于存放程序直接进行访问的代码和数据的段。 存储段描述符用于描述存储段。,DT: 表示描述符的类型Descriptor TypeDT=1, 存储段描述符DT=0, 系统段描述符或门描述符 E: 可执行位ExecuteE=1, 指示段是可执行的,是代码段,该描述符为代码段描述符E=0, 指示段是可执行的,是数据段,该描述符为数据段描述符 W/R: 可读/写位Write/Read对数
15、据段,W=1, 表示该段可读可写;W=0, 可读不可写对代码段,R=1, 表示该段可执行可读;R=0, 可执行不可读 G: 段界限粒度位GranularityG=0, 界限粒度为字节; G=1,界限粒度为4K字节(212)当G=1 时,一个段的最大为: 220 4K = 232,DPL: 表示描述符特权级Descriptor Privilege Level指示所描述的段的特权级。共4个级别(03级) 。用于权限检查,以决定对该段能否进行访问。P: 表示段是否存在位 PresentP=1, 表示该描述符所描述的段在内存中P=0, 表示该描述符所描述的段不在内存中A: 访问位AcessA=1, 指
16、示描述符被访问过。A=0, 指示描述符未被访问过 ED/C: 对数据段, 表示数据扩展方向位 (0向高,1向低)对代码段, 表示类型 (1一致代码段, 0普通代码, 用于特权检查),系统段描述符及门描述符格式,系统段是为实现存储管理所使用的一种特殊段, 系统段描述符用于描述系统段。 门描述符用于描述控制转移的入口点。, 一个任务可以有多个段, 每个段需要一个描述符来描述., 有三种类型的描述符表: 1) 全局描述符表GDT( Global Descriptor Table ) 2) 局部描述符表LDT ( Local Descriptor Table ) 3) 中断描述符表IDT( Inter
17、rupt Descriptor Table ), 为便于组织管理, 把描述符组织成线性表, 称为描述符表., 全局描述符表GDT包含每个任务都可能或可以访问的段的描述符,通常包含描述操作系统所使用的代码段, 数据段和堆栈段的描述符,也包含多种特殊数据段描述符, 如各个用于描述任务LDT的特殊数据段等.在任务切换时, 并不切换GDT., 每个任务可以访问自己的LDT, 不能访问其他任务的LDT.通过LDT可以使各任务私有的各个段与其他任务相隔离, 达到保护的目的.通过GDT可以使各任务都需要使用的段能够被共享.在整个系统中只有一张GDT,但可以可以有多张LDT, 局部描述符表LDT它定义了某个任
18、务用到的局部存储器地址空间每个任务可以有一张自己的局部描述符表LDT:含该任务的代码段, 数据段和堆栈段的描述符, 也包含该任务所使用的一些门描述符.随着任务的切换, 系统当前的局部描述符表LDT也随之切换., GDT,LDT,IDT是保护方式下重要的特殊段, 包含有对段机制所用的重要表格,为方便快速地定位这些段, CPU采用专用寄存器保存这些段的基地址和界限.,全局描述符表GDT 包含每个任务都可能或可以访问的段的描述符, 最多包含213个描述符,局部描述符表LDT LDT段描述符 局部描述符表寄存器LDTR LDTR高速缓冲器,局部描述符表LDT 它定义了某个任务用到的局部存储器地址空间
19、最多包含213个描述符,如何从描述符表中获取所需的描述符?即哪个描述符表?哪个描述符?,由段寄存器给出.,在保护方式下, 段寄存器包含的内容称为段选择子, 为访问存储器形成线性地址时, CPU要使用段选择子所指定的描述符中的基地址等信息。,TI: 描述符表指示位Table IndicatorTI=0 指示从 GDT中读取描述符TI=1 指示从 LDT中读取描述符,RPL: 表示请求特权级Requested Privilege Level指示所描述的段申请的特权级。共4个级别(03级) 用于权限检查,以决定对该段能否进行访问,描述符索引Descriptor Index指示所要读取的描述符在描述符
20、表中的序号.,每当把一个选择子装入到某个段寄存器时, CPU自动从描述符表中取出相应的描述符, 把描述符表中的信息保存到对应的高速缓冲寄存器中. 此后, 在对该段访问时, CPU都使用高速缓冲寄存器中的描述符信息, 而不用再从描述符表中取描述符.,为避免每次访问存储器时, 都要访问描述符表而获取对应的描述符,为每个段寄存器都配有一个高速缓冲寄存器, 对程序员而言是不可见的., 一个任务可使用的整个虚拟地址空间的描述符, 一半在全局描述符表中,另一半在局部描述符表中. 每个描述符所描述的段最大可达4G字节, 所以, 最大的虚拟地址空间可为: 213 232 2 = 246 = 64T,分段管理机
21、制: 将虚拟地址转换为线性地址,若(DS)=10h, (EBX)=12345678h, 即虚拟地址10:12345678h, 由选择子10H所指定的GDT中的描述符的基地址为2000000H,则线性地址为 32345678H,例 MOV AL, DS:EBX,五. 保护机制, 在执行指令过程中, 保护机制要进行一系列的检查. 这些检查包括: 类型检查 (可否执行/可否读/可否写) 描述符表限长检查 (段选择子是否超出描述符表的限长) 段界限检查 (偏移量是否超出段的界限) 特权级检查 (特权级是否满足操作条件) 指令集检查 (当前条件下, 该指令是否允许执行), 分段, 分页, 描述符是保护机
22、制的关键元素., 只有检查通过, 访问才能进行; 否则出现保护错误.,例 数据访问的特权级检查,描述符缓冲区,当前CS,数据段描述符,CPU进行特权检查,可访问的条件: RPL或CPL的权限高于等于DPL,六. 寻址方式 1. 立即数寻址操作数在指令中,是一个常数,可为8位、16位或32位。 2. 寄存器寻址操作数在寄存器中,可为8位、16位或32位寄存器. 3. 存储器寻址操作数在存储器中, 指令中给出偏移地址的来源. 段地址由默认的段寄存器或使用段跨越前缀给出.支持8086/8088的16位偏移的存储器寻址方式,并增加了32位偏移的存储器寻址方式.,16位偏移的存储器寻址方式直接,寄存器间
23、接,相对寄存器,基址加变址,相对基址加变址,16位 基址寄存器,常数偏移量,16位 变址寄存器,32位偏移的存储器寻址方式,注意: 实方式和保护方式下, 均可以使用16位或32位偏移的存储器寻址方式, 但: 在实方式下, 段内偏移不能超过64K 在保护方式下, 段内偏移可超过64K, 最大是4G.,七. 指令系统,Pentium是32位处理器, 操作数的长度可以是8位, 16位, 32位。 是在8086/8088指令集上的扩展。,1. 数据传送指令 MOVSX, MOVZX, PUSHA, POPA, PUSHAD, POPAD2. 算术运算指令 3. 逻辑运算和移位指令 移位次数为1, CL
24、, 或一个8位立即数4. 控制转移指令 5. 串操作指令 INSB, INSW, OUTSB, OUTW6. 处理器控制指令7. 条件字节设置指令 根据一些标志位设置某个操作数为或8. 位操作指令 直接对一个操作数中的某位进行测试,设置,扫描9. 高级语言支持指令 ENTER, LEAVE, BOUND10. 保护方式指令 LLDT, SLDT, LTR, STR, ARPL, LAR, LSL, VERR. VERW,系统控制指令集(操作系统类指令集), 为保证操作系统的安全,保护方式下支持4个特权级(03级),相应地,这些操作系统类指令也可分为三种: 1) 实方式及保护方式任何特权下可执行
25、的指令 2) 实方式及保护方式特权级下可执行的指令 3) 仅在保护方式下执行的指令, 如果在不满足条件的情况下执行这些指令,将引起非法操作故障(中断类型号6)., 这些指令主要用于保护方式下,也用于从实方式进入保护方式作准备.通常只在操作系统中使用这些指令,而不在应用程序代码中使用这些指令。,八. 实方式下的汇编语言程序设计,在实模式下, Pentuim相当于一个可进行32位操作的快速8086, 可使用32位的通用寄存器例 MOV EAX, CR0 可使用新增的指令例 LGDT src 可采用扩展的寻址方式, 注意段的最大长度仍是64K 例 MOV BX, EAX,注意: 尽管在实模式下只能使
26、用16位段,但可以使用32位操作数, 也可以使用以32位形式表示的存储单元地址, 但段的最大长度为64K.,.586 ;支持对非特权80586指令的汇编 code SEGMENT USE16 ;USE16表示16位段ASSUME CS: code start: MOV CX, 32 ;32位寄存器 MOV EBX, CR0 next: ROL EBX, 1 ;取显示位的值MOV DL,30HJNC printADD DL, 1H ;转变为数字的ASCII print: MOV AH, 2H ;显示INT 21H LOOP nextMOV AH, 4CH ;返回DOSINT 21H code E
27、NDSEND start,例 将CR0寄存器中的内容以二进制形式显示出来,九. 保护方式下的汇编语言程序设计,参考书: 清华出版杨季文编 西安交大出版房有定编,Window(保护方式下)32位汇编语言程序: Win32汇编语言程序, WIN32应用程序使用 FLAT内存模式,相当于运行在一个连续的 4GB 空间, 无须和段寄存器打交道.由操作系统完成虚拟地址到物理内存地址间的转换。要求编写应用程序时必须严格遵守 Windows 的规范,否则极易引起内存的保护模式错误。 与用C语言一样, 可以使用Windows 为编写应用程序提供的大量资源。如调用Windows API (Application Programming Interface)函数. 应用场合:对Win32应用程序执行机制分析、 病毒清除、加密解密;对于某些要求较高执行速度时.,参考网站: http:/,
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1