2016-03-26 2 views
0

Я новичок в сборку, также я использую DOSBoxСледующие и предыдущий символ в верхнем регистре

Я пытаюсь напечатать, в заглавный, по алфавиту, предшествующие и последующие буквы из строчной буквы, введенные пользователь. (например, если пользователь вводит c, он напечатает B и D)

Но мой код печатает странные образцы.

Мой код:

.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

Почему вы 'ADD DL, 48'? Это необходимо только для преобразования целого текста в текст, но вы ничего не делаете. – Jester

+0

что делать? – Halah

+1

Как насчет того, чтобы удалить их? Остальное - все в порядке. О, вам тоже нужен верхний регистр ... ну тогда измените 'add dl, 1' на' sub dl, 31' и 'sub dl, 1' на' sub dl, 33'. – Jester

ответ

0

вы можете сделать следующее вид:

.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 
Смежные вопросы