2016-03-26 1 views
0

Je suis nouveau à l'assemblage, aussi j'utilise DOSBoxsuivant et caractère précédent en majuscules

Je suis en train d'imprimer, en majuscules, la lettre précédant et suivant l'ordre alphabétique d'une lettre minuscule entrée par la utilisateur. (par exemple si l'utilisateur entre c, il va imprimer B et D)

Mais mon code imprime des échantillons étranges.

Mon code:

.MODEL SMALL 
    .STACK 100H 
    .DATA 
    MSG1 DB "Enter a letter between a and z:$" 
    MSG2 DB "The previous letter is:$" 
    MSG3 DB "The next letter is:$" 
    X DB ? 
    .CODE 
    MAIN PROC 
    ; initialize DS 
    MOV AX, @DATA 
    MOV DS, AX 
    ; print MSG1 
    LEA DX, MSG1 
    MOV AH, 9h 
    INT 21H 
    ; read lowercase letter 
    MOV AH,1h 
    INT 21H 
    ; save the letter X 
    MOV X, AL 
    ; printing new line 
    MOV DL, 10 
    MOV AH, 02h 
    INT 21h 
    MOV DL, 13 
    MOV AH, 02h 
    INT 21h 
    ; print MSG2 
    MOV AH, 9h 
    LEA DX, MSG2 
    INT 21H 
    ; The previous letter 
    MOV DL, X 
    SUB DL, 1 
    ADD DL, 48 
    MOV AH, 2h 
    INT 21H 
    ; print MSG3 
    MOV AH, 9h 
    LEA DX, MSG3 
    INT 21H 
    ; The previous letter 
    MOV DL, X 
    ADD DL, 1 
    ADD DL, 48 
    MOV AH, 2h 
    INT 21H 
    ; DOS exit 
    MOV AH, 4CH 
    INT 21H 
    MAIN ENDP 
    END MAIN 
+0

Pourquoi vous 'ADD DL, 48'? C'est seulement nécessaire pour la conversion de texte en entier mais vous ne faites rien de tout cela. – Jester

+0

que dois-je faire alors? – Halah

+1

Que diriez-vous de supprimer ceux-ci? Le reste semble correct. Oh, vous avez aussi besoin de majuscules ... eh bien, changez 'dl, 1' en' sub dl, 31' et 'sub dl, 1' en' sub dl, 33'. – Jester

Répondre

0

vous pouvez faire le regard suivant:

.MODEL SMALL 
.STACK 100H 
.DATA 
MSG1 DB 0DH,0AH,'Enter a lowerCase letter between a and z :$' 
MSG2 DB 0DH,0AH,'Tht previous letter is :$' 
MSG3 DB 0DH,0AH,'The next letter is:$' 
.CODE 
MAIN PROC 
MOV AX,@DATA 
MOV DS,AX 
LEA DX,MSG1 
MOV AH,9 
INT 21H 
MOV AH,1 
INT 21H 
LEA DX,MSG2 
MOV AH,9 
INT 21H 
MOV AH,2 
SUB AL,20H 
SUB AL,1H 
MOV BL,AL 
MOV DL,BL 
INT 21H 
LEA DX,MSG3 
MOV AH,9 
INT 21H 
MOV AH,2 
ADD AL,2H 
MOV DL,AL 
INT 21H 
MOV AH,4CH 
INT 21H 
MAIN ENDP 
END MAIN