首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在最初的16位x86中有8位内存寻址吗?

在最初的16位x86中有8位内存寻址吗?
EN

Stack Overflow用户
提问于 2022-10-18 13:26:42
回答 1查看 89关注 0票数 3

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

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

例如,而不是

代码语言:javascript
复制
add (bx, si), ax

你会有

代码语言:javascript
复制
add (bl, dh), al

很难找到任何前i 386文档,所以我处于黑暗之中。这支持过吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-18 14:50:03

只有通过XLAT,这样才能有效地执行mov al, [bx + al] (不能作为mov进行编码)。

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

x86 16位寻址模式列出了所有的ModRM模式:它们只包含16位寄存器。

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

如果您想检查历史文档,可以使用8086个手册的PDF。此外,斯蒂芬·莫尔斯( Stephen ),8086年ISA的主要设计师,写了一本书“8086/8088入门”,现在可以在他的网站上免费获得:https://stevemorse.org/8086/

早期的祖先8086,像8080,其中只有8位寄存器,x86 CPU.

相关信息:

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74111814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档