定额发票哪里有卖:电脑大虾们,快来啊

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/06 17:32:36
麻烦你们详细的告诉我关于80486的存储器寻址方式(物理寻址方式的原理、进栈出栈原理等)越详细越好,谢谢啦,赏分100

买本计算机硬件研究吧

折腾人也不用这样啊 找本教科书不就完了

486,你弄那个干吗,你到网上搜就好了,

呵呵 建议上学去问老师

4.2 80486的工作方式
实地址方式,保护方式和虚拟8086方式三种方式
RESET
实地址方式
保护方式
虚拟8086方式
修改CR0指令(PE=1)
修改CR0指令(PE=0)
RESET
·任务转换
·IRETD指令
中断任务转换
RESET
4.2.1 实地址方式
1MB存储空间;
分段部件不使用描述符表,所有段最大为64MB;
不采用分页部件,即不支持虚拟存储器;
单任务;
代码段和数据段没有保护机制
特点
实地址方式是80486最基本的工作方式,与8086工作方式基本相同;加电或复位时,便进入实地址方式.
设置实地址方式:
为了保持和8086兼容;
为80486保护方式所需要的数据结构做好配置和准备
实地址方式下,寻址方式,存储器管理,中断处理机构和8086一样.
实地址方式下,操作数默认为16位,指令前加前缀后允许32位操作数和32位寻址方式,可编写32位运算程序.
实地址方式下,物理地址的形成机制与8086相同,即段址<<4+偏移,段最长64MB,存储段可以相互覆盖.
在实地址方式下,存储器中保留两个固定区域:
中断向量区(00000H~003FFH):存放256个中断服务程序的入口地址,设置中断向量的方式与8086相同.
系统初始化区(FFFFFFF0H~FFFFFFFFH),80486复位后,首先从FFFFFFF0H处取指令,执行远程跳转或调用从系统ROM启动系统.
80486有4个特权级,实地址方式下,程序在最高级(0级)上执行.80486除保护方式指令外,其余指令都可以在实地址方式下执行.
4.2.2 保护方式
支持4GB的物理存储器地址空间
分段部件使用描述符表,段长可变(0~4GB);
分页部件支持64TB的虚拟存储地址空间;
允许多任务运行;
代码段和数据段具有保护机制;
支持任务之间以及特权级的数据和程序保护
特点
此种方式提供了多任务环境中的各种复杂功能以及对复杂存储器组织的管理机制
80486的存储器管理系统包含地址转换与保护两个关键功能以及分段与分页等重要机制
1. 物理存储器与虚拟存储器
物理存储器
地址总线直接访问的主存储器称物理存储器
访问物理存储器的地址称为物理地址
80486有32根地址线,可寻址4G(232)物理地址空间为,其物理地址为00000000H~FFFFFFFFH
虚拟存储器
①程序编程使用的逻辑存储空间,其大小由微处理器内部结构确定
②主存储器容量不能满足要求时,为了给用户提供更大的访问存储空间,而采用内外存自动调度方法构成的一种存储器
虚拟存储由主,辅存储器系统加上存储器管理部件实现
访问虚拟存储器的地址,称为虚拟地址.该地址是由程序确定的,故也称逻辑地址
2. 分段机制
虚拟地址=
段选择符:高14位选择存储段,最大段数16K(214)个
段内偏移量: 32位,最大段长为4GB(232)
46位,虚拟存储器空间最大为64TB
+
段选择符
段内偏移量
虚拟存储器
(虚拟空间)
:
15 0
31 0
46位
虚拟地址
段选择符保存在段寄存器中,包含段描述符在描述符表中的索引和访问特权
RPL
TI
INDEX
15 3 2 1 0
索引字段,13位,作为该段描述符在全局描述符表或局部描述符表中的索引位置
段描述符表指示字段:
TI=1,表当前选择LDT;
TI=0,选择GDT
请求特权字段:
由最低两位组成,表示段选择符的特权级(0~3级)
3. 虚拟地址和物理地址转换
程序编程使用虚拟地址,需由微处理器地址转换机制将虚拟地址转化为主存储器的物理地址才能访问主存储器
采用分段与分页管理部件来实现
使用各种表格(描述符表,页表等)来规定各自的转换函数(这些表格只允许操作系统访问,而不允许应用程序对之进行修改)
操作系统为每个任务维护一套各自不同的转换表格,使每个任务有不同的虚拟地址空间,使各任务的系统彼此隔离开来,以便完成多任务存储管理
虚拟地址和物理地址的转换过程
段选择符
段内偏移量
:
15 0
31 0
虚拟地址
分段部件
线性地址
31 0
分页部件
物理地址
31 0
分页被禁止
4. 段描述符
8个字节,规定段的基地址,段的界限和段的属性
U
D
O
段界限19~16
G
DPL
S
TYPE
段基址23~16
段基址31~24
P
段基址15~0
0
16
32
48
段界限15~0
15
31
47
63
(1)段基址,即段的起始地址,共32位.
(2)段界限,即段的最大长度,共20位.
(3)段属性,共12位
G——界限长度属性位.G=1 ,段长度的基本单位为1页(4KB);G=0,段长度的基本单位为1字节(1B).
D——操作数长度.D=1,操作数与地址的默认长度为32位;D=0,为16位.
U——自户自定义位.
P——存在位.P=1表示对应段已装入物理存储器中;P=0对应段目前并不在物理存储器中,而要从磁盘上调进来.
DPL——特权位,共2位.表示描述符的特权级(0~3).
S——描述符类型.S=1,为存储段描述符,又称用户程序描述符,对应段为代码段,数据段或堆栈段;S=0,则为系统段描述符,用于管理任务,中断和异常,包括TSS描述符,LDT描述符等.
TYPE——段类型,共4位.用于说明所描述段的具体属性.
段属性
段类型
执行/读,一致码段,已访问
代码段
1111
读/写,向低扩展,已访问
数据段
0111
执行/读,一致码段
代码段
1110
读/写,向低扩展
数据段
0110
只执行,一致码段,已访问
代码段
1101
只读,向低扩展,已访问
数据段
0101
只执行,一致码段
代码段
1100
只读,向低扩展
数据段
0100
执行/读,已访问
代码段
1011
读/写,已访问
数据段
0011
执行/读
代码段
1010
读/写
数据段
0010
只执行,已访问
代码段
1001
只读,已访问
数据段
0001
只执行
代码段
1000
只读
数据段
0000
说明
指定段
T值
说明
指定段
T值
5.分页机制
分页机制将线性地址转换为物理地址
CR0中的PG=1时启动分页机制;
PG=0时则禁用分页机制,的线性地址当物理地址使用.
80486一页为4K字节,并在4K字节的边界上对齐,即每页的开始地址都能被4K整除.
4G字节线性地址空间划分成220个页面
线性地址的低12位经分页机制直接处理为物理地址低12位
线性地址的高20位转换成物理地址高20位
分页机制管理的对象是固定大小的存储块(页)
分页机制把整个线性地址和物理地址空间都看成由页组成
线性地址中的任一页都可映射到物理地址空间的任一页
6. 分段分页地址转换
分段地址转换——虚拟地址到线性地址转换
TI
INDEX
15 3 2 1 0
:
段内偏移
31 0
虚拟地址
段选择符
LDTR
31 0
GDTR
31 0
INDEX*8

