这里有一块 80X86
文章中穿插了一些个人的理解,特别是绿色字体部分,如有不周,烦请指正。
上一篇文章地址链接: 【计算机与汇编原理②】——存储器系统【RAM ROM 高速缓冲存储器Cache】.
下一篇文章地址链接: 【计算机与汇编原理④】——指令系统(上)【标志寄存器 立即寻址 寄存器寻址 直接/寄存器/基址/变址寻址】.
● 微处理器由一片或少数几片大规模集成电路组成的中央处理器。这些电路执行控制部件和算术逻辑部件的功能。
● 微处理器能完成取指令、执行指令,以及与外界存储器和逻辑部件交换信息等操作,是微型计算机的运算控制部分。它可与存储器和外围电路芯片组成微型计算机。
● 位(bit):计算机所能表示的最小最基本的数据单位,它指的是取值只能为 0 或 1 的一个二进制数值位。
● 字节(byte):由8个位二进制位组成,通常用作计算存储容量的单位。
● 字长:微处理器一次可以直接处理的二进制数码的位数。它通常取决于微处理器内部通用寄存器的位数和数据总线的宽度。微处理器的字长有4位、8位、16位、32位和64位等等。
● 寻址能力:CPU能直接存取数据的内存地址的范围。它由CPU的地址总线的数目决定。
● 主频(也叫时钟频率):用来表示微处理器的运行速度。主频越高表明微处理器运行越快,主频的单位是 MHz 。
● MIPS ( Millions of Instruction Per Second 的缩写):用来表示微处理器的性能——运算速度,即每秒钟能执行多少百万条指令。
● 微处理器的集成度:指微处理器芯片上集成的晶体管的密度。
最早的Intel 4004的集成度为2250个晶体管,而99年的Pentium III的集成度已经达到750万个晶体管以上,集成度提高了3000多倍。
● 微处理器的功能:从存储器中取出构成程序的一条指令,分析并执行这些指令,从而完成程序设定的任务。
● 基本功能模块:
总线接口单元 BIU:寄存器组
执行单元EU :运算器,控制器,寄存器组
● 80X86内部寄存器分为4类:
① 基本结构寄存器
② 浮点寄存器
③ 系统级寄存器
④ 调试测试寄存器
● 应用程序只能访问基本结构寄存器和浮点寄存器。(我们的课程只介绍基本结构寄存器)
◆ 补充说明:左为高位,右为低位
◆ 作用:用于存放操作数以及运算的中间结果等信息,在指令中广泛使用。
● 通用寄存器一共有八个,每一个都用专门的功能(后面专门介绍),且每一个都是从“ D0 到 D32 ”,一共有32位。
● 对于前四个通用寄存器:EAX、EBX、ECX、EDX,它们的高 16 位都是 “E” 为 “Extended” 缩写。
● (低)16位通用寄存器的汇编助记符为:AX、BX、CX、DX、BP、SP、DI、SI
● 32位通用寄存器的汇编助记符为:EAX、EBX、ECX、EDX、ESP、EBP、EDI、ESI
● 高8位通用寄存器的汇编助记符为:AH、BH、CH、DH 【注:“H” 是 “High” 的缩写】
● 低8位通用寄存器的汇编助记符为:AL、BL、CL、DL 【注:“L” 是 “Low” 的缩写】
● 举个栗子:
AH、AL是AX的高/低8位,AX是EAX的低16位,若设:EAX=12345678H
则: AX = 5678H,AH = 56H,AL = 78H
反之,当 “89H → AH”,“90H → AL” 后 ( 高16位还是保持不变,即“1234H” )
则: AX = 8990H,EAX = 12348990H
◆ 作用:存放逻辑段的段地址,用于存储器单元物理地址的形成。
◆ 补充说明:32 位称为 EIP ,低 16 位为 IP。
◆ 作用:存放指令所在单元的偏移地址。
◆ 补充说明:EFLAGS为 32 位寄存器,其中 FLAGS 为 16 位寄存器(D15 ~ D0)
◆ 作用:1. 存放状态标志。状态标志用于记录 CPU 运行结果状态。
2. 设置控制标志。控制标志用于控制 CPU 的某种操作。
● 状态标志:表示前面的操作执行后,算术逻辑部件处在怎样一种状态,这种状态会像某种先决条件一样影响后面的操作。有SF、ZF、PF、CF、AF和OF
● 控制标志:每个控制标志都对某一种特定的功能起控制作用。指令系统中有专门的指令用于控制标志的设置和清除。有DF、IF、 TF。
● 数据线:D63 ~ D0 一共 64 位。
● A31 ~ A0:高 32 位地址线
● BE7 ~ BE0:字节允许信号(存储体选中信号)外围电路对 BE7 ~ BE0 译码以产生 A2 ~ A0 信号
● 时钟输入: CLK
● 可屏蔽中断请求: INTR
● 非屏蔽中断请求 :NMI
● 系统复位信号 :RESET。系统复位后,程序运行的地址为: FFFFFFF0H
● 实模式 CS: F000H,IP: 0FFF0H
● 系统时钟:是微处理器内部与外部操作的同步时基信号,由时钟(CLK)输入信号来提供。
● 时钟周期:指时钟输入信号的周期,也表示为 T 状态。
● 总线周期:一段时间 CPU 通过总线与存储器、I/O交换一个数据所需要的时间称为总线周期。
◆ M / I O ‾ = 1 M/\overline{ IO }= 1 M/IO=1 时,表明在该总线周期中,CPU 正在与存储器交换信息
◆ M / I O ‾ = 0 M/\overline{IO} = 0 M/IO=0 时,表明在该总线周期中,CPU 正在与I/O接口交换信息
◆ W / R ‾ = 1 W/\overline{R} = 1 W/R=1时,表明在该总线周期中,CPU正在进行写操作
◆ W / R ‾ = 0 W/\overline{R} = 0 W/R=0 时,表明在该总线周期中,CPU正在进行读操作
◆ D / C ‾ = 1 D/\overline{C} = 1 D/C=1 时,表明在该总线周期中,正在传输数据
◆ D / C ‾ = 0 D/\overline{C} = 0 D/C=0 时,表明在该总线周期中,正在传输指令代码
● 地址空间分为【按访问器件不同进行划分】: 存储空间 【这学期讲】和 I/O空间【大三下讲】。
● 物理空间(物理存储器地址空间):程序的运行空间,即主存空间。
80486有 32 条地址线,内存最大容量 4G 。这 4G 字节称为物理存储器,每一单元的地址称为物理地址,其地址范围 0000,0000H ~ FFFF,FFFFH 为物理存储空间。
● 虚拟空间(虚拟存储器地址空间):也称为编程空间
虚拟存储器是一项硬件和软件结合的技术。
◆ 补充说明:存储管理部件把主存(物理存储器)和辅存 (磁盘)看作是一个整体,即虚拟存储器。80486允许虚拟存储器容量最大为246B = 64 TB,即程序员可在此地址范围内编程,程序可大大超过物理空间。
◆ 运行时,操作系统从虚拟空间取一部分程序载入物理存储器运行。当程序运行需要调用的程序和要访问的数据不在物理存储器时,操作系统再把那一部分调入物理存储器.……数据的交换极快,程序察觉不到。
● 线性空间:当程序从虚拟空间调入物理空间时,要进行地址转换。
◆ 流程说明:分段部件首先把虚拟地址(编程地址)转换为线性地址,然后根据模式的不同考虑分不分页,如果不分页的话,线性地址就是物理地址;如果分页的话,则由分页部件把线性地址转换为物理地址。
● 实模式:存储空间仅分段,而不分页;
● 保护模式:存储空间先分段,再分页。
● 80486有 3 种工作模式:
① 实地址模式(简称实模式)
② 保护虚拟地址模式(简称保护模式)
③ 虚拟80486模式
① 加电、复位之后,80486自动工作在实模式,系统在DOS管理下。(也就是说,开机后,电脑会跑BIOS上面的代码)
② 在实模式下,80486 只能访问第一个 1M 内存(00000H~FFFFFH)。【进入保护模式后,1M之外的物理存储空间才能使用】
③ 存储管理部件对存储器只进行分段管理,没有分页功能,每一逻辑段的最大容量为 64KB 。
④ 在实模式下,段寄存器中存放段基址。
● 80486工作在保护模式下,才能真正发挥它的设计能力。
① 在保护模式下,80486 支持多任务操作系统
② 在保护模式下,80486 可以访问 4GB 的物理存储空间
③ 存储管理部件中,对存储器采用分段和分页管理。在保护模式下,段寄存器存放的不是段基址而是段选择符。
● 虚拟80486模式是保护模式下的一种特殊工作模式,可运行实模式程序。
在操作系统管理下,80486可以分时地运行多个实模式程序 ( 因为在虚拟8086模式下,486认为段寄存器中存放的不是选择符而是段基址 )
例如有3个任务。操作系统为每一个任务分配 1ms ,每通过 1ms 就发生一次任务切换。从宏观上看系统是在执行多个任务,实质上是因为联机打印程序使用了“分时技术”。打印程序只能在 DOS 环境下运行,只占用了系统 10% 的时间。
● 首先,我们要知道为什么我们要提出物理地址,又是为什么后面我们要常用逻辑地址?
通过一个示意图来了解一下:
① 在程序执行的一开始,我们得先编写好这段 .exe 程序代码,而这些程序代码是存放在硬盘上的。
② 当要运行这段代码时,操作系统会将代码 “送” 到主存(内存)中。但是因为内存空间并不是理想的空箱子,它里面本来就装有其他代码。
③ 所以,这段 .exe 代码有可能被放在了 “第一段” 的位置,也可能被放在了 “第二段 或 第三段、…” 的位置。
④ 所以当在执行这段程序时,CPU 的指针扫到的 “绿色” 那段代码的 “绝对地址”,会根据这代码所在段的位置不同而有所不同。
⑤ 但是 “绿色” 那段代码距 “代码文件头地址” 的 “相对位置” 并不会随段的位置改变而不同。
⑥ 所以,我们用 逻辑地址 能更方便且快速无误地表示出每一行代码的位置。【但是计算机只认物理地址,所以逻辑地址是用来方便程序员,物理地址是用来方便计算机的】
● 程序员编写程序时使用的是逻辑地址。
● 程序是分段的,逻辑地址由段基址和偏移地址组成。书写格式:“ 段基址:偏移地址 ”。
● 逻辑地址到物理地址的转换(也称为物理地址的形成)由 CPU 负责完成。
● 我们把 1M 字节的存储器分为任意数量的逻辑段,其中每一段长度为 64K(216)个字节。段的起始地址的高 16 位地址称为该段的段基址。段内再由 16 位二进制数寻址,段内寻址的 16 位二进制数地址是存贮单元到段起始地址的距离,称为偏移地址(偏移量)。如下图所示:
注:上面说的 “16位” 是针对 2 进制的,所以针对 16 进制是 “4位”(即比如 “2345H” 中的四个数字)。
● 存贮器中的每个存贮单元都可以用两个形式的地址来表示:物理地址和逻辑地址。物理地址是指 1MB 存贮区域中的某一单元地址。地址信息是 20 位的二进制代码,以 16 进制表示是 00000H~FFFFFH 中的一个单元。CPU 访问存贮器时,地址总线上送出的是物理地址。编制程序,则采用逻辑地址。
◆ 在一个逻辑段中,各单元的段基址是相同的。段基址指明由哪个段寄存器给出即可。
◆ 偏移地址是该单元相对于段首的地址偏移量。偏移地址是由程序员在程序中给出的具体值。
举个栗子:设某存贮单元逻辑地址为1000H:2345H
则段基址 = 1000H,偏移量 = 2345H,故物理地址为:
● 最后注意:
物理地址是唯一的,不同的逻辑地址可能得到相同的物理地址。 如:
2000H:0200H 一一 > 20200H
2010H:0100H 一一 > 20200H
[1] 《微型计算机原理与接口技术(慕课板)》
清华大学出版社
[2] 《汇编语言程序设计(第2版)》
[3] 《EAX、ECX、EDX、EBX等寄存器的作用》
链接: https://blog.csdn.net/qq_42383069/article/details/109059138.
上一篇文章地址链接: 【计算机与汇编原理②】——存储器系统【RAM ROM 高速缓冲存储器Cache】.
下一篇文章地址链接: 【计算机与汇编原理④】——指令系统(上)【标志寄存器 立即寻址 寄存器寻址 直接/寄存器/基址/变址寻址】.
正在施工中…