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