Assembly 分段表示法

Assembly 分段表示法,assembly,x86,masm,intel-syntax,Assembly,X86,Masm,Intel Syntax,我试图理解一些为MS DOS编写的程序。指令mov ax,ds:4Ch是移动ds*16+4Ch的值还是移动存储在地址ds*16+4Ch处的值 它是内存操作数,因为它使用ds:。MASM风格的英特尔语法不需要在内存操作数周围使用[] 此外,没有一条机器指令可以计算整数寄存器中的线性地址。分段的整个要点是处理对于单个寄存器来说太大的线性地址。如果您处于实模式(其中段寄存器值是基,如mov ax,ds/shl ax,4),您可以手动执行此操作,但如果段寄存器值只是一个选择器,则不那么容易。286/38

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

它是内存操作数,因为它使用
ds:
。MASM风格的英特尔语法不需要在内存操作数周围使用
[]

此外,没有一条机器指令可以计算整数寄存器中的线性地址。分段的整个要点是处理对于单个寄存器来说太大的线性地址。如果您处于实模式(其中段寄存器值是基,如
mov ax,ds
/
shl ax,4
),您可以手动执行此操作,但如果段寄存器值只是一个选择器,则不那么容易。286/386保护模式或非真实模式


leaax[es:bx+si+12]
例如,仅处理偏移计算,忽略段基。

后者。事实上,没有直接的方法加载值
ds*16+4Ch