2016-12-02 112 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節。