2016-12-02 108 views
0
VElist  dw 2,40;  
      dw 3,55;  
      dw 4,70;  
      dw 5,60;  
      dw 6,70;  
      dw 7,80;  
      dw 8,170;  
      dw 9,120; 
      dw 1,56; 

我想补充这一切的数字,此序列号对的第二个数字,例如:40,55,70 我输入无效使用寄存器

mov cx,des 
sub cx,beg 
mov ax,0 
mov di,Beg 
add ax,VElist[4*di-1] 

在我的程序允许我们输入介于1和0之间的变量“beg”和“des”。

但是汇编程序一直告诉我错误信息:在添加ax,VElist [4 * di-1]时无效使用寄存器。

我看不到我没有任何地方错了,我会感谢如果有人能帮助我解决这个问题:))

+2

使用16位地址时没有SIB字节,所以你不能做'di * 4'之类的事情。 – Michael

回答

1

地址模式VElist[4*di-1]无效。
任何16位寻址模式都没有比例。


这里可用的16位寻址模式的列表:

[BX + SI]
[BX + DI]
[BP + SI]
[BP + DI ]
[SI]
[DI]
disp16
[BX]
[BX + SI] + DISP8
[BX + DI] + DISP8
[BP + SI] + DISP8
[BP + DI] + DISP8
[SI] + DISP8
[DI] + DISP8
[BP ] + DISP8
[BX] + DISP8
[BX + SI] + disp16
[BX + DI] + disp16
[BP + SI] + disp16
[BP + DI] + disp16
[SI ] + disp16
[DI] + disp16
[BP] + disp16
[BX] + disp16

请参考进一步信息Intel manual 2 2.1节。