`
lobin
  • 浏览: 425478 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

386:第3篇

 
阅读更多

 

 

内存

 

内存区间

 

低内存(Low Memory)区间

低内存(Low Memory)区间在0x00000到0xfffff之间的1M大小的内存区间。

 

Real Mode IVT

BDA即BIOS data area,BIOS数据区

这里有一部分自行约定使用的内存区

主引导程序加载区

这里有一部分自行约定使用的内存区

EBDA即Extended BIOS Data Area,扩展BIOS数据区

VGA显示内存区

Video BIOS区

Mapped hardware & Misc区

Motherboard(母板) BIOS区

 

高内存("Upper" Memory)区间

大于1M的内存区间

 

寻址

 

寻址方式

立即数寻址

直接寻址

寄存器寻址

寄存器间接寻址

寄存器相对寻址

基址变址寻址

基址变址相对寻址

 

除了立即数寻址和寄存器寻址,其他的寻址方式本质上是一样的。

立即数寻址

mov cs, 7C00H

寄存器寻址

mov ds, cs

直接寻址

mov si, [0H]

寄存器间接寻址

mov si, cs:[bx]

寄存器相对寻址

mov si, cs:[bx + 0H]

基址变址寻址

mov ax, cs:[bx][si]

基址变址相对寻址

mov ax, cs:0H[bx][si]

 

以上例子中都只是mov举例说明各种寻址方式。

寻址是无处不在的,除了上面的例子,数据传送,数据运算,跳转等都会涉及到寻址。

 

比如在程序跳转的时候,如JMP,CALL,甚至是RET,IRET等。

 

内存寻址

有些架构如arm是不能直接访问内存的,x86可以直接访问内存。x86不管运行在哪种模式下,实模式,保护模式,虚拟8086模式,首先都是采用的是分段寻址。x86实模式和保护模式的分段寻址是不一样的。

 




 

 

 

内存管理

 

分段管理

 

段选择子

写道
A segment selector is a 16-bit identifier for a segment (see Figure 3-6). It does not point directly to the segment,
but instead points to the segment descriptor that defines the segment. A segment selector contains the following
items:
Index (Bits 3 through 15) — Selects one of 8192 descriptors in the GDT or LDT. The processor multiplies
the index value by 8 (the number of bytes in a segment descriptor) and adds the result to the base
address of the GDT or LDT (from the GDTR or LDTR register, respectively).
TI (table indicator) flag
(Bit 2) — Specifies the descriptor table to use: clearing this flag selects the GDT; setting this flag
selects the current LDT.
Requested Privilege Level (RPL)
(Bits 0 and 1) — Specifies the privilege level of the selector. The privilege level can range from 0 to
3, with 0 being the most privileged level. See Section 5.5, “Privilege Levels”, for a description of the
relationship of the RPL to the CPL of the executing program (or task) and the descriptor privilege
level (DPL) of the descriptor the segment selector points to.
The first entry of the GDT is not used by the processor. A segment selector that points to this entry of the GDT (that
is, a segment selector with an index of 0 and the TI flag set to 0) is used as a “null segment selector.” The processor
does not generate an exception when a segment register (other than the CS or SS registers) is loaded with a null
selector. It does, however, generate an exception when a segment register holding a null selector is used to access
memory. A null selector can be used to initialize unused segment registers. Loading the CS or SS register with a null
segment selector causes a general-protection exception (#GP) to be generated.
Segment selectors are visible to application programs as part of a pointer variable, but the values of selectors are
usually assigned or modified by link editors or linking loaders, not application programs.

 


保护模式下,段寄存器实际上就是段选择子,而不是像实地址模式那样的段基址。通过段选择子中的索引index找到描述符表中对应的段描述符。

描述符表中的每个描述符大小为8个字节,处理器将段选择子中的索引index乘以8加上描述符表的基地址得到描述符表中对应段描述符的基地址。

 

段描述符(Segment Descriptor)


Segment Limit字段:

表示段大小,Segment Limit字段由两部分组成,Segment Limit 15:00和Seg Limit 19:16,总共20位。在G标志位没有置位的情况下,表示字节数,可以看出它能表示的范围为1byte <= Segment Limit < 1M,如果G标志位置位,表示4K字节数,可以看出它能表示的范围为4K bytes <= Segment Limit < 4G

 

G标记位:粒度

写道
G (granularity) flag
Determines the scaling of the segment limit field. When the granularity flag is clear, the segment limit is interpreted in byte units; when flag is set, the segment limit is interpreted in 4-KByte units. (This flag does not affect the granularity of the base address; it is always byte granular.) When the granularity flag is set, the twelve least significant bits of an offset are not tested when checking the offset against the segment limit. For example, when the granularity flag is set, a limit of 0 results in valid offsets from 0 to 4095.

如果G标记位没有设置,表示segment limit field个字节。如果被设置,表示(segment limit field)*4K字节。

 

Base Address字段:

段的基地址,由3部分组成,总共31位(4字节),

 

Type 字段:

指定段或者门(Gate)的类型以及指定可对段进行的访问类型和增长方向。该字段及其中的每一位取决于S (descriptor type) flag(即S标志)指定的是代码段或数据段描述符还是系统描述符。

 

S标记

也叫描述符类型标记,指定该描述符是代码段或数据段描述符还是系统描述符。

如果该标志位为0,表示系统段描述符,如果该标志位为1,表示代码段或数据段描述符。

 

DPL字段:

也就是描述符特权级字段,用于指定该段的特权级,特权级可以从0到3,即0,1,2,3。其中0特权级为最高特权级。DPL用于控制段的访问权限。

 

DPL和CPL以及RPL的关系可以参考See Section 5.5, "Privilege Levels"这一章节。

 

P标志

也叫segment-present标志,或段可见标志。用于指定该段在内存中可见或不可见。如果设置了该标志位,表示在内存中可见;如果没有设置该标志位,表示在内存中不可见。

 

如果该段在内存中不可见,即没有设置该标志位,当指向该段描述符的段选择子加载到段寄存器时,处理器将产生一个段不存在的异常(#NP),也就是segment-not-present exception (#NP)。

 

D/B标志

即default operation size/default stack pointer size and/or upper bound标志,或者默认的操作大小/默认的栈指针大小以及或者操作大小上限/栈指针大小上限。

 

这里的D表示默认的操作大小/默认的栈指针大小,B表示操作大小上限/栈指针大小上限。

 

取决于该段描述符是可执行代码段、向下扩展的数据段还是堆栈段,而执行不同的功能。

 

对于32位代码段和数据段,这个标志应该总是设置为1.。

对于16为代码段和数据段,这个标志应该总是设置为0。

 

如果是可执行代码段

 

如果是堆栈段(包括堆栈段寄存器指向的数据段)

 

如果是向下扩展的数据段

 

 

下面是一个段描述符例子:

_gdt_5:

# gdt 5, display memory range 0xb0000-0xb7fff, 32K

# base address of segment: 0x000b0000(0xb0000), limit of segment: 0x08000(0000 1000 0000 0000 0000b)

# code or data segment(1), data segment(0010), descriptor privilege level(00)

.word 0x8000# the bit 0-15 of limit of segment.

.word 0x0000# the bit 0-15 of base address of segment.

.byte 0x0b# the bit 16-23 of base address of segment. 

.byte 0b10010010# 0-3: type, 4: s, 5-6: dpl, 7: p

.byte 0b01000000# 0-3: the bit 16-19 of limit of segment, 4: avl, 5: l, 6: d/b, 7: g

.byte 0x00# the bit 24-31 of base address of segment.

 

段描述符(Segment Descriptor, Segment Descriptor When Segment-Present Flag Is Clear)


描述符类型

通常指的是段描述符,比如代码段描述符、数据段描述符。

 

另外还有系统描述符,比如门(Gate)描述符,包括调用门(Call-gate)描述符、中断门(Interrupt-gate)描述符、陷阱门(Trap-gate)描述符以及任务门(Task-gate)描述符。

 

系统描述符除了门(Gate)描述符,还有系统段描述符,包括局部描述符表段(Local descriptor-table segment,LDT segment)描述符和任务状态段(Task-state segment,TSS)描述符。

 

代码段描述符、数据段描述符类型



系统描述符类型

系统描述符类型定义了系统段描述符和门(Gate)描述符类型


段描述符表

写道
A segment descriptor table is an array of segment descriptors (see Figure 3-10). A descriptor table is variable in
length and can contain up to 8192 (2 13 ) 8-byte descriptors.

 

包括2种类型的描述符表:全局描述符表(The global descriptor table,GDT)和局部描述符表(The local descriptor tables,LDT)



 
 
 

 

分页管理

 

 

 

0
1
分享到:
评论

相关推荐

    Android应用程序第三方库的恶意行为隔离技术综述.pdf

    关键词:Android、第三方库、隔离、恶意行为、中图分类号:TP3、文献标识码:A、DOI:10.3969/j.issn.1000-386x.2017.10.054 这篇综述为理解Android应用的第三方库安全问题提供了深入的视角,对于开发者、安全研究...

    20131125-Wind资讯-2013年11月宏观经济百图:国内篇.pdf

    宏观经济百图显示了2013年三季度各产业对GDP增长的贡献率,其中第三产业的比重上升至45.50%,第二产业降至45.28%,第一产业为9.22%。最终消费支出对GDP累计同比的贡献率为45.9%,资本形成总额的贡献率为55.8%,而...

    北京市平谷区2019-2020学年七年级上学期期末数学试题.pdf

    3. 几何图形:第三题是平面图形与立体图形的对应,考察空间想象能力。 4. 代数表达式:第四题要求用代数式表示"a的2倍与b的平方的差",正确答案是2a - b^2。 5. 方程解:第五题中,2x是方程2/3x=m的解,可以解出m的...

    网管教程 从入门到精通软件篇.txt

    网管教程 从入门到精通软件篇 ★一。★详细的xp修复控制台命令和用法!!! 放入xp(2000)的光盘,安装时候选R,修复! Windows XP(包括 Windows 2000)的控制台命令是在系统出现一些意外情况下的一种非常有效的...

    【C语言初学】作业:计算在贷款第一个月、第二个月、第三个月后需要还款金额(csdn)————程序.pdf

    这篇C语言作业的目标是计算贷款在第一个月、第二个月、第三个月后的剩余还款金额。这里涉及到的编程概念和计算公式主要包括贷款利率、还款金额、剩余贷款金额以及利息的计算。 首先,我们需要理解贷款的基本概念。...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    全书一共被压缩为5个rar,这是第三个!!!! 其他的请看ID:ljtt123(本人分享) 本博客提供的所有教程的资源原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何...

    鸟哥的私房菜-服务器架设篇

    - **第一次发布**:1991年,发布了第一个版本 Linux 0.02。 - **社区贡献**:Linux 社区的参与和贡献对于 Linux 的成长至关重要。 - **版本多样化**: - **Distributions (发行版)**:Linux 有着众多的发行版,...

    2015三年级数学下册 第五单元评估检测题(B卷) 苏教版

    7. 选择题:涉及了时间间隔的计算,如第1题答案是13小时,第2题是下午2点,第3题是11:30,第4题是5月2日的0时,第5题B选项正确,第6题答案是C,每年下半年都有184天,无论是平年还是闰年。 8. 计算题:包括直接写得...

    康佳彩电 P29ST390,P25ST390,P34ST390,P29ST386,P34ST386,P29ST217,P25ST281 电路图纸

    本篇将基于提供的康佳彩电P系列(P29ST390、P25ST390、P34ST390、P29ST386、P34ST386、P29ST217、P25ST281)电路图纸进行深入分析,帮助维修人员和技术爱好者更好地理解这些型号的核心电路设计与工作原理。...

    模拟电子技术基础试题答案2

    3. 集成功放LM386:这是一个常用的音频功率放大器芯片,具有8个引脚。 4. 电压比较器:在构成电压比较器时,集成运放工作在开环或非线性状态,用于比较两个电压的大小,输出为高电平或低电平。 5. RC选频网络:当...

    aws-java-sdk-s3-1.12.386.jar中文-英文对照文档.zip

    aws-java-sdk-s3-***.jar中文-英文对照文档.zip,java,aws-java-sdk-s3-***.jar,com.amazonaws,aws-java-sdk-s3,***,com.amazonaws.auth,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,amazonaws,aws,sdk...

    毕业论文ssm386疫情之下社区管理系统.docx

    第三章节则着重于需求分析,包括需求分析、系统可行性分析、项目设计目标与原则和系统流程分析等;第四章节聚焦于架构设计,包括系统体系结构、数据库实体设计和数据库表设计等;第五章节则着重于系统实现,包括登录...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    第3部分 jsp篇 第12章 jsp技术 366 12.1 jsp简介 366 12.2 jsp的运行机制 366 12.3 jsp的语法 371 12.3.1 指令元素(directive elements) 371 12.3.2 脚本元素(scripting elements) 374 12.3.3 动作元素...

    C++ STL开发技术导引(第5章)

    第三篇 C++ STL容器技术 第6章 vector向量容器 92 6.1 vector技术原理 92 6.2 vector应用基础 94 6.3 本章小结 101 第7章 deque双端队列容器 102 7.1 deque技术原理 102 7.2 deque应用基础 108 7.3 ...

    小五数学第11讲:神奇的数字9(学生版).docx

    这篇文档主要介绍了数字9在数学中的神奇特性,特别是与整除性和余数计算相关的知识点。以下是这些内容的详细解析: 1. **数字9的整除性**:一个数如果各个位上的数字相加的和能被9整除,那么这个数本身也能被9整除...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    第3章 Java中的基本数据类型和运算符 33 教学视频:1小时5分钟 3.1 Java中的基本数据类型 33 3.1.1 基本数据类型——编程语言中的数据原子 33 3.1.2 Java中的基本上数据类型介绍 34 3.1.3 基本数据类型值域 34 ...

    操作系统原理DOS篇(第二版)

    3. **文件系统**:DOS使用FAT(File Allocation Table,文件分配表)文件系统,用于组织和存储文件。FAT包含每个文件的存储位置信息,文件名、大小和属性等信息。 4. **命令行操作**:DOS提供了一系列内部和外部...

Global site tag (gtag.js) - Google Analytics