分段符号

Segmentation notation

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

它是一个内存操作数,因为它使用了ds:。 MASM 风格的 Intel 语法不需要 [] 围绕内存操作数。

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

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