2016-05-06 121 views
-1

我想弄清楚這個程序。只是想知道我是否與該計劃有關。我如何糾正這個程序?任何幫助表示讚賞。謝謝。x86 Irvine32:彙編語言 - 獲取最後一個數組

「寫有字的陣列的彙編語言程序。該程序加載陣列的最後一個元素置於適當大小的寄存器,並打印它。(不要硬編碼的最後一個元素的索引。)」

INCLUDE Irvine32.inc  
.data 
    val1 word 1,2,3,4,5,6 
    val2 = ($-val1)/2 ; This is hardcoding 
.code 
main PROC   
    mov ax, 0 
    mov ax, val1[val2] 

    Call WriteDec 
    Call DumpRegs 
exit 
main ENDP 
END main 
+0

當你說「正確的」,什麼做你意思是?硬編碼的評論? –

回答

0

如果您不能使用val2 = ($-val1)/2,一個選項是選擇了陣列一些終止字符,例如,'$'和循環,直到它的發現:

INCLUDE Irvine32.inc  
.data 
    val1 word 1,2,3,4,5,6,'$'    ;ARRAY WITH TERMINATING CHARACTER. 
    val2 = ($-val1)/2 ; This is hardcoding 
.code 
main PROC   
    ;mov ax, 0 
    ;mov ax, val1[val2] 

    mov si, offset val1 ;SI POINTS TO VAL1. 
    mov ax, '$'   ;TERMINATING CHARACTER. 
repeat: 
    cmp [ si ], ax 
    je dollar_found  ;IF [ SI ] == '$' 
    add si, 2    ;NEXT WORD IN ARRAY. 
    jmp repeat 

dollar_found: 
    sub si, 2    ;PREVIOUS WORD. 
    mov ax, [ si ]   ;FINAL WORD! 

    Call WriteDec 
    Call DumpRegs 
exit 
main ENDP 
END main 
+1

請不要在重複問題上覆制部分答案。將問題標記爲重複要好得多。 (我們現在可以這樣做,因爲我在其他問題上提出了更大的答案)。 –

+0

@PeterCordes,理解,好友!其實,兩個答案都不一樣,後來我把這個貼在另一個的末尾。無論如何,OP似乎並不喜歡它。 –

+1

啊我明白了。我只看到一個關於這個問題的近距離投票。即使您已經回答,也可以投票將其作爲重複項目進行投票。 –