MOV指令 - 它是如何工作的

时间:2013-07-02 21:25:20

标签: x86 mov

我有以下MOV指令:

mov [SI], DX

SI = 3333h
DX = A3A3h
IP = 104h

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

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

[30030 + 3333]tj[33363] = A3A3

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

3 个答案:

答案 0 :(得分:2)

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

MOV [SI],DX

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

[30030 + 3333]tj[33363] = A3A3

我相信是一个例子,但不幸的是,你没有显示任何段寄存器的设置,特别是DS。所以我的猜测是DS3003。因此,地址将计算为(DS << 4) + SI30030 + 3333。在“tj”之后,他们只是将其添加到最终地址33363

答案 1 :(得分:1)

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

答案 2 :(得分:1)

如果我没记错,很久以前它就是非常,8086寻址由两部分组成 - 一个16位地址和另一个16位地址偏移4位给出一个页面地址。将这两部分组合在一起,为物理存储器提供20位地址。 8086已经很久了,但是它的指令集依赖于兼容性。