2016-10-05 2 views
-1

Je suis en train d'imprimer A-Zcomment utiliser 26 en langage assembleur

dans le code MOV CX,[34H] comment se fait le CX a équivalent de 26? quand je ce code, il m'a donné la sortie de A à Z

TITLE SAMPLE PROGRAM USING CMP AND JMP 
.MODEL SMALL 
.STACK 0100H 
.DATA 

.CODE 
START: 

     MOV AX,@DATA 
     MOV DS,AX 

     MOV AH,02H 

     MOV CX,[34H] 
     MOV DL,41H 

START_LOOP:   

     INT 21H 

     INC DL 
     DEC CX 

     JZ EXIT 

     LOOP START_LOOP 



EXIT: MOV AX,4C00H 
     INT 21H 


END START 
+1

Quelle est la valeur de cette instruction dans CX, lorsque vous vérifiez avec un débogueur? Et s'assemble-t-il à une charge de l'adresse 34H, ou à un mov-immédiat? Je pense que dans la syntaxe de style MASM, c'est toujours immédiat même avec le '[]'. –

+0

Pourquoi avez-vous une 'LOOP' directement après' DEC CX'/'JZ'? – Michael

+0

parce que 34h est 52 ... 52/2 = 26 ... avec MASM tout d'un coup tout a un sens ... Quelqu'un peut-il brûler tous les binaires MASM de la Terre, avant qu'il ne pondre des œufs? ('dec cx' +' loop' décrémentera cx de deux pour chaque itération de boucle, donc la boucle ne se répètera que 26 fois avant que 'loop' ne saute parce que cx est nul.) – Ped7g

Répondre

0

Voici votre code fixe:

.MODEL SMALL 
.STACK 0100H 
.DATA 

.CODE START: 

    MOV AX,@DATA 
    MOV DS,AX 

    MOV AH,02H 

    MOV CX,26 
    MOV DL,41H 

START_LOOP: 

    INT 21H 
    PUSH DX   ◄■■■ PRESERVE CURRENT LETTER. 
    MOV DL,20h  ◄■■■ DL, NOT DH 
    INT 21H 
    POP DX   ◄■■■ RESTORE CURRENT LETTER. 
    INC DL 

    LOOP START_LOOP 

EXIT: 
    MOV AX,4C00H 
    INT 21H 

Edit: AaBbCc ...

.MODEL SMALL 
.STACK 0100H 
.DATA  

upper db 'A'   ◄■■■ VARIABLES TO CONTROL 
lower db 'a'   ◄■■■ UPPER AND LOWERCASE LETTER. 

.CODE START: 

    MOV AX,@DATA 
    MOV DS,AX 

    MOV AH,02H 

    MOV CX,26 

START_LOOP: 

    MOV DL,upper 
    INT 21H    ◄■■■ DISPLAY UPPERCASE LETTER. 
    MOV DL,lower 
    INT 21H    ◄■■■ DISPLAY LOWERCASE LETTER.  

    INC upper    ◄■■■ NEXT UPPERCASE LETTER. 
    INC lower    ◄■■■ NEXT LOWERCASE LETTER. 

    LOOP START_LOOP 

EXIT: 
    MOV AX,4C00H 
    INT 21H 
+0

merci Correcte, que diriez-vous AaBb, comment puis-je augmenter aussi la lettre 61h pour un? – rkz

+0

comment? Je n'ai aucune idée. – rkz

+0

@Krizzia, mis à jour ma réponse pour montrer comment. –

1

[34H ] est l'adresse, pointeur. Vous prenez la valeur par adresse 34h. Quelque part, il y en a 26.

+1

Piège MASM .. il sera assemblé comme 'mov cx, 34h' même avec' [] '. – Ped7g

+0

La déclaration controversée. Ce n'est pas au moins MASM. – Smithson

+0

D'autres commentaires de OP, il devient évident qu'il utilise MASM (ou TASM en mode quirk), de sorte qu'il est vraiment assemblé comme 'mov cx, 52' pour lui. Mais sinon vous auriez tout à fait raison, et il a été recommandé à OP de "réparer" cette ligne de toute façon, pour avoir moins de source confuse. (Ça me fait mal aux yeux aussi, je veux dire, je peux comprendre en quelque sorte ce qu'ils ont fait 'mov cx, var', même si je ne suis pas d'accord avec eux.) Mais ignorant de []' ... à quoi pensaient-ils? c'est Microsoft.) – Ped7g