0

我有以下MOV指示:

mov [SI], DX

SI = 3333h
DX = A3A3h
IP = 104h

一切都清楚了,A3A3h值保存在3333h地址下。

mov但是我发现这个特定指令的一些奇怪的解释:

[30030 + 3333]tj[33363] = A3A3

忽略奇怪的 tj 事情——这里的 30030 部分是什么,它是从哪里来的?

4

3 回答 3

2

我不确定“tj”是什么意思,但这里是对这一举动的解释:

MOV [SI],DX

这会将 的内容移动DX到地址位于(数据段)寄存器之外的内存SI位置DS。所以:

[30030 + 3333]tj[33363] = A3A3

我相信这是一个例子,但不幸的是,你没有显示任何段寄存器的设置,特别是DS. 所以我的猜测是DSis 3003。所以地址将被计算为(DS << 4) + SI, 或30030 + 3333。在“tj”之后,他们只是将其加起来以给出最终地址33363

于 2013-07-02T21:29:54.660 回答
1

我的 X86 知识有些生疏,但如果我没记错的话,30030 部分很可能来自数据段寄存器 (DS),在这种情况下为 3003。在这种情况下,最终地址计算为段 * 16 + 索引寄存器 DS 和 SI。

于 2013-07-02T21:28:59.943 回答
1

如果我没记错的话,那是很久以前的事了,8086 寻址由两部分组成——一个 16 位地址和另一个 16 位地址偏移 4 位以给出页面地址。这两个部分组合在一起,为物理内存提供了一个 20 位的地址。8086早已死去,但它的指令集仍然存在以保持兼容性。

于 2013-07-02T21:31:44.607 回答