《汇编语言程序设计》第十五章:32位80X86汇编
发布时间:2024-11-21
发布时间:2024-11-21
本章不再就程序设计的基本思想和方法进行介绍,而将主要精力放在32位的80X86保护模式汇编与之前所学的“实模式”汇编之间的主要区别之上。
汇编语言程序设计-------朱耀庭 ---------朱耀庭
http://
本章不再就程序设计的基本思想和方法进行介绍,而将主要精力放在32位的80X86保护模式汇编与之前所学的“实模式”汇编之间的主要区别之上。
第15章 32位80X86汇编 实模式下汇编语言程序设计的主体思想和方法是重要的, 这种思想和方法可以应用到任意一种不同CPU结构的计算 机上。 要开发相应CPU的汇编语言程序,只要有该CPU的逻辑结 构、寻址方式、机器指令集说明书和配套的汇编程序就应 该能够胜任。 因此本章不再就程序设计的基本思想和方法进行介绍,而 将主要精力放在32位的80X86保护模式汇编与之前所学的 “实模式”汇编之间的主要区别之上。 希 望 同 学 们 通 过 本 章 的 学 习 了 解 Win32 汇 编 , 了 解 在 Windows环境下如何调试和运行一个Win32汇编程序。
http://
南开大学 朱耀庭
本章不再就程序设计的基本思想和方法进行介绍,而将主要精力放在32位的80X86保护模式汇编与之前所学的“实模式”汇编之间的主要区别之上。
第15章 32位80X86汇编
15.1 386系统结构及内存寻址
15.2 WIN32汇编开发环境
15.3 WIN32汇编实践
http://
南开大学 朱耀庭
本章不再就程序设计的基本思想和方法进行介绍,而将主要精力放在32位的80X86保护模式汇编与之前所学的“实模式”汇编之间的主要区别之上。
15.1 386系统结构及内存寻址 8086CPU通过段寄存器左移4位加上IP或16位有效地址的 方式,巧妙地实现了20位的寻址,使其最大寻址空间达到 了220,即1MB。然而1MB的寻址空间仍然远远不能够满 足实际应用的需求,计算机技术的发展为解决这一问题给 出了新的解决办法。其一,扩大CPU段寄存器的字长,由 16位扩展为32位;其二,改变由段寄存器直接指定段基址 构造段地址的方式,给出一种全新的地址描述和构造方法。 本章要介绍的80X86系列保护模式寻址和386系统结构。 为了与之前的CPU兼容,任何一种新开发的80X86的CPU 都具备了两种寻址方式,即原有的实模式和新的保护模式, 在实模式下其寻址方式仍然与8086相同。
http://
南开大学 朱耀庭
本章不再就程序设计的基本思想和方法进行介绍,而将主要精力放在32位的80X86保护模式汇编与之前所学的“实模式”汇编之间的主要区别之上。
15.1 386系统结构及内存寻址 实模式汇编语言程序在运行时,程序对于计算机内部所有 的资源,包括CPU、内存、磁盘、端口等都具有绝对的访 问权。任何这种程序一旦通过设置CS:IP被赋于运行权 之后,它就会暂时地成为本台计算机的主宰。如果这是一 个恶意程序或是一个有BUG的程序的话,在运行过程中假 设不向操作系统交出控制权,这种主宰将成为永久,直至 系统重启。因此在实模式下的汇编语言程序基本没有“安 全”的概念。 实模式简单的分段思想,在8086 CPU诞生之初的确解决 了有限资源的访问控制问题,可以说是一种极其经典的工 程解决方案。但是当对容量和速度的需求进一步增加时, 这种分段思想就显得效率低下,不能满足实际需要 。
http://
南开大学 朱耀庭
本章不再就程序设计的基本思想和方法进行介绍,而将主要精力放在32位的80X86保护模式汇编与之前所学的“实模式”汇编之间的主要区别之上。
15.1 386系统结构及内存寻址 Intel公司于1985年10月推出的32位CPU,即80386DX微 处理器,针对上面提到的问题,进行了全新的设计。 在CPU的工作模式及内存寻址方面,8038
6DX是一个“质” 的分水岭,其主体设计思想一直沿用至今。 所以,早期人们又喜欢将保护模式下的汇编,即32位汇编 称之为386汇编。 同学们通过对386系统结构及内存寻址的学习,今后可以 胜任各种新的CPU汇编语言的程序设计工作。
http://
南开大学 朱耀庭
本章不再就程序设计的基本思想和方法进行介绍,而将主要精力放在32位的80X86保护模式汇编与之前所学的“实模式”汇编之间的主要区别之上。
15.1 386系统结构及内存寻址
15.1.1
386CPU的逻辑结构 80386CPU的工作模式
15.1.2
15.1.3
386CPU内存寻址
15.1.4
386CPU内存分页机制
http://
南开大学 朱耀庭
本章不再就程序设计的基本思想和方法进行介绍,而将主要精力放在32位的80X86保护模式汇编与之前所学的“实模式”汇编之间的主要区别之上。
15.1.1 386CPU的逻辑结构 这里所指的386CPU是指纯粹32位的CPU,它对内、对外 的数据总线都是32位,地址总线有32根,所以可直接寻址 的空间为232B=4096MB=4GB。和8086CPU相比, 80386有以下4个主要特点: (1) 支持多任务。80386能同时运行两个或两个以上的程序。 用一条机器指令就可以进行任务的切换。当然,在每一瞬 间,CPU都只能由一个程序占有,这一特点不变。只是 80386的结构决定并且保证了这种多任务切换的顺利实施。 (2) 支持存储器的段式管理和页式管理,为操作系统实现 虚拟存储系统提供了条件。
http://
南开大学 朱耀庭
本章不再就程序设计的基本思想和方法进行介绍,而将主要精力放在32位的80X86保护模式汇编与之前所学的“实模式”汇编之间的主要区别之上。
15.1.1 386CPU的逻辑结构(3) 具有保护功能,包括存储器保护、任务特权级保护和 任务之间的保护。80386将任务分为4个等级,称之为特 权级RING,分别是0, 1, 2, 3。其中0级最高,通常由操作 系统把持;3级最低,应用程序通常都工作在第3级。1、2 级保留,通常用于对操作系统的扩充。不过,自 Windows NT操作系统开始,为了使之能运行于尽可能多 的基于不同种类CPU的计算机平台之上,Windows的X86 版只使用了RING0级和RING3级,这是为了保证软件与某 些 仅 设 计 了 两 个 特 权 级 的 CPU 能 够 兼 容 。 通 常 所 用 的 Windows XP是基于Windows NT内核技术的,所以也只 有两个特权级可用。不过,如果自己在裸机上开发软件, 还是可以充分使用这4个特权级来达到更灵活的软件保护 功能。
http://
南开大学 朱耀庭
本章不再就程序设计的基本思想和方法进行介绍,而将主要精力放在32位的80X86保护模式汇编与之前所学的“实模式”汇编之间的主要区别之上。
15.1.1 386CPU的逻辑结构(4) 硬件支持调试功能。由于80386整体系统结构的特性, 使得程序的运行非常复杂,为软件调试带来了困难。所以 CPU内部设计了调试寄存器,为程序开发及其调试提供了 方便。 图15-1是80386CPU的内部逻辑结构图。由图中可以看出, 80386CPU的内部分为3大部分:总线接口单元、中央处 理单元和存储器管理单元。其中中央处理单元又可分成指 令译码单元和执行单元两部分。这里的总线接口单元与 8086CPU的BIU地位及作用类似,中央处理单元与 8086CPU的EU起着相同的作用,最大的区别在于这里增 加了存储管理单元。 图15-1 80386内部逻辑结构http://南开大学 朱耀庭
本章不再就程序设计的基本思想和方法进行介绍,而将主要精力放在32位的80X86保护模式汇编与之前所学的“实模式”汇编之间的主要区别之上。
15.1.1 386CPU的逻辑
结构
12 3
总线接口单元 中央处理单元存储器管理单元 寄存器
4
http://
南开大学 朱耀庭
本章不再就程序设计的基本思想和方法进行介绍,而将主要精力放在32位的80X86保护模式汇编与之前所学的“实模式”汇编之间的主要区别之上。
1. 总线接口单元 80386的总线接口单元BIU(Bus Interface Unit)主要用 来实现与外部的联系,控制进出CPU的所有数据、地址及 控制信号。 8086有6字节的指令流队列,而80386BIU改进为含有16 字节的指令流队列。以指令平均长度3.5个字节计算,大 约可以预取4至5条80386指令 。
http://
南开大学 朱耀庭
本章不再就程序设计的基本思想和方法进行介绍,而将主要精力放在32位的80X86保护模式汇编与之前所学的“实模式”汇编之间的主要区别之上。
2. 中央处理单元 中央处理单元由指令译码单元和执行单元两部分组成。 (1)指令译码单元 与8086CPU所使用的基于逻辑电路设计技术的组合逻辑 控制器技术不同,80386采用微程序控制技术。即机器指 令在80386中执行时并不像在8086里那样由EU的执行电 路来直接执行,而是先分解为一系列的微指令(称之为微 程序)来实现。 (2)执行单元 与8086CPU不同的是,执行单元EU执行的是经过译码单 元处理好的微指令,而不是如程序员所接触到的机器指令。
http://
南开大学 朱耀庭
本章不再就程序设计的基本思想和方法进行介绍,而将主要精力放在32位的80X86保护模式汇编与之前所学的“实模式”汇编之间的主要区别之上。
3. 存储器管理单元 存储器管理单元MMU(Memory Mangement Unit)用来 实现逻辑地址到物理地址的转换,它相当于8086用于构造 地址用的地址加法器。 这种分段管理的思想,使得实模式下的程序可以同时访问 若干个64KB的内存段,从而实现最大1MB的内存寻址。 如果需要用到大于1MB的空间,在程序中应该频繁地操作 段寄存器来实现正常运行。如此一来,程序就必然变得复 杂而且容易出错。 80386中使用专门的存储管理单元MMU来管理逻辑地址到 物理地址的转换,因此克服了以上缺陷。
http://
南开大学 朱耀庭
本章不再就程序设计的基本思想和方法进行介绍,而将主要精力放在32位的80X86保护模式汇编与之前所学的“实模式”汇编之间的主要区别之上。
3. 存储器管理单元
图15-2指出了MMU由逻辑地址转换为物理地址的原理。 其中页管理单元的虚线框表示页管理单元是一个可选部分, 当页管理功能不启用时,线性地址就是物理地址。 因为80386最终形成的线性地址是32位的,物理地址也是 32位寻址的,所以可以直接寻址的最大寻址空间为 232=4GB。既然32位的线性地址可以用来直接寻址,为 什么还要“多此一举”地转换为另一个32位的物理地址呢? 本节之后的内容将试图解决并且回答这一问题。 图15-2 逻辑地址转换为物理地址 演示动画http://南开大学 朱耀庭
本章不再就程序设计的基本思想和方法进行介绍,而将主要精力放在32位的80X86保护模式汇编与之前所学的“实模式”汇编之间的主要区别之上。
4. 寄存器1) 通用寄存器 80386的通用寄存器为32位。为了实现与8086程序的兼容 性,32位的通用寄存器低16位与8086中的通用寄存器一 样,并使用原有的寄存器名称进行访问。如图15-3所示, 8个32位的通用寄存器分别为EAX,EBX,ECX,EDX, ESI,EDI,EBP,ESP,它们的低16位仍然可以用AX, BX,CX,DX,SI,DI,BP,SP单独访问。AX,BX, CX,DX4个16位的通
用寄存器,其高低8位与8086一样仍 然可以用AH,AL,BH,BL,CH,CL,DH,DL单独访 问。 图15-3 80386的通用寄存器组
http://
南开大学 朱耀庭