我正在编写一个程序集程序,根据用户的输入显示金字塔中的字母。例如,如果用户输入字母a,则输出为: 一个 AB ABC 。 。 。 ABCDEF ... Z
如果用户输入字母b,这将是输出:
b 公元前 BCD BCDE 。 。 。 bcdefg ... Z
依旧......
下面是我的代码,我真的遇到迭代,循环,嵌套循环等问题。我一直在尝试但无济于事。我是汇编语言的新手,所以我的代码真的很糟糕。
title print_alphabets
ststack segment para stack 'stack'
dw 200h
ststack ends
cdata segment para 'data'
inputMessage db 'Enter a letter to start from: $'
invalidInput db 10, 13, 'You have entered an invalid character. Please run the program again.$'
newline db 10, 13, '$'
cdata ends
ccode segment para 'code'
assume cs: ccode, ss: ststack, ds: cdata
main:
mov ax, cdata
mov ds, ax
mov ah, 09h
lea dx, inputMessage
int 21h
mov ah, 01h
int 21h
mov bl, al
mov ch, 26
mov cl, 26
testinput:
cmp bl, 7ah
jbe loop1
jmp invalid
loop1:
mov ah, 09h
lea dx, newline
int 21h
mov ah, 02h
mov dl, bl
int 21h
dec ch
cmp ch, 25
je loop1
cmp ch, 24
jle loop2
jmp endprog
loop2:
inc dl
mov ah, 02h
mov dl, dl
int 21h
dec cl
cmp cl, 25
je loop1
;repeat loop2 once
cmp cl, 24
je loop2
cmp cl, 23
je loop1
;repeat loop2 twice
cmp cl, 22
je loop2
cmp cl, 21
je loop2
cmp cl, 20
je loop1
;repeat loop2 thrice
cmp cl, 19
je loop2
cmp cl, 18
je loop2
cmp cl, 17
je loop2
cmp cl, 16
je loop1
;repeat loop2 4 times
cmp cl, 15
je loop2
cmp cl, 14
je loop2
cmp cl, 13
je loop2
cmp cl, 12
je loop2
cmp cl, 11
je loop1
;repeat loop2 5 times
cmp cl, 10
je loop2
cmp cl, 9
je loop2
cmp cl, 8
je loop2
cmp cl, 7
je loop2
cmp cl, 6
je loop2
jmp endprog
invalid:
mov ah, 09h
lea dx, invalidInput
int 21h
jmp endprog
endprog:
mov ah, 4ch
int 21h
ccode ends
end main
答案 0 :(得分:1)
编写汇编程序的最简单方法是编写一些伪代码(或其他语言),然后将其转换为汇编程序。
c = input value
for i = c to 'a' + 26
for k = c to i
output k
next k
output space
next i
你只需要两次增量和跳跃。