x86 - CS:IP对应的物理地址在8086中超过20位会怎样?
问题描述
在 8086 微处理器中,假设 CS 为 FFFFH,IP 为 FAB0H,那么物理内存地址将通过将 CS 乘以 16 并加上 IP 来计算。ie Add = FFFF0 + FAB0 这个总和给出了溢出,因为总和不能存储在 20 位中。会发生什么?
解决方案
对于 8086,结果将被截断以适合 20 位;导致它环绕。例如0xFFFF0 + 0xFAB0 = 0x10FAA0 = 0xFAA0
. 然后,指向 1 MiB 以上的分段地址实际上会在前 64 KiB - 16 字节中访问内存。
较新的 80x86 CPU(从 80286 开始)支持更宽的物理地址并且不会截断;但是为了保持向后兼容性,旧行为是通过使用可编程的“A20 门”(最初位于 CPU 外部)来模拟的,以在“A20 门”被禁用时屏蔽第 21 个地址位(A20)。因此,对于启用了“A20 门”的较新 CPU,您可以在实模式下多访问近 64 KiB 的物理地址空间(0xFFFF:0xFFFF = 0x10FFEF
比原来的 1 MiB 多 65520 字节)。这称为高内存区。
推荐阅读
- c++ - 在 C++ 中通过构造函数复制类
- css - 如何删除项目中未使用的未使用的 CSS 错误?
- ruby-on-rails - Ruby on Rails 中的连接池
- javascript - Mongoose:usr.findOneAndUpdate 不是一个函数
- javascript - Axios 在 post 请求中发送数组
- r - 如何将列从英尺和英寸 (X'X) 转换为米?
- php - PHPExcel在存储Excel文件后释放内存
- php - 无法重定向到 php 中新创建的页面
- python - 如何将单词转换为浮点值
- javascript - Sails.js 控制器从 Promise 中获取数据