细分符号

时间:2019-01-23 20:58:05

标签: assembly x86 masm intel-syntax

我试图了解为MS DOS编写的某些程序。指令mov ax,ds:4Ch会移动ds * 16 + 4Ch的值,还是会移动存储在地址ds * 16 + 4Ch的值?

1 个答案:

答案 0 :(得分:1)

这是一个内存操作数,因为它使用ds:。 MASM样式的Intel语法不需要在内存操作数周围使用[]

此外,没有一条机器指令可以计算整数寄存器中的线性地址。分段的全部目的是处理对于单个寄存器而言太大的线性地址。如果您要在实模式下使用(如果段寄存器值是基数,例如mov ax, ds / shl ax, 4,则可以手动执行此操作,但是如果段寄存器值只是选择器。 286/386保护模式或虚幻模式。

lea ax, [es: bx + si + 12](例如,仅 )处理偏移量计算,而忽略了段基。