大工汇编语言程序设计 第二章 80x86计算机组织
发布时间:2024-04-04 08:04:08浏览次数:25汇编语言程序设计主 题: 第二章 80x86 计算机组织(第 3-4 节)内 容:第二章 概述 这周我们将学习第二章中的第 3-4 节。这两节主要介绍 80x86 计算机组织中寄存器组部分和外部设备部分。本周学习要了解通用寄存器和专用寄存器,熟悉寄存器间的默认分配关系,了解外部设备工作端口寄存器和 I/O 地址空间。第三节 CPU 工作寄存器组1、寄存器组分类1)寄存器概念:寄存器是中央处理器内的组成部件。寄存器是存储容量有限的高速存储部件,它们可以用来暂存指令、数据和地址2)8086/8088 寄存器组分类: 数据寄存器 AX、BX、CX、DX 指针及变址寄存器:SP、BP、SI、DI 段寄存器:CS、DS、ES、SS 控制寄存器:IP、FLAGS说明:AX 又称累加器专用寄存器,因为累加器默认的寄存器就是它,CX又是计数器寄存器,很多指令都利用 CX 来保存程序执行次数的计数值。4 个通用寄存器可以拆分开来使用,比如 BX 可以分为高低 8 位来使用,分别记做AH 和 AL。AX 和 DX 又可以联合使用用于存放 32 位数据,其中 AX 存放低 16第 1 页 共 5 页
位数据,高 16 位数据存放于 DX 寄存器中。我们上周已经知道了存储器的分段方式,对于不同的分段,我们使用不同的段寄存器来存储段地址,堆栈段指认 SS,数据段指认 DS 和 ES,代码段指认CS。对于 80386 以上的机器还有 FS 和 GS 数据段寄存器。指针及变址寄存器用于和段寄存器联合使用寻址。在串处理指令中,数据段 DS 和 SI 用来存储源数据区,附加段 ES 和 DS 用来存放目的数据区。专用寄存器 IP/FLAGS,一般是不允许被修改的,不为用户所使用, IP 称为程序指针寄存器,FLAGS 称为标志状态寄存器,需要了解其中各标志位代表的状态OFDF IF TF SF ZF AF PF CF15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0OF 溢出位 1 为溢出DF 方向位 1 为减量方向IF 中段 1 为允许中断SF 符号 1 为负ZF 零 1 为零AF 辅助进位 1 为是有进位PF 奇偶 1 为偶CF 进位 1 为有进位3)存储器与寄存器的比较 4)80x86 的寄存器组第 2 页 共 5 页
与 8086/8088 寄存器组比较,80x86 寄存器最大的特点就是从 16 位扩展到 32 位了,AX 扩展到 EAX,BX 扩展到 EBX 等等,这样的变化也为程序处理带来很大便利,从而使计算机运行速度大大提高 IP 扩展到 EIP,FLAGS 扩展到 EFLAGS,从而标志寄存器内容也更多,除了 FLAGS 需要熟悉的标志位内容外,扩展部分标志位代表的意义了解即可2、保护模式下的 80x861)保护模式支持的功能:多任务处理功能、支持虚拟存储器特性 2)保护模式下的寻址:保护模式下的逻辑地址已经不是实模式下的真实的存储器物理地址寻址了,而是在虚拟存储器中通过逻辑地址来寻址,除了涉及存储器分段内容外还要涉及到存储器分页分块的知识,这部分内容大家了解下即可第二节 外部设备1、外设与主机的通信 1)外部设备与主机的通信是通过外设接口进行的,每个接口分配 3 类寄存器,包括数据寄存器、状态寄存器、命令寄存器。数据寄存器用于具体的通信内容的交流,状态寄存器用于存放外设的工作状态,主机只有在外设空闲的时候才能与其通信,命令寄存器用于主机对外设的控制等。例如 CPU 要启动磁盘,就要对磁盘发送启动命令,而这条指令就存放在命令寄存器中 说明:各种外部设备接口都有以上三种类型的寄存器,但是每个接口分配的寄存器的数量是不定的,有可能外设有多个数据寄存器、状态寄存器、命令寄存器,也有可能外设只需要一个数据和命令寄存器,并且把它们合二为一成第 3 页 共 5 页
为一类寄存器。 2)端口和端口号:端口就是外设中的每个寄存器的地址,我们称一个外设寄存器的地址为端口或端口号,端口号用 8 位或 16 位或 32 位 2 二进制代码表示 3)I/O 地址空间:计算机外设各种端号合在一起就形成了独立于存储器的 I/O 地址空间,以便于对外部设备的管理。I/O 地址空间可达 64KB,端口地址范围是 0000-FFFFH,地址用 16 位二进制代码表示。 本周要求掌握的内容如下:基本概念:通用和专用寄存器、标示寄存器各标志位意义、端口、 I/O 地址空间、保护模式寻址。 基本理论:通用寄存器的拆分和合并用法,AX 和 CX 的常用方式,段寄存器和指针及编址寄存器的默认联用关系,标志寄存器各标志位的意义。练习:1、如果一个程序执行前(CS)=0A7F0H,(IP)=2B40H,试问该程序的第一个字的物理地址是多少?(提示:物理地址=16 位段地址¿16D+16 偏移地址)2、字符串就是一串字符组成的数据,是一种数据类型。那么在 80x86 中,在处理字符串数据时请问源数据和目的数据地址(段地址和偏移地址)分别存放在哪些寄存器中?(提示: 在串处理指令中,数据段 DS 和 SI 用来存储源数据区,附加段 ES 和第 4 页 共 5 页
DS 用来存放目的数据区。)3、对于 80386,在 16 位乘法指令中,请问乘积为多少位,分别存放在哪些寄存器中?(提示:4 个通用寄存器可以拆分开来使用,比如 BX 可以分为高低 8 位来使用,分别记做 AH 和 AL。AX 和 DX 又可以联合使用用于存放 32 位数据,其中AX 存放低 16 位数据,高 16 位数据存放于 DX 寄存器中。)4、标志寄存器中,请思考溢出位和进位位代表的不同意义。(提示:OF 溢出位,1 为溢出;CF 进位,1 为有进位)第 5 页 共 5 页