550MHz
IDE2
Pentium III
北桥
440BX
AGP
南桥
PIIX4ECMOS & RTC
USB
超级 I/O
IDE1
COM1
COM2
LPT1
550MHz L1
Cache
L2Cache
处理机总线 100MHz
100MHz
PCI 总线 33MHz PCI 插槽
ISA插槽硬件实验箱
ISA总线 8MHz
内存条
ROM BIOS
显示器硬盘光驱软驱键盘鼠标打印机
MODEM
66MHz显卡第九章 高档微处理器 Pentium
一,概述二,寄存器组三,实方式下存储器地址的产生四,保护方式下存储器地址的产生五,保护机制六,寻址方式七,指令系统八,实模式下的汇编语言程序设计九,保护方式下的汇编语言程序设计一,概述
1,Pentium的特性
1) 与 8086/8088相比
2) 两种工作方式,实方式和 保护方式
2,Pentium的内部结构
1,Pentium的特性
工作速度更快
具有保护功能
支持虚拟存储器
1) 与 8086/8066相比,
工作速度更快
1) 主频加快 133Mhz,350Mhz,450Mhz,750Mhz,1Ghz,….
2) 字长加长 (内部寄存器,内部总线等 ),32位
3) 总线传输率提高,总线 64位,并 支持突发式读写 (使总线周期缩短 )
4) 先进执行技术 (指令流水线,分支预测,高速缓存等 )
指令流水线 ( Computer Pipeline)
原理象工业生产上的装配流水线,
指令流水线由 多个不同功能的电路单元 组成,
一条指令 分成多个步骤 分别由这些电路单元执行,
由于使多条指令或多个操作 并行处理,
可实现在一个时钟周期完成一条指令,提高 CPU的执行速度,
注意,每条指令的执行步骤并未减少
CPU执行指令的过程,
1,取指令 FI (Fetch Instruction),从内存或高速缓存中读取指令
2,译码 D (Decode),将指令进行解码
3,取操作数 FO (Fetch Operands),获取执行指令所需的数据
4,执行指令 E (Execution Instruction),执行指令
5,回写 W (Write Back),将执行结果保存到内存或某个寄存器中,
指令 1
指令 2
FI1 D1 FO1 E1 W1
FI2 D2 FO2 E2 W2
CLK
…….
未采用流水线的 CPU执行指令的过程指令 1
指令 2
指令 3
指令 4
指令 5
FI1 D1 FO1 E1 W1
FI2 D2 FO2 E2 W2
FI3 D3 FO3 E3 W3
FI4 D4 FO4 E4 W4
FI5 D5 FO5 E5 W5
FI6 D6 FO6 E6 W6指令 6
FI7 D7 FO7 E7 W7指令 7
CLK
…….
采用流水线的 CPU执行指令的过程在 Dos下,
单任务
应用程序和操作系统是同级的
应用程序可以管理系统的所有资源
(包括内存,各端口,中断向量表等 )
具有保护功能故,一个编得不好的程序会影响整个系统的运行,甚至造成死机,
例如,? 一个程序把键盘中断关掉了,
所有程序就都不能从键盘获得键入的数据,
直到有程序重新打开键盘为止,
一个程序陷入死循环,没有其他程序可以把它终止掉,
造成系统死机,
在 Windows下,
多任务
应用程序和操作系统不是同级的,即程序是有级别之分的,
操作系统工作在最高级 0级中,而应用程序工作在最低级 3级中,
所有的资源对应用程序来说是被“保护”的:
应用程序对 IO端口和内存的访问受到限制,
使其无法访问其他程序运行的内存,
故,一个编得不好的程序不会影响整个系统的运行例如,如果 DOS应用程序无法正常返回系统,
只是出现该程序未正常结束的 提示,允许用户强行结束该任务 ;
并不影响其他程序 (任务 )的执行,
支持虚拟存储器高挡计算机存储系统的层次结构
CPU内部寄存器片内高速缓存片外高速缓存主存储器 (内存 )
虚拟存储器 (常用硬盘 )
外部存储器 (磁带,软盘,硬盘,光盘等 )
快慢在 CPU内部,存取速度快,数量有限由小容量的 SRAM构成 (8KB,16KB)
SRAM,32KB~512KB
由 DRAM构成 (16MB~256MB)
速度慢,容量大 (可软件设臵 )
8.4GB~50GB
程序的局部性特点,
因程序的代码和数据大都按顺序存放,
如果存储器中的 某一单元 被访问,其邻近单元 可能很快也被访问 ;
如果 某一单元 被访问,该单元将可能 很快被再访问,
程序的局部性特点 是 高速缓存 和 虚拟存储器 的理论基础高速缓存 Cache:
解决 CPU与主存储器间的速度冲突,
采用比 DRAM读写速度更快的 SRAM构成,
用来存储 CPU可能最需要的程序或数据快,
每次访问主存储器时,都先访问高速缓存,
若访问的内容在高速缓存中,就从高速缓存获取程序或数据;
否则,再访问主存储器,获取需要的数据,
并把有关内容及相关数据块取入高速缓存。
虚拟存储器 Virtual Memory:
解决实际安装的内存空间小,而运行大型程序或多任务需要大空间的冲突,
尽管 Pentium可寻址的物理空间达 4G(32根地址线 ),
实际不会安装如此大的内存 (PC机一般 16MB~256MB).
Pentium内的 存储器管理机制支持虚拟存储器的使用,
提供比实际安装的内存大得多的存储空间,
使程序员在编写大型程序时,
不用考虑计算机中物理存储器的实际容量,
并使系统能实现多任务的运行,
采用软件和硬件相结合的技术 (虚拟存储技术 ),
将程序划分为多个固定大小的块 (称为页面 ),
当需要的时候,页面被调到主存内 ;不需要时,就保存在磁盘上,
2) 两种工作方式 (实方式和保护方式 )
开机 /复位后,CPU运行在实方式下,
通过设臵控制寄存器 CR0中的 D0位为 1,切换至保护方式,
P
E
31 30 24 23 16 15 8 7 6 5 4 3 2 1 0
M
P
E
M
T
S
E
T
P
G 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
C
D
N
E
W
P
A
M
控制寄存器 CR0
PE=0,工作在实方式下
PE=1,工作在保护方式下实方式,相当一个可进行 32位操作 的 快速 8086/8088
实方式下,CPU不能发挥其优越性,不能支持多用户,多任务的操作系统,
20根地址线有效,可寻址的内存空间为仍为低端的 1M字节单元,
访问内存时,物理地址的形成过程仍为段地址 +偏移地址,
其中,段地址由段寄存器直接提供,对内存的访问不受限制,
I/O地址为 16位,可寻址的 I/O空间为 64K
对 I/O端口的读写访问不受限制
中断系统 与 8086/8088相同包括中断源,中断向量表的位臵,中断的响应过程等
指令系统 与 8086/8088兼容,所有 DOS程序可在实方式下直接运行,
寻址方式 有了扩展,存储器寻址更加灵活,
指令系统 比 8086/8088有扩展,操作数可以是 32位
I/O地址为 16位,可寻址的 I/O空间仍为 64K
但对 I/O端口的读写访问受到特权级别等的限制
支持虚拟 8086方式,
把 V86任务 (DOS应用程序 )作为保护方式下的一个任务运行,
可支持多个 V86任务,每个 V86任务是相对独立的,
特权级 4个 和完善的特权检查机制,
保证程序的安全性,实现任务间的隔离,
支持多任务,能够快速地进行任务切换和保护任务环境
采用分段管理机制和分页管理机制 为程序的共享和保护,
以及虚拟存储器提供了硬件支持
32根地址线有效,可寻址 4G的物理地址空间保护方式下,
实方式与保护方式的主要不同之处有,
内部可用寄存器组
可访问的内存空间
访问内存受到的限制及物理地址的形成过程
访问 I/O端口受到的限制
中断系统机制
指令系统注意,尽管通过改变控制寄存器 CR0中的 D0位就可以改变工作方式,
由于实方式和保护方式工作机制的不同,
为使切换后,CPU能够正常的工作,
在切换前,应做相应的一些切换工作,否则会使系统异常,
指令指针 控制ROM
控制部件地址生成
(U流水线 )
地址生成
(V流水线 )
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,标志寄存器
AH ALAHEAX AX
BH BLAHEBX BX
CH CLAHECX CX
DH DLAHEDX DX
AHEBP BP
AHESI SI
AHEDI DI
AHESP SP
AHEFLAGS
AHEIP IP
FLAGS
CS
SS
DS
ES
FS
段寄存器通用寄存器
GS
015
031
1,Pentium
实模式下寄存器组标志指令指针
CR0
CR1
CR2
CR3
DR0
DR1
DR2
DR3
DR4
DR5
DR6
DR7
TR6
控制寄存器调试寄存器测试寄存器
TR7
031
CR4
2,Pentium 保护模式下寄存器组在实方式下寄存器组的基础上增加了 4个寄存器,
全局描述符表寄存器 GDTR (48位 )
Global Descriptor Table Register
中断描述符表寄存器 IDTR (48位 )
Interrupt Descriptor Table Register
局部描述符表寄存器 LDTR (16位 )
Local Descriptor Table Register
任务寄存器 TR (16位 )
Task Register
GTDR16位界限值32位基地址
47 16 15 0
ITDR16位界限值32位基地址
LDTR16位选择子
TR16位选择子
3,80386的 4个控制寄存器,
CR0,CR4,包含一些控制 CPU操作的信息如,工作方式 控制位 PE
启用或禁用分页管理机制 的控制位 PG
控制浮点协处理器操作 的控制位 MP,EM,TS,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,EAX
注意,开机或复位时,PE=0,CPU工作在实方式
P
E
31 30 24 23 16 15 8 7 6 5 4 3 2 1 0
M
P
E
M
T
S
E
T
P
G 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
C
D
N
E
W
P
A
M;从保护方式切换到实方式; 切换前的准备工作
……;切换
MOV EAX,CR0
AND EAX,0FFFFFFFEh
MOV CR0,EAX
PG=0,关闭分页管理机制此时分段管理机制产生的线性地址直接作为物理地址,
PG=1,启用分页管理机制此时线性地址经过分页管理机制转换成物理地址,
注意,开机或复位时,PG=0,CPU关闭分页管理机制
P
E
31 30 24 23 16 15 8 7 6 5 4 3 2 1 0
M
P
E
M
T
S
E
T
P
G 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
C
D
N
E
W
P
A
M;启用分页管理机制程序段;启用前的准备工作
……;启用
MOV EAX,CR0
OR EAX,80000000h
MOV CR0,EAX;关闭分页管理机制程序段;关闭前的准备工作
……;关闭
MOV EAX,CR0
AND EAX,7FFFFFFFh
MOV CR0,EAX
80X86的标志寄存器
C
F
P
F
A
F
Z
F
S
F
T
F
I
F
D
F
O
F
N
T
IO
PL
R
F
V
M
A
C
V
IF
V
IP
I
D
31 …..,21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
8086/8088
80286
80386
80486
Pentium
4,标志寄存器 EFLAGS
IOPL (Input/Output privilege level 输入 /输出 特权级标志 )
用于保护方式下,指定执行 I/O指令的特权级别,
如果当前特权级别 CPL大于或等于 IOPL,可执行 I/O指令,
否则产生一个保护异常。
VM (虚拟 8086方式标志 )
VM=1,表示工作在虚拟 8086下方式。
VM=0,表示工作在一般的保护方式下
C
F
P
F
A
F
Z
F
S
F
T
F
I
F
D
F
O
F
N
T
IO
PL
R
F
V
M
A
C
V
IF
V
IP
I
D
31 …..,21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
三,实模式下存储器地址的产生与 8086/8088相似,物理地址 20位物理地址 PA = 段地址 + 偏移地址
= ( 段寄存器 ) × 16 + 偏移地址
= ( 段寄存器 ) × 10H + 偏移地址即段寄存器的内容左移 4位,加上偏移地址
段地址由段寄存器提供,CS,SS,DS,ES,FS,GS 16位
偏移地址由指令中的寻址方式提供,范围在 0~FFFFh。
特点,1) 段地址直接由段寄存器得到
2) 20根地址线有效四,保护模式下存储器地址的产生
0
线性地址线性地址空间
232
分段管理机制
31
物理地址物理地址空间最大 232
与实际的配臵有关分页管理机制
031PG=1
PG=0
当 PG=0时,分页管理机制关闭,线性地址就是物理地址虚拟地址空间虚拟地址
213 × 232 × 2
= 246 = 64T
选择子 偏移量:
015 031
段寄存器
将存储空间分为若干个段,
存储单元的地址为,段基地址 (32位 ) + 段内偏移地址 (32位 )
其中 段基地址通过指令中的段寄存器间接获取偏移地址由指令中的寻址方式获取,
如 MOV AX,DS,[EBX]
存储单元的段基地址通过 DS 寄存器间接获取偏移地址为 EBX寄存器的内容分段管理机制
与实方式下不同的是,段基地址不是通过段寄存器直接得到,
保护方式下,段寄存器起到的是索引的作用 (称为段选择子 ).
每个段由三个参数定义,
段基值,指示 段在线性地址空间中的起始地址,32位段界限,规定段的大小,0~4G
段属性,规定段的主要特性保护方式下的段
用于表示段的三个参数的数据称为 描述符,
每个描述符长 8字节
每个段都有一个相应的描述符来描述,
为支持虚拟存储管理和多任务的处理,使用了多种类型的描述符,
根据 功能的不同,在 不同类型的描述符 中存放 不同的控制信息,
利用描述符的内容,CPU可以自动完成访问范围和权限的检查,
存储段描述符 代码段描述符数据段描述符系统段描述符 LDT段描述符任务状态段描述符门 描 述 符调用门描述符任务门描述符中断门描述符陷阱门描述符描 述 符存储段描述符格式存储段 用于存放程序直接进行访问的代码和数据的段。
存储段描述符 用于描述存储段。
15 8 7 6 5 4 3 2 1 0
段 界 限 值 的 15 ~ 0 位段 基 值 的 15 ~ 0 位字节 0
字节 2
字节 1
字节 3
字节 5
字节 7
DPLP
D
T
1
E
D
C
AE WR
段 基 值 的 31~24 位字节 4段 基 值 的 23 ~16 位字节 6G
A
V
LD 0
段界限值
19~16 位
DPLP
D
T
1
E
D
C
AE 字节 5G
A
V
L
D 0 段界限值19~16 位字节 6 WR
DT,表示描述符的类型 Descriptor Type
DT=1,存储段描述符
DT=0,系统段描述符或门描述符
E,可执行位 Execute
E=1,指示段是可执行的,是代码段,该描述符为代码段描述符
E=0,指示段是可执行的,是数据段,该描述符为数据段描述符
W/R,可读 /写位 Write/Read
对数据段,W=1,表示该段可读可写; W=0,可读不可写对代码段,R=1,表示该段可执行可读; R=0,可执行不可读
G,段界限粒度位 Granularity
G=0,界限粒度为字节; G=1,界限粒度为 4K字节( 212)
当 G=1 时,一个段的最大为,220 × 4K = 232
DPL,表示描述符特权级 Descriptor Privilege Level
指示所描述的段的特权级。共 4个级别( 0~3级 ) 。
用于权限检查,以决定对该段能否进行访问。
P,表示段是否存在位 Present
P=1,表示该描述符所描述的段在内存中
P=0,表示该描述符所描述的段不在内存中
A,访问位 Acess
A=1,指示描述符被访问过。
A=0,指示描述符 未 被访问过
ED/C,对数据段,表示 数据扩展方向位 (0向高,1向低 )
对代码段,表示类型 (1一致代码段,0普通代码,用于特权检查 )
DPLP DT
E
D
C
AE 字节 5G
A
V
L
D 0 段界限值19~16 位字节 6 WR
系统段描述符及门描述符格式系统段 是为实现存储管理所使用的一种特殊段,
系统段描述符 用于描述系统段。
门描述符 用于描述控制转移的入口点。
15 8 7 6 5 4 3 2 1 0
段 界 限 值 的 15 ~ 0 位段 基 值 的 15 ~ 0 位字节 0
字节 2
字节 1
字节 3
字节 5
字节 7
DPLP
D
T
0
段 基 值 的 31~24 位字节 4段 基 值 的 23 ~16 位字节 6G
A
V
LD 0
段界限值
19~16 位
TYPE
DPLP
D
T
1 字节 5
G
A
V
L
D 0 段界限值19~16 位字节 6 TYPE
TYPE
0000
0001
0010
0011
0100
0101
0110
0111
TYPE
1000
1001
1010
1011
1100
1101
1110
1111
说明未定义可用 286TSS
LDT
忙的 286TSS
286调用门任务门
286中断门
286陷阱门说明未定义可用 386TSS
未定义忙的 386TSS
386调用门未定义
386中断门
386陷阱门门描述符格式调用门,段选择子指向代码段描述符任务门,段选择子指向任务状态段 TSS描述符中断门和陷阱门,段选择子指向代码段描述符
15 8 7 6 5 4 3 2 1 0
偏 移 量 15 ~ 0 位段 选 择 子字节 0
字节 2
字节 1
字节 3
字节 5
字节 7
DPLP
D
T
0
字节 4
字节 6
TYPE
偏 移 量 31 ~ 16 位
0 0 0 计 数 值
一个任务可以有多个段,
每个段需要一个描述符来描述,
有三种类型的描述符表,
1) 全局描述符表 GDT
( Global Descriptor Table )
2) 局部描述符表 LDT
( Local Descriptor Table )
3) 中断描述符表 IDT
( Interrupt Descriptor Table )
为便于组织管理,把描述符组织成线性表,
称为描述符表,
全局描述符表描述符 0
……
描述符 n
…...
描述符 N-1
描述符 0
……
描述符 m
…...
描述符 M-1
中断门 0
……
中断门 p
…...
中断门 P-1
内存局部描述符表中断描述符表
全局描述符表 GDT包含每个任务都可能或可以访问的段的描述符,
通常包含描述操作系统所使用的代码段,数据段和堆栈段的描述符,
也包含多种特殊数据段描述符,如各个用于描述任务 LDT的特殊数据段等,
在任务切换时,并不切换 GDT,
每个任务可以访问自己的 LDT,不能访问其他任务的 LDT.
通过 LDT可以使各任务私有的各个段与其他任务相隔离,达到保护的目的,
通过 GDT可以使各任务都需要使用的段能够被共享,
在整个系统中只有一张 GDT,但可以 可以有多张 LDT
局部描述符表 LDT它定义了某个任务用到的局部存储器地址空间每个任务可以有一张自己的局部描述符表 LDT:
含该任务的代码段,数据段和堆栈段的描述符,
也包含该任务所使用的一些门描述符,
随着任务的切换,系统当前的局部描述符表 LDT也随之切换,
GDT,LDT,IDT是保护方式下重要的特殊段,
包含有对段机制所用的重要表格,
为方便快速地定位这些段,
CPU采用专用寄存器保存这些段的基地址和界限,
全局描述符表描述符 0
……
描述符 n
…...
描述符 N-1
描述符 0
……
描述符 m
…...
描述符 M-1
中断门 0
……
中断门 p
…...
中断门 P-1
内存局部描述符表中断描述符表全局描述符表
GDT
8 × N-1
描述符 0
描述符 1
描述符 2
……
描述符 N-3
描述符 N-2
描述符 N-1
物理存储器
GTDR 16位界限值32位基地址
47 16 15 0
xxxxxxxxH
全局描述符表 GDT
全局描述符表寄存器 GDTR
全局描述符表 GDT
包含每个任务都可能或可以访问的段的描述符,
最多包含 213个描述符局部描述符表 LDT
LDT段描述符局部描述符表寄存器 LDTR
LDTR高速缓冲器 LDT描述符
……
物理存储器全局描述符表
GDT
LDTR高速缓存器
16位界限值32位基地址
47 16 15 0
yyyyyyyyH
LDT段描述符
……
LDTR
15 0
局部描述符表
LDT
局部描述符表 LDT
它定义了某个任务用到的局部存储器地址空间最多包含 213个描述符中断门中断描述符表 IDT
中断描述符表寄存器 IDTR
物理存储器中断门 0
中断门 1
…...
中断门 p
…...
中断门 P-2
中断门 P-1
中断描述符表
IDT
IDTR 16位界限值32位基地址
47 16 15 0
8 × P-1
zzzzzzzzH
中断门描述中断子程的入口点 (段选择子,偏移量 )
IDTR 用于指向中断描述符表 IDT
用中断类型号 p索引中断门,
再通过 GDT或 LDT找到中断程序的入口地址。
最多 256个中断类型号,IDT最长 2K.
如何从描述符表中获取所需的描述符?
即哪个描述符表?哪个描述符?
由段寄存器给出,
全局描述符表描述符 0
……
描述符 n
…...
描述符 N-1
描述符 0
……
描述符 m
…...
描述符 M-1
中断门 0
……
中断门 p
…...
中断门 P-1
内存局部描述符表中断描述符表在保护方式下,段寄存器包含的内容称为 段选择子,
为访问存储器形成线性地址时,
CPU要使用段选择子所指定的描述符中的基地址等信息 。
15 8 7 6 5 4 3 2 1 0
T
I RPL描 述 符 索 引 n
TI,描述符表指示位 Table Indicator
TI=0 指示从 GDT中读取描述符
TI=1 指示从 LDT中读取描述符
RPL,表示请求特权级 Requested Privilege Level
指示所描述的段申请的特权级。共 4个级别( 0~3级 )
用于权限检查,以决定对该段能否进行访问描述符索引 Descriptor Index
指示所要读取的描述符在描述符表中的序号,
段选择子 Segment Selector
描述符 0
描述符 1
……
描述符 n
…...
描述符 N-1
描述符 N-2
描述符 0
描述符 1
……
描述符 n
…...
描述符 M-2
描述符 M-1
物理存储器全局描述符表局部描述符表
TI=0
TI=1
每当把一个选择子装入到某个段寄存器时,
CPU自动从描述符表中取出相应的描述符,
把描述符表中的信息保存到对应的高速缓冲寄存器中,
此后,在对该段访问时,CPU都使用高速缓冲寄存器中的描述符信息,
而不用再从描述符表中取描述符,
为避免每次访问存储器时,都要访问描述符表而获取对应的描述符,
为每个段寄存器都配有一个高速缓冲寄存器,对程序员而言是不可见的,
段寄存器 段描述符高速缓冲寄存器
CS 32位段基地址 32位段界限 段属性
SS 32位段基地址 32位段界限 段属性
DS 32位段基地址 32位段界限 段属性
ES 32位段基地址 32位段界限 段属性
FS 32位段基地址 32位段界限 段属性
GS 32位段基地址 32位段界限 段属性
一个任务可使用的整个虚拟地址空间的描述符,
一半在全局描述符表中,另一半在局部描述符表中,
每个描述符所描述的段最大可达 4G字节,
所以,最大的虚拟地址空间可为,
213 × 232 × 2 = 246 = 64T
15 8 7 6 5 4 3 2 1 0
T
I RPL描 述 符 索 引 n
段选择子 Segment Selector
描述符 0
描述符 1
……
描述符 n
…...
描述符 N-1
描述符 N-2
描述符 0
描述符 1
……
描述符 n
…...
描述符 M-2
描述符 M-1
物理存储器全局描述符表局部描述符表
n的取值范围,0 ~ 213-1
全局和局部描述符表都可以包含多达 213个描述符,
分段管理机制,将虚拟地址转换为线性地址
32位段基地址 32位段界限 段属性
+
32 位 线 性 地 址若 (DS)=10h,(EBX)=12345678h,即虚拟地址 10:12345678h,
由选择子 10H所指定的 GDT中的描述符的基地址为 2000000H,
则线性地址为 32345678H
描述符 0
描述符 1
……
描述符 n
…...
描述符 N-2
描述符 N-1
内存描述符表起始地址例 MOV AL,DS:[EBX]
15 0
T
I RPL描 述 符索引 n 32位偏移地址五,保护机制
在执行指令过程中,保护机制要进行一系列的检查,
这些检查包括,
类型检查 (可否执行 /可否读 /可否写 )
描述符表限长检查 (段选择子是否超出描述符表的限长 )
段界限检查 (偏移量是否超出段的界限 )
特权级检查 (特权级是否满足操作条件 )
指令集检查 (当前条件下,该指令是否允许执行 )
分段,分页,描述符是保护机制的关键元素,
只有检查通过,访问才能进行 ; 否则出现保护错误,
例 数据访问的特权级检查段界限值 15 ~ 0位段基值 15 ~0 位
DPL
段基值 31~24位段 基 值 的 23 ~16 位段界限 19~16
32位段基地址 32位段界限 CPL
描述符缓冲区当前 CS
RPL描 述 符索引 n
目标段选择子数据段描述符
CPU
进行特权检查可访问的条件,
RPL或 CPL的权限高于等于 DPL
六,寻址方式
1,立即数寻址操作数在指令中,是一个常数,可为 8位,16位或 32位。
2,寄存器寻址操作数在寄存器中,可为 8位,16位或 32位寄存器,
3,存储器寻址操作数在存储器中,指令中给出偏移地址的来源,
段地址由默认的段寄存器或使用段跨越前缀给出,
支持 8086/8088的 16位偏移的存储器寻址方式,
并增加了 32位偏移的存储器寻址方式,
16位偏移的存储器寻址方式直接,寄存器间接,相对寄存器,基址加变址,相对基址加变址无
BX
BP
无
SI
DI
+ +
无
8位
16位
16位基址寄存器 常数偏移量
16位变址寄存器
32位偏移的存储器寻址方式无
EAX
ECX
EDX
EBX
ESP
EBP
ESI
EDI
无
EAX
ECX
EDX
EBX
ESP
EBP
ESI
EDI
+ ×
1
2
4
8
+
无
8位
32位
32位基址寄存器 比例因子 常数偏移量
32位变址寄存器
1) 32位的基址寄存器
2) 可乘比例因子 (1,2,4,8)的 32位变址寄存器
3) 8位或 32位的常数偏移量偏址可由以下三部分组成注意,
实方式和保护方式下,
均可以使用 16位或 32位偏移的存储器寻址方式,但,
在 实方式 下,段内偏移 不能超过 64K
在 保护方式 下,段内偏移 可超过 64K,最大是 4G.
基本指令集 基本 + 增强指令集系统控制指令集
8086/8088 Pentium
实模式 保护模式七,指令系统
Pentium是 32位处理器,操作数的长度可以是 8位,16位,32位。
是在 8086/8088指令集上的扩展。
1,数据传送指令 MOVSX,MOVZX,PUSHA,POPA,PUSHAD,POPAD
2,算术运算指令
3,逻辑运算和移位指令 移位次数为 1,CL,或一个 8位立即数
4,控制转移指令
5,串操作指令 INSB,INSW,OUTSB,OUTW
6,处理器控制指令
7,条件字节设臵指令 根据一些标志位设臵某个操作数为0或1
8,位操作指令 直接对一个操作数中的某位进行测试,设臵,扫描
9,高级语言支持指令 ENTER,LEAVE,BOUND
10,保护方式指令 LLDT,SLDT,LTR,STR,ARPL,LAR,LSL,VERR,VERW
系统控制指令集 (操作系统类指令集 )
为保证操作系统的安全,保护方式下支持 4个特权级 (0~3级 ),
相应地,这些操作系统类指令也可分为三种:
1) 实方式及保护方式任何特权下可执行的指令
2) 实方式及保护方式特权级0下可执行的指令
3) 仅在保护方式下指令的指令
如果在不满足条件的情况下执行这些指令,
将引起非法操作故障 (中断类型号 6).
这些指令主要用于保护方式下,也用于从实方式进入保护方式作准备,
通常只在操作系统中使用这些指令,而不在应用程序代码中使用这些指令。
实方式及任何特权下可执行的指令指令 功能
SGDT dts 存储全局描述符表寄存器指令
SIDT dts 存储中断描述符表寄存器指令
SMSW dts 存储机器状态字指令实方式及特权级 0下可执行的指令指令 功能
CLTS 清任务切换标志指令
HLT 暂停指令
LGDT src 装载全局描述符表寄存器指令
LIDT src 装载中断描述符表寄存器指令
LMSW src 装载机器状态字指令
MOV CRx/REG,REG/CRx 控制寄存器数据传送指令
MOV DRx/REG,REG/DRx 调试寄存器数据传送指令
MOV TRx/REG,REG/TRx 装载全局描述符表寄存器指令仅在保护方式下执行的指令指令 功能
LLDT src 装载局部描述符表寄存器指令
SLDT dts 存储局部描述符表寄存器指令
LTR src 装载任务寄存器指令
STR dts 存储任务寄存器指令
ARPL oprd1,oprd2 调整申请特权级指令
LAR oprd1,oprd2 装载存取权指令
LSL oprd1,oprd2 装载段界限指令
VERR oprd 读检验指令
VERW oprd 写检验指令特权指令指在保护方式下,只有当前特权级 CPL为 0才可执行的指令。
如果 CPL不为 0而执行它们,引起通用保护异常。
指令
CLTS
HLT
LGDT src
LIDT src
LLDT src
LMSW src
LTR src
MOV CRn,REG
MOV REG,CRn
MOV DRn,REG
MOV REG,DRn
功能清楚 CR0中的 TS位停机装入 GDTR
装入 IDTR
装入 LDTR
装入 MSW( CR0的低 16位)
装入 TR
装入控制寄存器保存控制寄存器装入调试寄存器保存调试寄存器七,实方式下的汇编语言程序设计在实模式下,Pentuim相当于一个可进行 32位操作的快速 8086
可使用 32位的通用寄存器例 MOV EAX,CR0
可使用新增的指令例 LGDT src
可采用扩展的寻址方式,注意段的最大长度仍是 64K
例 MOV BX,[EAX]
注意,尽管在实模式下只能使用 16位段,
但可以使用 32位操作数,
也可以使用以 32位形式表示的存储单元地址,但段的最大长度为 64K.
需用处理器类型伪指令告诉汇编程序 CPU的类型
.8086 只支持对 8086指令的汇编
.286 支持对非特权 80286指令的汇编
.286P 支持对 80286所有指令的汇编
.386 支持对非特权 80386指令的汇编
.386P 支持对 80386所有指令的汇编
.486 支持对非特权 80486指令的汇编
.486P 支持对 80486所有指令的汇编
.586 支持对非特权 80586指令的汇编
.586P 支持对 80586所有指令的汇编缺省情况下,仅识别 8086/8088的指令
.586 ;支持对非特权 80586指令的汇编
code SEGMENT USE16 ;USE16表示 16位段
ASSUME CS,code
start,MOV CX,32 ;32位寄存器
MOV EBX,CR0
next,ROL EBX,1 ;取显示位的值
MOV DL,30H
JNC print
ADD DL,1H ;转变为数字的 ASCII
print,MOV AH,2H ;显示
INT 21H
LOOP next
MOV AH,4CH ;返回 DOS
INT 21H
code ENDS
END start
例 将 CR0寄存器中的内容以二进制形式显示出来八,保护方式下的汇编语言程序设计建立描述符表 GDT,IDT,LDT
设臵 GDTR,IDTR
设臵 IDTR
初始化各段寄存器臵 PE=1
跳转到保护方式代码段参考书,
清华出版杨季文编 <80x86汇编语言程序设计教程 >
西安交大出版房有定编 <保护模式高级程序设计 >
切换到保护方式的准备工作
(实方式下 )
开始切换到保护方式切换到实方式的准备工作保护方式下程序模块实方式下程序模块返回 DOS
DOS系统下的编程流程
Window(保护方式下 )32位汇编语言程序,Win32汇编语言程序
WIN32应用程序使用 FLAT内存模式,
相当于运行在一个连续的 4GB 空间,无须和段寄存器打交道,
由操作系统完成虚拟地址到物理内存地址间的转换。
要求编写应用程序时必须严格遵守 Windows 的规范,
否则极易引起内存的保护模式错误。
与 用 C语言一样,可以使用 Windows 为编写应用程序提供的大量资源。
如调用 Windows API (Application Programming Interface)函数,
应用场合,
对 Win32应用程序执行机制分析,病毒清除、加密解密 ;
对于某些要求较高执行速度时,
参考网站,http://asm.yeah.net
.386 ;CPU类型说明
.model flat,stdcall ;内存模式和参数传递方式说明
option casemap,none ;区分大小写 说明
include filename ;Windows系统的一些定义和 API函说明
.data ;初始化的变量定义
…..
.....,
.data? ;未初始化的变量定义
......
.....,
.const ;常量定义
.....,
.....,
.code ;程序代码
start,……
..….
invoke ExitProcess,Null ;返回到 Windows
end start
Win32汇编语言程序框架
.386 ;CPU类型说明
.model flat,stdcall ;内存模式和参数传递方式说明
option casemap,none ; 区分大小写 说明
include windows.inc ;Windows系统的一些定义和 API函说明
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib
.data ;变量定义
szCaption db ‘一个简单 Win32汇编例子 ',0
szText db ’A Simple Win32 Assembly!',0
.code ;代码段
start:;产生一个消息框
invoke MessageBox,NULL,addr szText,addr szCaption,MB_OK
invoke ExitProcess,NULL ;返回到 Windows
end start
一个简单的 Win32汇编语言程序
IDE2
Pentium III
北桥
440BX
AGP
南桥
PIIX4ECMOS & RTC
USB
超级 I/O
IDE1
COM1
COM2
LPT1
550MHz L1
Cache
L2Cache
处理机总线 100MHz
100MHz
PCI 总线 33MHz PCI 插槽
ISA插槽硬件实验箱
ISA总线 8MHz
内存条
ROM BIOS
显示器硬盘光驱软驱键盘鼠标打印机
MODEM
66MHz显卡第九章 高档微处理器 Pentium
一,概述二,寄存器组三,实方式下存储器地址的产生四,保护方式下存储器地址的产生五,保护机制六,寻址方式七,指令系统八,实模式下的汇编语言程序设计九,保护方式下的汇编语言程序设计一,概述
1,Pentium的特性
1) 与 8086/8088相比
2) 两种工作方式,实方式和 保护方式
2,Pentium的内部结构
1,Pentium的特性
工作速度更快
具有保护功能
支持虚拟存储器
1) 与 8086/8066相比,
工作速度更快
1) 主频加快 133Mhz,350Mhz,450Mhz,750Mhz,1Ghz,….
2) 字长加长 (内部寄存器,内部总线等 ),32位
3) 总线传输率提高,总线 64位,并 支持突发式读写 (使总线周期缩短 )
4) 先进执行技术 (指令流水线,分支预测,高速缓存等 )
指令流水线 ( Computer Pipeline)
原理象工业生产上的装配流水线,
指令流水线由 多个不同功能的电路单元 组成,
一条指令 分成多个步骤 分别由这些电路单元执行,
由于使多条指令或多个操作 并行处理,
可实现在一个时钟周期完成一条指令,提高 CPU的执行速度,
注意,每条指令的执行步骤并未减少
CPU执行指令的过程,
1,取指令 FI (Fetch Instruction),从内存或高速缓存中读取指令
2,译码 D (Decode),将指令进行解码
3,取操作数 FO (Fetch Operands),获取执行指令所需的数据
4,执行指令 E (Execution Instruction),执行指令
5,回写 W (Write Back),将执行结果保存到内存或某个寄存器中,
指令 1
指令 2
FI1 D1 FO1 E1 W1
FI2 D2 FO2 E2 W2
CLK
…….
未采用流水线的 CPU执行指令的过程指令 1
指令 2
指令 3
指令 4
指令 5
FI1 D1 FO1 E1 W1
FI2 D2 FO2 E2 W2
FI3 D3 FO3 E3 W3
FI4 D4 FO4 E4 W4
FI5 D5 FO5 E5 W5
FI6 D6 FO6 E6 W6指令 6
FI7 D7 FO7 E7 W7指令 7
CLK
…….
采用流水线的 CPU执行指令的过程在 Dos下,
单任务
应用程序和操作系统是同级的
应用程序可以管理系统的所有资源
(包括内存,各端口,中断向量表等 )
具有保护功能故,一个编得不好的程序会影响整个系统的运行,甚至造成死机,
例如,? 一个程序把键盘中断关掉了,
所有程序就都不能从键盘获得键入的数据,
直到有程序重新打开键盘为止,
一个程序陷入死循环,没有其他程序可以把它终止掉,
造成系统死机,
在 Windows下,
多任务
应用程序和操作系统不是同级的,即程序是有级别之分的,
操作系统工作在最高级 0级中,而应用程序工作在最低级 3级中,
所有的资源对应用程序来说是被“保护”的:
应用程序对 IO端口和内存的访问受到限制,
使其无法访问其他程序运行的内存,
故,一个编得不好的程序不会影响整个系统的运行例如,如果 DOS应用程序无法正常返回系统,
只是出现该程序未正常结束的 提示,允许用户强行结束该任务 ;
并不影响其他程序 (任务 )的执行,
支持虚拟存储器高挡计算机存储系统的层次结构
CPU内部寄存器片内高速缓存片外高速缓存主存储器 (内存 )
虚拟存储器 (常用硬盘 )
外部存储器 (磁带,软盘,硬盘,光盘等 )
快慢在 CPU内部,存取速度快,数量有限由小容量的 SRAM构成 (8KB,16KB)
SRAM,32KB~512KB
由 DRAM构成 (16MB~256MB)
速度慢,容量大 (可软件设臵 )
8.4GB~50GB
程序的局部性特点,
因程序的代码和数据大都按顺序存放,
如果存储器中的 某一单元 被访问,其邻近单元 可能很快也被访问 ;
如果 某一单元 被访问,该单元将可能 很快被再访问,
程序的局部性特点 是 高速缓存 和 虚拟存储器 的理论基础高速缓存 Cache:
解决 CPU与主存储器间的速度冲突,
采用比 DRAM读写速度更快的 SRAM构成,
用来存储 CPU可能最需要的程序或数据快,
每次访问主存储器时,都先访问高速缓存,
若访问的内容在高速缓存中,就从高速缓存获取程序或数据;
否则,再访问主存储器,获取需要的数据,
并把有关内容及相关数据块取入高速缓存。
虚拟存储器 Virtual Memory:
解决实际安装的内存空间小,而运行大型程序或多任务需要大空间的冲突,
尽管 Pentium可寻址的物理空间达 4G(32根地址线 ),
实际不会安装如此大的内存 (PC机一般 16MB~256MB).
Pentium内的 存储器管理机制支持虚拟存储器的使用,
提供比实际安装的内存大得多的存储空间,
使程序员在编写大型程序时,
不用考虑计算机中物理存储器的实际容量,
并使系统能实现多任务的运行,
采用软件和硬件相结合的技术 (虚拟存储技术 ),
将程序划分为多个固定大小的块 (称为页面 ),
当需要的时候,页面被调到主存内 ;不需要时,就保存在磁盘上,
2) 两种工作方式 (实方式和保护方式 )
开机 /复位后,CPU运行在实方式下,
通过设臵控制寄存器 CR0中的 D0位为 1,切换至保护方式,
P
E
31 30 24 23 16 15 8 7 6 5 4 3 2 1 0
M
P
E
M
T
S
E
T
P
G 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
C
D
N
E
W
P
A
M
控制寄存器 CR0
PE=0,工作在实方式下
PE=1,工作在保护方式下实方式,相当一个可进行 32位操作 的 快速 8086/8088
实方式下,CPU不能发挥其优越性,不能支持多用户,多任务的操作系统,
20根地址线有效,可寻址的内存空间为仍为低端的 1M字节单元,
访问内存时,物理地址的形成过程仍为段地址 +偏移地址,
其中,段地址由段寄存器直接提供,对内存的访问不受限制,
I/O地址为 16位,可寻址的 I/O空间为 64K
对 I/O端口的读写访问不受限制
中断系统 与 8086/8088相同包括中断源,中断向量表的位臵,中断的响应过程等
指令系统 与 8086/8088兼容,所有 DOS程序可在实方式下直接运行,
寻址方式 有了扩展,存储器寻址更加灵活,
指令系统 比 8086/8088有扩展,操作数可以是 32位
I/O地址为 16位,可寻址的 I/O空间仍为 64K
但对 I/O端口的读写访问受到特权级别等的限制
支持虚拟 8086方式,
把 V86任务 (DOS应用程序 )作为保护方式下的一个任务运行,
可支持多个 V86任务,每个 V86任务是相对独立的,
特权级 4个 和完善的特权检查机制,
保证程序的安全性,实现任务间的隔离,
支持多任务,能够快速地进行任务切换和保护任务环境
采用分段管理机制和分页管理机制 为程序的共享和保护,
以及虚拟存储器提供了硬件支持
32根地址线有效,可寻址 4G的物理地址空间保护方式下,
实方式与保护方式的主要不同之处有,
内部可用寄存器组
可访问的内存空间
访问内存受到的限制及物理地址的形成过程
访问 I/O端口受到的限制
中断系统机制
指令系统注意,尽管通过改变控制寄存器 CR0中的 D0位就可以改变工作方式,
由于实方式和保护方式工作机制的不同,
为使切换后,CPU能够正常的工作,
在切换前,应做相应的一些切换工作,否则会使系统异常,
指令指针 控制ROM
控制部件地址生成
(U流水线 )
地址生成
(V流水线 )
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,标志寄存器
AH ALAHEAX AX
BH BLAHEBX BX
CH CLAHECX CX
DH DLAHEDX DX
AHEBP BP
AHESI SI
AHEDI DI
AHESP SP
AHEFLAGS
AHEIP IP
FLAGS
CS
SS
DS
ES
FS
段寄存器通用寄存器
GS
015
031
1,Pentium
实模式下寄存器组标志指令指针
CR0
CR1
CR2
CR3
DR0
DR1
DR2
DR3
DR4
DR5
DR6
DR7
TR6
控制寄存器调试寄存器测试寄存器
TR7
031
CR4
2,Pentium 保护模式下寄存器组在实方式下寄存器组的基础上增加了 4个寄存器,
全局描述符表寄存器 GDTR (48位 )
Global Descriptor Table Register
中断描述符表寄存器 IDTR (48位 )
Interrupt Descriptor Table Register
局部描述符表寄存器 LDTR (16位 )
Local Descriptor Table Register
任务寄存器 TR (16位 )
Task Register
GTDR16位界限值32位基地址
47 16 15 0
ITDR16位界限值32位基地址
LDTR16位选择子
TR16位选择子
3,80386的 4个控制寄存器,
CR0,CR4,包含一些控制 CPU操作的信息如,工作方式 控制位 PE
启用或禁用分页管理机制 的控制位 PG
控制浮点协处理器操作 的控制位 MP,EM,TS,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,EAX
注意,开机或复位时,PE=0,CPU工作在实方式
P
E
31 30 24 23 16 15 8 7 6 5 4 3 2 1 0
M
P
E
M
T
S
E
T
P
G 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
C
D
N
E
W
P
A
M;从保护方式切换到实方式; 切换前的准备工作
……;切换
MOV EAX,CR0
AND EAX,0FFFFFFFEh
MOV CR0,EAX
PG=0,关闭分页管理机制此时分段管理机制产生的线性地址直接作为物理地址,
PG=1,启用分页管理机制此时线性地址经过分页管理机制转换成物理地址,
注意,开机或复位时,PG=0,CPU关闭分页管理机制
P
E
31 30 24 23 16 15 8 7 6 5 4 3 2 1 0
M
P
E
M
T
S
E
T
P
G 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
C
D
N
E
W
P
A
M;启用分页管理机制程序段;启用前的准备工作
……;启用
MOV EAX,CR0
OR EAX,80000000h
MOV CR0,EAX;关闭分页管理机制程序段;关闭前的准备工作
……;关闭
MOV EAX,CR0
AND EAX,7FFFFFFFh
MOV CR0,EAX
80X86的标志寄存器
C
F
P
F
A
F
Z
F
S
F
T
F
I
F
D
F
O
F
N
T
IO
PL
R
F
V
M
A
C
V
IF
V
IP
I
D
31 …..,21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
8086/8088
80286
80386
80486
Pentium
4,标志寄存器 EFLAGS
IOPL (Input/Output privilege level 输入 /输出 特权级标志 )
用于保护方式下,指定执行 I/O指令的特权级别,
如果当前特权级别 CPL大于或等于 IOPL,可执行 I/O指令,
否则产生一个保护异常。
VM (虚拟 8086方式标志 )
VM=1,表示工作在虚拟 8086下方式。
VM=0,表示工作在一般的保护方式下
C
F
P
F
A
F
Z
F
S
F
T
F
I
F
D
F
O
F
N
T
IO
PL
R
F
V
M
A
C
V
IF
V
IP
I
D
31 …..,21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
三,实模式下存储器地址的产生与 8086/8088相似,物理地址 20位物理地址 PA = 段地址 + 偏移地址
= ( 段寄存器 ) × 16 + 偏移地址
= ( 段寄存器 ) × 10H + 偏移地址即段寄存器的内容左移 4位,加上偏移地址
段地址由段寄存器提供,CS,SS,DS,ES,FS,GS 16位
偏移地址由指令中的寻址方式提供,范围在 0~FFFFh。
特点,1) 段地址直接由段寄存器得到
2) 20根地址线有效四,保护模式下存储器地址的产生
0
线性地址线性地址空间
232
分段管理机制
31
物理地址物理地址空间最大 232
与实际的配臵有关分页管理机制
031PG=1
PG=0
当 PG=0时,分页管理机制关闭,线性地址就是物理地址虚拟地址空间虚拟地址
213 × 232 × 2
= 246 = 64T
选择子 偏移量:
015 031
段寄存器
将存储空间分为若干个段,
存储单元的地址为,段基地址 (32位 ) + 段内偏移地址 (32位 )
其中 段基地址通过指令中的段寄存器间接获取偏移地址由指令中的寻址方式获取,
如 MOV AX,DS,[EBX]
存储单元的段基地址通过 DS 寄存器间接获取偏移地址为 EBX寄存器的内容分段管理机制
与实方式下不同的是,段基地址不是通过段寄存器直接得到,
保护方式下,段寄存器起到的是索引的作用 (称为段选择子 ).
每个段由三个参数定义,
段基值,指示 段在线性地址空间中的起始地址,32位段界限,规定段的大小,0~4G
段属性,规定段的主要特性保护方式下的段
用于表示段的三个参数的数据称为 描述符,
每个描述符长 8字节
每个段都有一个相应的描述符来描述,
为支持虚拟存储管理和多任务的处理,使用了多种类型的描述符,
根据 功能的不同,在 不同类型的描述符 中存放 不同的控制信息,
利用描述符的内容,CPU可以自动完成访问范围和权限的检查,
存储段描述符 代码段描述符数据段描述符系统段描述符 LDT段描述符任务状态段描述符门 描 述 符调用门描述符任务门描述符中断门描述符陷阱门描述符描 述 符存储段描述符格式存储段 用于存放程序直接进行访问的代码和数据的段。
存储段描述符 用于描述存储段。
15 8 7 6 5 4 3 2 1 0
段 界 限 值 的 15 ~ 0 位段 基 值 的 15 ~ 0 位字节 0
字节 2
字节 1
字节 3
字节 5
字节 7
DPLP
D
T
1
E
D
C
AE WR
段 基 值 的 31~24 位字节 4段 基 值 的 23 ~16 位字节 6G
A
V
LD 0
段界限值
19~16 位
DPLP
D
T
1
E
D
C
AE 字节 5G
A
V
L
D 0 段界限值19~16 位字节 6 WR
DT,表示描述符的类型 Descriptor Type
DT=1,存储段描述符
DT=0,系统段描述符或门描述符
E,可执行位 Execute
E=1,指示段是可执行的,是代码段,该描述符为代码段描述符
E=0,指示段是可执行的,是数据段,该描述符为数据段描述符
W/R,可读 /写位 Write/Read
对数据段,W=1,表示该段可读可写; W=0,可读不可写对代码段,R=1,表示该段可执行可读; R=0,可执行不可读
G,段界限粒度位 Granularity
G=0,界限粒度为字节; G=1,界限粒度为 4K字节( 212)
当 G=1 时,一个段的最大为,220 × 4K = 232
DPL,表示描述符特权级 Descriptor Privilege Level
指示所描述的段的特权级。共 4个级别( 0~3级 ) 。
用于权限检查,以决定对该段能否进行访问。
P,表示段是否存在位 Present
P=1,表示该描述符所描述的段在内存中
P=0,表示该描述符所描述的段不在内存中
A,访问位 Acess
A=1,指示描述符被访问过。
A=0,指示描述符 未 被访问过
ED/C,对数据段,表示 数据扩展方向位 (0向高,1向低 )
对代码段,表示类型 (1一致代码段,0普通代码,用于特权检查 )
DPLP DT
E
D
C
AE 字节 5G
A
V
L
D 0 段界限值19~16 位字节 6 WR
系统段描述符及门描述符格式系统段 是为实现存储管理所使用的一种特殊段,
系统段描述符 用于描述系统段。
门描述符 用于描述控制转移的入口点。
15 8 7 6 5 4 3 2 1 0
段 界 限 值 的 15 ~ 0 位段 基 值 的 15 ~ 0 位字节 0
字节 2
字节 1
字节 3
字节 5
字节 7
DPLP
D
T
0
段 基 值 的 31~24 位字节 4段 基 值 的 23 ~16 位字节 6G
A
V
LD 0
段界限值
19~16 位
TYPE
DPLP
D
T
1 字节 5
G
A
V
L
D 0 段界限值19~16 位字节 6 TYPE
TYPE
0000
0001
0010
0011
0100
0101
0110
0111
TYPE
1000
1001
1010
1011
1100
1101
1110
1111
说明未定义可用 286TSS
LDT
忙的 286TSS
286调用门任务门
286中断门
286陷阱门说明未定义可用 386TSS
未定义忙的 386TSS
386调用门未定义
386中断门
386陷阱门门描述符格式调用门,段选择子指向代码段描述符任务门,段选择子指向任务状态段 TSS描述符中断门和陷阱门,段选择子指向代码段描述符
15 8 7 6 5 4 3 2 1 0
偏 移 量 15 ~ 0 位段 选 择 子字节 0
字节 2
字节 1
字节 3
字节 5
字节 7
DPLP
D
T
0
字节 4
字节 6
TYPE
偏 移 量 31 ~ 16 位
0 0 0 计 数 值
一个任务可以有多个段,
每个段需要一个描述符来描述,
有三种类型的描述符表,
1) 全局描述符表 GDT
( Global Descriptor Table )
2) 局部描述符表 LDT
( Local Descriptor Table )
3) 中断描述符表 IDT
( Interrupt Descriptor Table )
为便于组织管理,把描述符组织成线性表,
称为描述符表,
全局描述符表描述符 0
……
描述符 n
…...
描述符 N-1
描述符 0
……
描述符 m
…...
描述符 M-1
中断门 0
……
中断门 p
…...
中断门 P-1
内存局部描述符表中断描述符表
全局描述符表 GDT包含每个任务都可能或可以访问的段的描述符,
通常包含描述操作系统所使用的代码段,数据段和堆栈段的描述符,
也包含多种特殊数据段描述符,如各个用于描述任务 LDT的特殊数据段等,
在任务切换时,并不切换 GDT,
每个任务可以访问自己的 LDT,不能访问其他任务的 LDT.
通过 LDT可以使各任务私有的各个段与其他任务相隔离,达到保护的目的,
通过 GDT可以使各任务都需要使用的段能够被共享,
在整个系统中只有一张 GDT,但可以 可以有多张 LDT
局部描述符表 LDT它定义了某个任务用到的局部存储器地址空间每个任务可以有一张自己的局部描述符表 LDT:
含该任务的代码段,数据段和堆栈段的描述符,
也包含该任务所使用的一些门描述符,
随着任务的切换,系统当前的局部描述符表 LDT也随之切换,
GDT,LDT,IDT是保护方式下重要的特殊段,
包含有对段机制所用的重要表格,
为方便快速地定位这些段,
CPU采用专用寄存器保存这些段的基地址和界限,
全局描述符表描述符 0
……
描述符 n
…...
描述符 N-1
描述符 0
……
描述符 m
…...
描述符 M-1
中断门 0
……
中断门 p
…...
中断门 P-1
内存局部描述符表中断描述符表全局描述符表
GDT
8 × N-1
描述符 0
描述符 1
描述符 2
……
描述符 N-3
描述符 N-2
描述符 N-1
物理存储器
GTDR 16位界限值32位基地址
47 16 15 0
xxxxxxxxH
全局描述符表 GDT
全局描述符表寄存器 GDTR
全局描述符表 GDT
包含每个任务都可能或可以访问的段的描述符,
最多包含 213个描述符局部描述符表 LDT
LDT段描述符局部描述符表寄存器 LDTR
LDTR高速缓冲器 LDT描述符
……
物理存储器全局描述符表
GDT
LDTR高速缓存器
16位界限值32位基地址
47 16 15 0
yyyyyyyyH
LDT段描述符
……
LDTR
15 0
局部描述符表
LDT
局部描述符表 LDT
它定义了某个任务用到的局部存储器地址空间最多包含 213个描述符中断门中断描述符表 IDT
中断描述符表寄存器 IDTR
物理存储器中断门 0
中断门 1
…...
中断门 p
…...
中断门 P-2
中断门 P-1
中断描述符表
IDT
IDTR 16位界限值32位基地址
47 16 15 0
8 × P-1
zzzzzzzzH
中断门描述中断子程的入口点 (段选择子,偏移量 )
IDTR 用于指向中断描述符表 IDT
用中断类型号 p索引中断门,
再通过 GDT或 LDT找到中断程序的入口地址。
最多 256个中断类型号,IDT最长 2K.
如何从描述符表中获取所需的描述符?
即哪个描述符表?哪个描述符?
由段寄存器给出,
全局描述符表描述符 0
……
描述符 n
…...
描述符 N-1
描述符 0
……
描述符 m
…...
描述符 M-1
中断门 0
……
中断门 p
…...
中断门 P-1
内存局部描述符表中断描述符表在保护方式下,段寄存器包含的内容称为 段选择子,
为访问存储器形成线性地址时,
CPU要使用段选择子所指定的描述符中的基地址等信息 。
15 8 7 6 5 4 3 2 1 0
T
I RPL描 述 符 索 引 n
TI,描述符表指示位 Table Indicator
TI=0 指示从 GDT中读取描述符
TI=1 指示从 LDT中读取描述符
RPL,表示请求特权级 Requested Privilege Level
指示所描述的段申请的特权级。共 4个级别( 0~3级 )
用于权限检查,以决定对该段能否进行访问描述符索引 Descriptor Index
指示所要读取的描述符在描述符表中的序号,
段选择子 Segment Selector
描述符 0
描述符 1
……
描述符 n
…...
描述符 N-1
描述符 N-2
描述符 0
描述符 1
……
描述符 n
…...
描述符 M-2
描述符 M-1
物理存储器全局描述符表局部描述符表
TI=0
TI=1
每当把一个选择子装入到某个段寄存器时,
CPU自动从描述符表中取出相应的描述符,
把描述符表中的信息保存到对应的高速缓冲寄存器中,
此后,在对该段访问时,CPU都使用高速缓冲寄存器中的描述符信息,
而不用再从描述符表中取描述符,
为避免每次访问存储器时,都要访问描述符表而获取对应的描述符,
为每个段寄存器都配有一个高速缓冲寄存器,对程序员而言是不可见的,
段寄存器 段描述符高速缓冲寄存器
CS 32位段基地址 32位段界限 段属性
SS 32位段基地址 32位段界限 段属性
DS 32位段基地址 32位段界限 段属性
ES 32位段基地址 32位段界限 段属性
FS 32位段基地址 32位段界限 段属性
GS 32位段基地址 32位段界限 段属性
一个任务可使用的整个虚拟地址空间的描述符,
一半在全局描述符表中,另一半在局部描述符表中,
每个描述符所描述的段最大可达 4G字节,
所以,最大的虚拟地址空间可为,
213 × 232 × 2 = 246 = 64T
15 8 7 6 5 4 3 2 1 0
T
I RPL描 述 符 索 引 n
段选择子 Segment Selector
描述符 0
描述符 1
……
描述符 n
…...
描述符 N-1
描述符 N-2
描述符 0
描述符 1
……
描述符 n
…...
描述符 M-2
描述符 M-1
物理存储器全局描述符表局部描述符表
n的取值范围,0 ~ 213-1
全局和局部描述符表都可以包含多达 213个描述符,
分段管理机制,将虚拟地址转换为线性地址
32位段基地址 32位段界限 段属性
+
32 位 线 性 地 址若 (DS)=10h,(EBX)=12345678h,即虚拟地址 10:12345678h,
由选择子 10H所指定的 GDT中的描述符的基地址为 2000000H,
则线性地址为 32345678H
描述符 0
描述符 1
……
描述符 n
…...
描述符 N-2
描述符 N-1
内存描述符表起始地址例 MOV AL,DS:[EBX]
15 0
T
I RPL描 述 符索引 n 32位偏移地址五,保护机制
在执行指令过程中,保护机制要进行一系列的检查,
这些检查包括,
类型检查 (可否执行 /可否读 /可否写 )
描述符表限长检查 (段选择子是否超出描述符表的限长 )
段界限检查 (偏移量是否超出段的界限 )
特权级检查 (特权级是否满足操作条件 )
指令集检查 (当前条件下,该指令是否允许执行 )
分段,分页,描述符是保护机制的关键元素,
只有检查通过,访问才能进行 ; 否则出现保护错误,
例 数据访问的特权级检查段界限值 15 ~ 0位段基值 15 ~0 位
DPL
段基值 31~24位段 基 值 的 23 ~16 位段界限 19~16
32位段基地址 32位段界限 CPL
描述符缓冲区当前 CS
RPL描 述 符索引 n
目标段选择子数据段描述符
CPU
进行特权检查可访问的条件,
RPL或 CPL的权限高于等于 DPL
六,寻址方式
1,立即数寻址操作数在指令中,是一个常数,可为 8位,16位或 32位。
2,寄存器寻址操作数在寄存器中,可为 8位,16位或 32位寄存器,
3,存储器寻址操作数在存储器中,指令中给出偏移地址的来源,
段地址由默认的段寄存器或使用段跨越前缀给出,
支持 8086/8088的 16位偏移的存储器寻址方式,
并增加了 32位偏移的存储器寻址方式,
16位偏移的存储器寻址方式直接,寄存器间接,相对寄存器,基址加变址,相对基址加变址无
BX
BP
无
SI
DI
+ +
无
8位
16位
16位基址寄存器 常数偏移量
16位变址寄存器
32位偏移的存储器寻址方式无
EAX
ECX
EDX
EBX
ESP
EBP
ESI
EDI
无
EAX
ECX
EDX
EBX
ESP
EBP
ESI
EDI
+ ×
1
2
4
8
+
无
8位
32位
32位基址寄存器 比例因子 常数偏移量
32位变址寄存器
1) 32位的基址寄存器
2) 可乘比例因子 (1,2,4,8)的 32位变址寄存器
3) 8位或 32位的常数偏移量偏址可由以下三部分组成注意,
实方式和保护方式下,
均可以使用 16位或 32位偏移的存储器寻址方式,但,
在 实方式 下,段内偏移 不能超过 64K
在 保护方式 下,段内偏移 可超过 64K,最大是 4G.
基本指令集 基本 + 增强指令集系统控制指令集
8086/8088 Pentium
实模式 保护模式七,指令系统
Pentium是 32位处理器,操作数的长度可以是 8位,16位,32位。
是在 8086/8088指令集上的扩展。
1,数据传送指令 MOVSX,MOVZX,PUSHA,POPA,PUSHAD,POPAD
2,算术运算指令
3,逻辑运算和移位指令 移位次数为 1,CL,或一个 8位立即数
4,控制转移指令
5,串操作指令 INSB,INSW,OUTSB,OUTW
6,处理器控制指令
7,条件字节设臵指令 根据一些标志位设臵某个操作数为0或1
8,位操作指令 直接对一个操作数中的某位进行测试,设臵,扫描
9,高级语言支持指令 ENTER,LEAVE,BOUND
10,保护方式指令 LLDT,SLDT,LTR,STR,ARPL,LAR,LSL,VERR,VERW
系统控制指令集 (操作系统类指令集 )
为保证操作系统的安全,保护方式下支持 4个特权级 (0~3级 ),
相应地,这些操作系统类指令也可分为三种:
1) 实方式及保护方式任何特权下可执行的指令
2) 实方式及保护方式特权级0下可执行的指令
3) 仅在保护方式下指令的指令
如果在不满足条件的情况下执行这些指令,
将引起非法操作故障 (中断类型号 6).
这些指令主要用于保护方式下,也用于从实方式进入保护方式作准备,
通常只在操作系统中使用这些指令,而不在应用程序代码中使用这些指令。
实方式及任何特权下可执行的指令指令 功能
SGDT dts 存储全局描述符表寄存器指令
SIDT dts 存储中断描述符表寄存器指令
SMSW dts 存储机器状态字指令实方式及特权级 0下可执行的指令指令 功能
CLTS 清任务切换标志指令
HLT 暂停指令
LGDT src 装载全局描述符表寄存器指令
LIDT src 装载中断描述符表寄存器指令
LMSW src 装载机器状态字指令
MOV CRx/REG,REG/CRx 控制寄存器数据传送指令
MOV DRx/REG,REG/DRx 调试寄存器数据传送指令
MOV TRx/REG,REG/TRx 装载全局描述符表寄存器指令仅在保护方式下执行的指令指令 功能
LLDT src 装载局部描述符表寄存器指令
SLDT dts 存储局部描述符表寄存器指令
LTR src 装载任务寄存器指令
STR dts 存储任务寄存器指令
ARPL oprd1,oprd2 调整申请特权级指令
LAR oprd1,oprd2 装载存取权指令
LSL oprd1,oprd2 装载段界限指令
VERR oprd 读检验指令
VERW oprd 写检验指令特权指令指在保护方式下,只有当前特权级 CPL为 0才可执行的指令。
如果 CPL不为 0而执行它们,引起通用保护异常。
指令
CLTS
HLT
LGDT src
LIDT src
LLDT src
LMSW src
LTR src
MOV CRn,REG
MOV REG,CRn
MOV DRn,REG
MOV REG,DRn
功能清楚 CR0中的 TS位停机装入 GDTR
装入 IDTR
装入 LDTR
装入 MSW( CR0的低 16位)
装入 TR
装入控制寄存器保存控制寄存器装入调试寄存器保存调试寄存器七,实方式下的汇编语言程序设计在实模式下,Pentuim相当于一个可进行 32位操作的快速 8086
可使用 32位的通用寄存器例 MOV EAX,CR0
可使用新增的指令例 LGDT src
可采用扩展的寻址方式,注意段的最大长度仍是 64K
例 MOV BX,[EAX]
注意,尽管在实模式下只能使用 16位段,
但可以使用 32位操作数,
也可以使用以 32位形式表示的存储单元地址,但段的最大长度为 64K.
需用处理器类型伪指令告诉汇编程序 CPU的类型
.8086 只支持对 8086指令的汇编
.286 支持对非特权 80286指令的汇编
.286P 支持对 80286所有指令的汇编
.386 支持对非特权 80386指令的汇编
.386P 支持对 80386所有指令的汇编
.486 支持对非特权 80486指令的汇编
.486P 支持对 80486所有指令的汇编
.586 支持对非特权 80586指令的汇编
.586P 支持对 80586所有指令的汇编缺省情况下,仅识别 8086/8088的指令
.586 ;支持对非特权 80586指令的汇编
code SEGMENT USE16 ;USE16表示 16位段
ASSUME CS,code
start,MOV CX,32 ;32位寄存器
MOV EBX,CR0
next,ROL EBX,1 ;取显示位的值
MOV DL,30H
JNC print
ADD DL,1H ;转变为数字的 ASCII
print,MOV AH,2H ;显示
INT 21H
LOOP next
MOV AH,4CH ;返回 DOS
INT 21H
code ENDS
END start
例 将 CR0寄存器中的内容以二进制形式显示出来八,保护方式下的汇编语言程序设计建立描述符表 GDT,IDT,LDT
设臵 GDTR,IDTR
设臵 IDTR
初始化各段寄存器臵 PE=1
跳转到保护方式代码段参考书,
清华出版杨季文编 <80x86汇编语言程序设计教程 >
西安交大出版房有定编 <保护模式高级程序设计 >
切换到保护方式的准备工作
(实方式下 )
开始切换到保护方式切换到实方式的准备工作保护方式下程序模块实方式下程序模块返回 DOS
DOS系统下的编程流程
Window(保护方式下 )32位汇编语言程序,Win32汇编语言程序
WIN32应用程序使用 FLAT内存模式,
相当于运行在一个连续的 4GB 空间,无须和段寄存器打交道,
由操作系统完成虚拟地址到物理内存地址间的转换。
要求编写应用程序时必须严格遵守 Windows 的规范,
否则极易引起内存的保护模式错误。
与 用 C语言一样,可以使用 Windows 为编写应用程序提供的大量资源。
如调用 Windows API (Application Programming Interface)函数,
应用场合,
对 Win32应用程序执行机制分析,病毒清除、加密解密 ;
对于某些要求较高执行速度时,
参考网站,http://asm.yeah.net
.386 ;CPU类型说明
.model flat,stdcall ;内存模式和参数传递方式说明
option casemap,none ;区分大小写 说明
include filename ;Windows系统的一些定义和 API函说明
.data ;初始化的变量定义
…..
.....,
.data? ;未初始化的变量定义
......
.....,
.const ;常量定义
.....,
.....,
.code ;程序代码
start,……
..….
invoke ExitProcess,Null ;返回到 Windows
end start
Win32汇编语言程序框架
.386 ;CPU类型说明
.model flat,stdcall ;内存模式和参数传递方式说明
option casemap,none ; 区分大小写 说明
include windows.inc ;Windows系统的一些定义和 API函说明
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib
.data ;变量定义
szCaption db ‘一个简单 Win32汇编例子 ',0
szText db ’A Simple Win32 Assembly!',0
.code ;代码段
start:;产生一个消息框
invoke MessageBox,NULL,addr szText,addr szCaption,MB_OK
invoke ExitProcess,NULL ;返回到 Windows
end start
一个简单的 Win32汇编语言程序