x86 - :offset addressing scheme work?段如何

标签 x86 x86-16 real-mode memory-segmentation

我读到,在 Intel 8086 CPU 时代,最大的寄存器是 16 位,每个人都在寻找一种访问超过 65536 字节线性内存的方法,但他们没有扩展 CPU 寄存器,而是发明了段:偏移寻址方案以及我的理解方式是,您可以将两个 16 位寄存器“分组”到一个 32 位内存地址中。但在同一地方我也读到 CPU 只能访问 1MB 内存。这是如何运作的? 2^32 等于 4,294,967,296 所以我不明白,请赐教:)

最佳答案

段寄存器值左移4(乘以16)并添加到地址地址的“偏移”部分。

16 * 65536 = 1 兆字节。

关于x86 - :offset addressing scheme work?段如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8694950/

相关文章:

assembly - 诊断 QEMU 中的引导加载程序代码?

c - 具有内联汇编和访问 c 变量的多线程

gcc - 当在内联汇编中编译 inb 和 outb 时产生 "Error: operand type mismatch"

c++ - 我们需要多少个内存屏障来实现 Peterson 锁?

c - 使用 xchg 自旋锁

assembly - 为什么 `cmpsb`似乎没有比较寄存器的值?

assembly - 使用 INT 21h (DOS) 和 8086 汇编读取数字

assembly - BIOS int 13中的 "invalid command (error code 0x01)"是什么意思

assembly - 如何使用 assembly(8086) 将 USB 驱动器的扇区加载到内存中?

io - UEFI中通过I/O空间和MMIO访问intel显卡寄存器