X86 MOV指令-工作原理

X86 MOV指令-工作原理,x86,mov,X86,Mov,我有以下MOV说明: mov [SI], DX SI = 3333h DX = A3A3h IP = 104h [30030 + 3333]tj[33363] = A3A3 一切都很清楚,A3H值保存在3333h地址下 然而,我发现对这一特定的mov指令有一些奇怪的解释: mov [SI], DX SI = 3333h DX = A3A3h IP = 104h [30030 + 3333]tj[33363] = A3A3 忽略奇怪的tj部分-这里的30030部分是什么,它来自哪里?我

我有以下
MOV
说明:

mov [SI], DX

SI = 3333h
DX = A3A3h
IP = 104h
[30030 + 3333]tj[33363] = A3A3
一切都很清楚,A3H值保存在3333h地址下

然而,我发现对这一特定的
mov
指令有一些奇怪的解释:

mov [SI], DX

SI = 3333h
DX = A3A3h
IP = 104h
[30030 + 3333]tj[33363] = A3A3

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

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

我对X86的了解有些生疏,但如果我没记错的话,30030部分很可能来自数据段寄存器(DS),在本例中为3003。 在本例中,最终地址被计算为段*16+索引寄存器DS和SI。

我不确定“tj”是关于什么的,但下面是移动的解释:

MOV [SI],DX
这将
DX
的内容移动到
DS
(数据段)寄存器中地址位于
SI
的内存位置。因此:

[30030 + 3333]tj[33363] = A3A3
我相信您给出了一个示例,但不幸的是,您没有显示任何段寄存器的设置,特别是
DS
。所以我猜是
DS
3003
。因此,地址将被计算为
(DS我不确定“tj”是关于什么的,但这里有一个移动的解释:

MOV [SI],DX
这将
DX
的内容移动到
DS
(数据段)寄存器中地址位于
SI
的内存位置。因此:

[30030 + 3333]tj[33363] = A3A3

我相信您给出了一个示例,但不幸的是,您没有显示任何段寄存器的设置,特别是
DS
。因此我猜测
DS
3003
。因此地址将被计算为
(DS如果我没记错的话,很久以前,8086寻址由两部分组成——一个16位地址和另一个16位地址偏移4位,形成一个页面地址。这两部分结合起来,形成一个20位的物理内存地址。
8086
早就死了,但为了兼容,它的指令集仍然存在y、

如果我没记错的话,在很久以前,8086寻址由两部分组成——一个16位地址和另一个16位地址偏移4位,形成一个页面地址。这两部分结合在一起,形成一个20位的物理内存地址。
8086
早就死了,但为了兼容,它的指令集仍然存在注。

你必须问谁写了奇怪的解释。我想这可能是一些常见的惯例…谢谢。即使是一些常见的惯例,写奇怪解释的人也应该解释它。正如这里所写的,这句话是断章取义的。你必须问写奇怪解释的人。我想可能是这样的一些普通的约定…谢谢。即使是一些普通的约定,写奇怪解释的人也应该解释它。正如我在这里写的,这句话是断章取义的。这正是我的意思!但这里的地址似乎是绝对的…为什么我需要使用段寄存器呢?@user2489034 8086架构是一个segmented,正如Mike W所指出的20位地址体系结构。如果要实现16位8086应用程序,只需将
DS
设置为
0
,但必须将其设置为
mov[si],dx
给你相对寻址的意义是它间接脱离了
si
。然而,最终,一切都必须解析为一个绝对地址。这正是我的意思!但这里的地址似乎是绝对的……为什么我需要使用段寄存器呢?@user2489034 8086体系结构是一个分段的20位地址架构如Mike W所指出的。如果要实现16位8086应用程序,只需将
DS
设置为
0
,但必须进行设置。
mov[si],dx
为您提供了相对寻址,即它间接脱离了
si
。但是,最终,所有内容都必须解析为绝对地址。