2013-12-15 261 views
-1

我編寫了一個代碼來計算16位x86彙編語言中數組元素的平均值。它適用於32hC8h元素,但當我把190h錯誤發生在LEA si, array。爲什麼?x86彙編語言中的LEA錯誤

數組的前2個字節表示數組大小。

我使用emu8086。

data segment 

array db 32h, 00, 3, -10, 7, 14, 9, 3, -10, 7, 14, 9, 3, -10, 7, 14, 9, 3, -10, 7, 14, 9, 3, -10, 7, 14, 9, 3, -10, 7, 14, 9, 3, -10, 7, 14, 9, 3, -10, 7, 14, 9, 3, -10, 7, 14, 9, 3, -10, 7, 14, 9 


min db ? 
max db ? 
msg_average db 'The average = $' 
msg_min db 'The minimum element is: $' 
msg_max db 'The maximum element is: $'  
xxh dw ? 
xxl dw ? 

ends 

stack segment 
    dw 128 dup(0) 
ends 

code segment 

start: 

lea ax, data 
mov ds, ax 
mov es, ax 

;Getting array size 
lea si, array ;  HERE IS THE ERROR 
mov cx, [si] 
;Moving si to the location of the first element 
mov si, 0002h 
. 
. 
. 
. 
+0

你會得到什麼錯誤?當您嘗試使用0190h大小時,您可以顯示代碼嗎? – Devolus

回答

1

使用LEA指令,您只能加載變量的偏移量,而不是段!

對於段,你將不得不使用這樣的MOV指令:

mov ax, seg data 

不幸的是,「賽格」關鍵字的語法是不同的裝配8086不同,所以語法可能會在不同的彙編。

+0

如何?我沒有加載段偏移量!數組是一個變量。我說,代碼正確運行的元素數量很少, – ammarx

+0

好的。也許你的彙編器會把「數據」翻譯成「seg數據」 - 我的一個沒有。在190h元素的情況下,你如何精確寫出「array db ...」行? 「array db 90h,1,...」或「array db 190h,...」。第二個是錯誤的,當然。發生的錯誤究竟是什麼?不應該是「添加SI,2」而不是「mov SI,2」 - 您希望SI指向「數組」的第3個字節? –

+0

我稍後再回來。對不起,我得走了。 – ammarx