2016-05-06 17 views
-1

Ich versuche, dieses Programm herauszufinden. Ich will nur wissen, ob ich mit dem Programm auf dem Laufenden bin. Wie korrigiere ich dieses Programm? Jede Hilfe wird geschätzt. Vielen Dank.x86 Irvine32: Assemblersprache - Holen Sie sich das letzte Array

„schreiben Assemblersprache Programm, das eine Reihe von Wörtern hat. Das Programm lädt das letzte Element des Arrays in eine entsprechend dimensionierte Register und druckt es. (Setzen Sie den Index des letzten Elements nicht hart codieren.)“

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

Wenn Sie „richtigen“ sagen, was zu tun was meinen Sie? Der hartkodierende Kommentar? –

Antwort

0

Wenn Sie nicht val2 = ($-val1)/2 verwenden können, wäre eine Option sein, einige abschließende Zeichen für das Array zu wählen, beispielsweise '$' und Schleife, bis es gefunden:

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

Bitte duplizieren Sie keinen Teil Ihrer Antwort auf eine doppelte Frage. Es ist viel besser, die Frage als ein Duplikat zu markieren. (Was wir jetzt tun können, da ich Ihre größere Antwort auf die andere Frage aufwerfe). –

+0

@PeterCordes, verstanden, Kumpel! Eigentlich waren beide Antworten anders, später habe ich diese am Ende eingefügt. Wie auch immer, das OP scheint es nicht zu mögen. –

+1

Ah ich sehe. Ich sehe nur eine enge Abstimmung über die Frage. Sie können dies als Duplikat abstimmen, auch wenn Sie es beantwortet haben. –