描述符
描述符
描述符表
段属性
段界限
段基址
描述符(8B)

32位
32位
32位线性地址
分页地址转换——线性地址到物理地址转换
4字节
页目录
两级页表结构:页目录表和页表.每个页目录表和页表都含有1024项,每项均由4字节构成,两表均为4KB
分页机制实现两级地址转换:低一级由页表映射页;较高一级由页目录表中的一个页目录项映射页表.
页目录索引
31 22 21 12 11 0
线性地址
页表索引
页内偏移
4字节
页表
CR3

*4
高20位

*4
高20位

物理页基址
物理地址
物理页地址
4K字节
高20位
80486支持两个主要的保护类型:
1. 不同任务之间的保护
每一任务分配不同的虚拟地址空间,都有各自不同的虚拟——物理地址转换映射,可实现任务之间的完全隔离.
每个任务都有各自的段描述符表和页表,即具有不同的地址转换函数,并可对段和页进行保护检查,
根据新任务切换的转换表实现任务的切换.
操作系统应与所有的应用程序相隔离,因此,操作系统可以存储在一个单独的任务中.
2. 同一任务内的保护
在同一任务中,对程序代码和数据的访问定义了4个特权级,0级最高,3级最低.系统规定特权级低的程序不能随意访问特权级高的程序和数据.
特权级的典型用法是把操作系统的核心放在0级,操作系统的其余部分放在1级,应用程序放在3级,2级供中间软件使用.使操作系统的核心得以保护而不致于被操作系统的其余部分以及用户程序所访问,从而实现了同一任务内的保护.
7. 保护
4.2.3 虚拟8086方式
支持4GB的物理存储器地址空间;
分段部件不使用描述符表,所有段最大为64KB;
分页部件,支持64TB的虚拟存储地址空间;
允许多任务运行;
代码和数据段具有保护机制;
支持任务之间以及特权级的数据和程序保护.
特点
既能利用保护方式功能,又能执行8086代码,允许同时运行多个8086,80286和80486任务,而彼此不会相互干扰 ;
分页机构为每个8086任务分配一个受保护的1MB地址空间,段寄存器的用法和实地址方式一样;
程序在最低特权位(3级)上运行 ;

