修复了“ NASM错误:操作码和操作数的无效组合”,以在实模式下添加

时间:2019-09-06 17:36:27

标签: assembly x86 add real-mode

我想在实模式下将DS寄存器增加200h,但这样做时会出现“操作码无效组合”错误:

add ds,200h

我尝试过斧头,没有问题。我猜想是因为ds会自行注册,但我对此没有任何解释。

这不是我必须那样做,而是通过执行以下操作来修复它:

mov  ax,200h
mov  ds,ax 

但是我想知道确切的原因。感谢您的宝贵时间。

2 个答案:

答案 0 :(得分:4)

add操作不能在包括DS的段寄存器上使用。区别在于AX是通用寄存器,因此该寄存器可以使用一组不同的指令,包括add

答案 1 :(得分:3)

add ds,200h
     

我改为这样做来解决它:

mov  ax,200h
mov  ds,ax 

该替换代码将不会将DS段寄存器提高200h

正确的顺序是:

mov     ax, ds        ; Tranfer (copy) to a general purpose register
add     ax, 0200h     ; Do the arithmatic on that one
mov     ds, ax        ; Transfer the result back

直接处理诸如DS之类的段寄存器的唯一指令是:

push    ds
pop     ds
mov     ds, register/memory     e.g. mov ds, dx
mov     register/memory, ds     e.g. mov [bp+2], ds
lds     register, memory        e.g. lds si, [bx]