gpt4 book ai didi

assembly - 最初的 16 位 x86 中是否有 8 位内存寻址?

转载 作者:行者123 更新时间:2023-12-05 00:50:50 26 4
gpt4 key购买 nike

在实模式和 32 位保护模式下,16 位寻址用于通过 ModR/M 字节引用内存。此寻址仅在使用传统前缀的 i386 指令中受支持,而在 x86-64 指令中完全不受支持。

但是,ModR/M 字节也被 8 位特定操作码使用,这让我怀疑 原始 16 位 x86 指令集中是否存在 8 位寻址。尽管 8 位地址非常有限,但完全有可能以与 16 位指令相同的样式对这样的指令进行编码,但操作码不同。

例如,而不是

add (bx, si), ax

你应该有

add (bl, dh), al

很难找到任何 pre-i386 文档,所以我一无所知。曾经支持过吗?

最佳答案

仅通过 XLAT ,它有效地执行 mov al, [bx + al] (not 可编码为 mov)。

现代 16 位实模式使用与 8086 相同的机器代码格式,这就是向后兼容的含义。 (只有非常小的差异,比如现在指令长度限制为 15 个字节,而 8086 会很高兴地获取无限数量的前缀,即使这意味着在一个 64k 段内环绕 IP,其中充满 rep 前缀。)

NASM x86 16-bit addressing modes列出所有 ModRM 模式:它们仅包括 16 位寄存器。

add [bx + si], al 是可编码的(如 00 00),但 add [bl + dh], al 是不。

如果您想查看历史文档,可以使用 8086 手册的 PDF 格式。此外,8086 的 ISA 的主要架构师 Stephen Morse 写了一本书“8086/8088 入门”,现在可以在他的网站上免费获得:https://stevemorse.org/8086/ .

8086 的早期祖先,例如只有 8 位寄存器的 8080,are not x86 CPUs .


相关:

关于assembly - 最初的 16 位 x86 中是否有 8 位内存寻址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74111814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com