你让我怎么一下子都说明白阿,这个东西要用汇编语言和微机接口的东西给你讲,我现在就是学这个,先给你简单说说

吧!
80486不像最早的8086/8088CPU寻址方式一样,它有两种模式:一种是实地址模式下的,另一种是虚地址模式下的。两

个是不一样的。实地址模式下的寻址方式和8086寻址方式是一样的,也是靠偏移地址的,有效地址是20位,也就是说16

位地址线+4位偏移地址=20位有效地址。虚地址有11种寻址方式,其存储器寻址方式有效地址是32位,操作数可以是8位

、16位、32位。
存储器寻址方式=基址(32位通用寄存器)+变址(除ESP之外的任何32位通用寄存器)*比例因子(1/2/4/8)+偏移量(

8/32位2进制常数)看看这个公式是不是和8086的不一样啊,就是因为不一样才有下面的寻址方式的出现,就是这些 带

位移的比例变址寻址 基址比例变址寻址 带位移的基址比例变址寻址。下面再给你说说其他的寻址:1).直接寻址
存放操作数的32位偏移量直接包含在指令中,即EA=位移量,默认操作数在DS段中 。
2).寄存器间接寻址
操作数的有效地址包含在某一个32位的通用寄存器中,即EA=基址寄存器/变址寄存器的内容。EBP、ESP默认段寄存器为

SS外,其余6个通用寄存器均默认段寄存器为DS。
3).带位移的基址/变址寻址
EA=基址/变址寄存器的内容+位移量。除去EBP、ESP默认SS为段寄存器外,其余均默认DS为段寄存器。
4).基址变址寻址
EA=基址寄存器的内容+变址寄存器的内容。若在指令中EBP、ESP中的一个和其他6个通用寄存器的一个同时出现时,以

出现的顺序默认段基地址。
5).带位移的基址变址寻址
EA=基址寄存器的内容+变址寄存器的内容+位移量,对段寄存器的默认约定与基址变址寻址相同。
6).带位移的比例变址寻址
EA=变址寄存器的内容×比例因子+位移量,对段寄存器的默认同带位移的变址寻址。
7).基址比例变址寻址
EA=基址寄存器的内容+变址寄存器的内容×比例因子。
当EBP、ESP中的一个与其他6个通用寄存器中的一个同时出现时,把乘上比例因子的那个寄存器当作变址寄存器,另一

个寄存器作为基址寄存器,决定默认的段基地址。
8).带位移的基址比例变址寻址
EA=基址寄存器的内容+变址寄存器的内容×比例因子+位移量。
这种寻址方式的基址寄存器、变址寄存器的确定,以及段基地址的默认情况同基址比例变址寻址。
除了上面的这些80486还有下面这个特点
存储器寻址时的段约定
80486在进行存储器访问操作时,除要计算偏移地址外,还必须确定操作数所在的段,即确定有关的段寄存器。对于各

种不同类型的存储器寻址,80486都约定了默认的段寄存器。通过加段超越前缀,有的指令可实现段超越寻址。不同的

访问存储器操作类型对默认段寄存器、允许超越的段寄存器和相应的偏移地址来源的约定情况如表4.4所示。该表说明

,除了程序只能在代码段、堆栈操作数只能在堆栈段、目的串操作数只能在附加数据段ES外,其他操作数虽然也有默然

段,但都是允许段超越的。

进栈出栈原理和8086的基本一样,就是当数据总线上有数据的时候由PUSH指令存入寄存器,寄存器指针向上移用,当有POP指令的时候就会从栈顶取出最上面的数据,然后送给处理器进行运算。对于80486也是用这两个指令完成进出栈的,特别注意的是在80386以上的CPU的指令上这两个允许双字进行传送,比80286以下的要速度快很多。还有在80286~Pentium Pro指令系统增加了PUSHA(PUSHALL)入栈指令,和POPA(POPALL)出栈指令。PUSHA的功能是将8个16位寄存器AX、CX、DX、BX、SP、BP、SI和DI依次顺序压入堆栈中。其中被压入堆栈的SP的值为其在PUSHA指令执行前的值。POPA指令的执行过程与PUSHA正好相反,它是将从堆栈移出的16个字节数据按下列顺序放入相应的寄存器中:DI、SI、BP、SP、BX、DX、CX、AX,这样可使数据返回到原寄存器中。
这个出栈入栈的东西实在太多了,相关指令和汇编语言的代码很多,光这么说说不清楚,我给你推荐一本书,清华大学出版社出版的谭浩强的《微机接口与原理》的第三章 指令系统和寻址方式 上面都有的。你看看那本书吧,是我们的教材,呵呵就是很贵,一共两本,一本48元。:(