汇编语言中的register1:register2是什么意思?

问题描述 投票:0回答:1

汇编语言中的register1:register2是什么意思? 例如

ax:bx
,则该指令将使用哪种类型的地址。
显然这种情况涉及两个寄存器 AX 和 BX,它们如何影响指令的结果?

我尝试调试,但没有结果。

assembly syntax x86 cpu-registers
1个回答
2
投票

汇编语言中的register1:register2是什么意思?例如

ax:bx
,则该指令将使用哪种类型的地址。

register1:register2(例如

ax:bx
)从未在任何指令中使用。它从来不是一个有效的指令组件,而是一种传达含义的方式:大于一个寄存器可以携带的值的概念。

例如

ax:bx
,则该指令将使用哪种类型的地址。显然,这种情况涉及两个寄存器 AX 和 BX,它们如何影响指令的结果。

请注意,不需要停在2个寄存器。
它始终是值的组合,并且最左侧的组件始终被认为是最重要的组件。
只是如何将各个值组合起来有所不同。

使用通用寄存器

您的示例

ax:bx
通常表示 32 位值,其重构规则为
(ax * 65536) + bx

另一个例子是
cl:bx:dx:ax
,它通常表示遵守规则
(cl << 48) + (bx << 32) + (dx << 16) + ax
的 56 位值。

使用特殊寄存器

如果其中一个寄存器是像

es:bx
那样的段寄存器,则重构规则是不同的。它变成了
(es << 4) + bx
,至少在CPU的实地址模式下是这样。在保护模式下操作,组合
cs:eip
可以通过将 EIP 寄存器中的值添加到段描述符中找到的某个基地址来重新构成。

更特别

没有什么可以阻止您想出自己的格式。因此,您可以发明一个 16 位整数值与 [0,99] 范围内的小数部分的组合,只需定义像

AX:BL
这样的组合,这只是一个例子。

© www.soinside.com 2019 - 2024. All rights reserved.