2016-05-06 1 views
-1

J'essaie de comprendre ce programme. Je veux juste savoir si je suis sur le point avec le programme. Comment est-ce que je corrige ce programme? Toute aide est appréciée. Je vous remercie.x86 Irvine32: Language d'assemblage - Obtenir le dernier tableau

« Ecrire un programme en langage assembleur qui a un tableau de mots. Le programme charge le dernier élément du tableau dans un (Ne pas coder en dur l'indice du dernier élément.) Registre de taille appropriée et imprime. »

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

Quand vous dites « correct », qu'est-ce que vous voulez dire? Le commentaire en dur? –

Répondre

0

Si vous ne pouvez pas utiliser val2 = ($-val1)/2, une option serait de choisir un caractère de fin pour le tableau, par exemple, '$' et boucle jusqu'à ce qu'il trouve:

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

Veuillez ne pas dupliquer une partie de votre réponse sur une question en double. Il est préférable de marquer la question comme un doublon. (Ce que nous pouvons maintenant faire, puisque je suis upvoting votre plus grande réponse sur l'autre question). –

+0

@PeterCordes, compris, mon pote! En fait, les deux réponses étaient différentes, plus tard, j'ai collé celui-ci à la fin de l'autre. De toute façon, l'OP ne semble pas aimer ça. –

+1

Ah je vois. Je vois seulement un vote serré sur la question. Vous pouvez voter pour le fermer en tant que doublon, même si vous y avez répondu. –