我有以下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. 所以我的猜测是DSis 3003。所以地址将被计算为(DS << 4) + SI, 或30030 + 3333。在“tj”之后,他们只是将其加起来以给出最终地址33363。
我的 X86 知识有些生疏,但如果我没记错的话,30030 部分很可能来自数据段寄存器 (DS),在这种情况下为 3003。在这种情况下,最终地址计算为段 * 16 + 索引寄存器 DS 和 SI。
如果我没记错的话,那是很久以前的事了,8086 寻址由两部分组成——一个 16 位地址和另一个 16 位地址偏移 4 位以给出页面地址。这两个部分组合在一起,为物理内存提供了一个 20 位的地址。8086早已死去,但它的指令集仍然存在以保持兼容性。