好吧,假设我有一个程序,它只接受字母,不管它的大小写(大写或小写),转换并显示它的相反大小写(例如,A 到 a,a 到 A)。然后程序通过升序和降序显示下一个字母,但仅在字母内。
例如,如果我输入 'l' 并选择升序,它将输出其对应的大写等效项以及它之后的下一个字母,直到 Z。
Input: l
Display
[a]ascending
[d]descending
Choice:a
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
同样,如果我输入 E 并选择降序,它将输出其对应的小写等效项以及它之前的下一个字母,直到 a。
Input:E
Display
[a]ascending
[d]descending
Choice:d
e
d
c
b
a
这是我到目前为止完成的一段代码,我已经设法将输入字母转换为其大写和小写等效项,并且还能够垂直显示它们。我唯一的问题是如何将输出仅限于字母表。
startOver:
call cls
mov ah,9
lea dx,string8 ;Display the string "Input:"
int 21h
mov ah,1 ;input starting letter
int 21h
mov bl,al
call nlcr ;nlcr is a procedure for new line and carriage return
mov ah,9
lea dx,string9 ;Display the string "Display"
int 21h
call nlcr
mov ah,9
lea dx,string10 ;Display the string "[a]ascending"
int 21h
call nlcr
mov ah,9
lea dx,string11 ;Display the string "[d]descending"
int 21h
call nlcr ;nlcr is a procedure for newline and carriage return
mov ah,9 ;Display the string "Choice:"
lea dx,string12
int 21h
mov ah,1 ;input display choice if it's ascending or descending
int 21h
mov cl,al
call nlcr
cmp cl,'a' ;validate the display choice
je ascending
cmp cl,'d'
je descending
checkd:
cmp cl,'d'
je descending
cmp cl,'d'
mov ah,9
lea dx,string14
int 21h
jne startOver
ascending: ;display in ascending order
xor bl,20h ;converts letter to uppercase or lowercase
mov ah,2
mov dl,bl
int 21h
mov cx,15 ;display the letters vertically, I put a default of 15 for I am not sure how to limit it to the alphabet only
asc:
mov bl,dl
call nlcr
mov dl,bl
inc dl
int 21h
loop asc
jmp exit
descending: ;display in descending order
xor bl,20h ;converts letter to uppercase or lowercase
mov ah,2
mov dl,bl
int 21h
mov cx,15
desc:
mov bl,dl
call nlcr
mov dl,bl
dec dl
int 21h
loop desc
jmp exit
exit:
;call cls
mov ah,4ch
int 21h
main endp
感谢您的回复!