我想在实模式下将DS寄存器增加200h,但这样做时会出现“操作码无效组合”错误:
add ds,200h
我尝试过斧头,没有问题。我猜想是因为ds会自行注册,但我对此没有任何解释。
这不是我必须那样做,而是通过执行以下操作来修复它:
mov ax,200h
mov ds,ax
但是我想知道确切的原因。感谢您的宝贵时间。
答案 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]