assembly - 没有保护模式的 CPU 中的保护

标签 assembly operating-system cpu-architecture

我正在学习模式位的使用,以及某些 CPU(例如 Intel 8086)仅在实模式下运行的事实。在许多来源中,我得知以下内容:

  • intel 8086没有保护模式
  • 它只能使用前 1 MiB 内存

我的问题是,为什么他们指定只有 1 MiB 内存是可寻址的?这是否意味着除了第一个 MiB 之外还有不可用(但可能可读?)的内存? 第一个 MiB 之外的内存是如何使用的?CPU 是否通过这种方式为操作系统等进程提供某种方式的保护?或者CPU是否真的提供零保护以防止意外覆盖?

最佳答案

8086/8088 没有超过 1M 的可寻址内存。这是因为它只有 20 条地址线,2^20 就是 1,048,576。因此地址范围在 0(十六进制 00000)和 1,048,575(十六进制 FFFFF)之间。正如您正确指出的,这与“保护模式”无关,因为 8086/8088 处理器上不存在“保护模式”。

较旧的处理器可用内存较少:8080 有 16 条地址线,总共 2^16,即 65,536 字节内存。

这类似于“如果只有三位(十进制)数字,则无法表达超过 999 的数字。”

关于assembly - 没有保护模式的 CPU 中的保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44929870/

相关文章:

assembly - 汇编语言的静态代码分析

linux - 将 500 字节缓冲区用于简单的大写转换器有什么好处吗?

assembly - 为什么 2 的补码符号扩展通过添加符号位的副本来工作?

algorithm - 哲学家同步算法

cpu-architecture - 访问内存时,是否会在缓存命中情况下设置页表访问/脏位?

assembly - CPU 上奇偶校验标志的用途是什么?

assembly - [邓特曼的书第 3 版]。 16 位 8086 怎么能寻址 16 倍于 8080 的内存?

python - 将 bash shell 替换为 python 程序的 cmdline 界面

.net - 如何永久删除文件,使其无法恢复?

performance - "Jump if zero"(jz) 更快吗?