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
Почему вы 'ADD DL, 48'? Это необходимо только для преобразования целого текста в текст, но вы ничего не делаете. – Jester
что делать? – Halah
Как насчет того, чтобы удалить их? Остальное - все в порядке. О, вам тоже нужен верхний регистр ... ну тогда измените 'add dl, 1' на' sub dl, 31' и 'sub dl, 1' на' sub dl, 33'. – Jester