实模式8086 与 保护模式80286

学习自 狄泰软件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1MB=1024KB

2(20) = 1 048 576 => 1M
2(16) = 65536 => 60K
2(32) = 4,294,967,296 => 4,294M => 4G

在这里插入图片描述

在这里插入图片描述
如 将一段内存定义为 只存放 指令,不放数据,于是这一段只放指令的内存 就叫做代码段。
而 这些指令所需要的数据 放到另一块内存,这段内存就叫数据段。
所以 代码段 数据段等概念 是诞生于8086处理器时代 !!! 当今处理器的鼻祖。

在这里插入图片描述
mov ax, [0x1234]
8086处理器会给一个默认的段地址,这个默认的段地址 放在ds寄存器中。虽然这么写,但是真正做的操作是
(ds << 4) + 0x1234。 所以这里的 0x1234 实际上是段内偏移地址,最终的地址是与段地址左移四位后相加得到的。

mov ax, [es:0x1234]
这里明确指定 段地址存放在 es寄存器中。

在这里插入图片描述
在这里插入图片描述
0xFFFF : 0xFFFF
段地址左移四位成为段基地址 + 偏移地址 —>

0xFFFF0 + 0xFFFF 
0xFFFF0 + (0xFFF0 + 0xF)  稍作变换
(0xFFFF0 + 0xF) + 0xFFF0 

8086地址线宽度是20,最多可以访问 1M 的内存空间。 而 (0xFFFF0 + 0xF) 正好2(20) =>1M ,已经就是8086处理器可以访问到的最大地址值了。此时多出来的 0xFFF0 是 8086中的 无效地址范围,又叫 高端内存区(HMA)。

如果计算得到的地址处于高端内存区,那么8086处理器 不处理。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
本质:安全性问题,没有考虑安全性,它没有考虑内存的保护,所有的内存 想读救读 想写就写。

在这里插入图片描述
如只读数据段的概念 就诞生于 80286处理器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1 一个段描述符 占用8个字节
2 段界限:段内偏移地址的最大值,用于检测段内偏移是否溢出 防止回卷
3 为什么分三部分 存储 段基址? 历史原因造成的,暂不说明。需要说明的是,在基于80286处理器 写程序的时候,这三部分段基址 的拼接是由硬件完成的,不需要我们自己去拼接。

在这里插入图片描述
描述表:理解为 段的描述符 组成的一个数组,而一个段描述符占8个字节,所以考虑到描述表的大小,是不能放到寄存器中的,只能放在内存中。那么需要访问描述表的时候,怎么知道它在哪里呢?这个80286已经帮我们想好了,80286 中可以使用一个特殊的寄存器来装载 段描述符表在内存中的地址。图中每一个段描述符 代表一段内存空间。

在这里插入图片描述
本质就是 索引,段描述符在 描述符表中的下标位置(数组下标)
RPL 是特权级标识,用于做 安全性检查 ,如我们的程序需要访问一段内存,那能不能访问,就是通过特权级进行判断。
TI 用于标识当前的选择子 是要到哪一个 描述符表里面 去访问段描述符。0,1 两个状态,所以只能在两个描述附表中做选择。

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/LinuxArmbiggod/article/details/120694114