我有以下MOV
指令:
mov [SI], DX
SI = 3333h
DX = A3A3h
IP = 104h
一切都很清楚,A3A3h值保存在3333h地址下。
但是我发现了这个特定mov
指令的一些奇怪的解释:
[30030 + 3333]tj[33363] = A3A3
忽略奇怪的事情 - 这里的30030部分是什么,它来自哪里?
答案 0 :(得分:2)
我不确定“tj”是什么,但这里是对此举的解释:
MOV [SI],DX
这将DX
的内容移动到地址位于SI
(数据段)寄存器DS
的内存位置。所以:
[30030 + 3333]tj[33363] = A3A3
我相信是一个例子,但不幸的是,你没有显示任何段寄存器的设置,特别是DS
。所以我的猜测是DS
是3003
。因此,地址将计算为(DS << 4) + SI
或30030 + 3333
。在“tj”之后,他们只是将其添加到最终地址33363
。
答案 1 :(得分:1)
我的X86知识有点生疏,但如果我没记错的话,30030部分最有可能来自数据段寄存器(DS),在这种情况下为3003。 在这种情况下,最终地址被计算为Segment * 16 + index寄存器DS和SI。
答案 2 :(得分:1)
如果我没记错,很久以前它就是非常,8086寻址由两部分组成 - 一个16位地址和另一个16位地址偏移4位给出一个页面地址。将这两部分组合在一起,为物理存储器提供20位地址。 8086
已经很久了,但是它的指令集依赖于兼容性。