我试图了解为MS DOS编写的某些程序。指令mov ax,ds:4Ch会移动ds * 16 + 4Ch的值,还是会移动存储在地址ds * 16 + 4Ch的值?
答案 0 :(得分:1)
这是一个内存操作数,因为它使用ds:
。 MASM样式的Intel语法不需要在内存操作数周围使用[]
。
此外,没有一条机器指令可以计算整数寄存器中的线性地址。分段的全部目的是处理对于单个寄存器而言太大的线性地址。如果您要在实模式下使用(如果段寄存器值是基数,例如mov ax, ds
/ shl ax, 4
,则可以手动执行此操作,但是如果段寄存器值只是选择器。 286/386保护模式或虚幻模式。
lea ax, [es: bx + si + 12]
(例如,仅 )处理偏移量计算,而忽略了段基。