Assembly 汇编语言程序,基于用户';以字母表的形式显示金字塔中的字母;s输入

Assembly 汇编语言程序,基于用户';以字母表的形式显示金字塔中的字母;s输入,assembly,x86,dos,Assembly,X86,Dos,我正在编写一个汇编程序,根据用户的输入以字母表的形式显示金字塔中的字母。例如,如果用户输入字母a,则输出为: A. ab abc . . . abcdef…z 如果用户输入字母b,这将是输出: b 卑诗省 卡介苗 bcde . . . bcdefg…z 等等 下面是我的代码,我在迭代、循环、嵌套循环等方面确实遇到了问题。我一直在尝试,但没有成功。我不熟悉汇编语言,所以我的代码真的很烂 title print_alphabets ststack segment para stack 'stack

我正在编写一个汇编程序,根据用户的输入以字母表的形式显示金字塔中的字母。例如,如果用户输入字母a,则输出为: A. ab abc . . . abcdef…z

如果用户输入字母b,这将是输出:

b 卑诗省 卡介苗 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

编写汇编程序最简单的方法是编写一些伪代码(或其他语言),然后将其翻译成汇编程序

c = input value
for i = c to 'a' + 26
  for k = c to i
    output k
  next k
  output space
next i

您只需要两次递增和跳跃。

感谢您抽出时间回答我的问题。我想我能弄明白。我想分享我的代码,但找不到。这是很久以前的事了,那时我还在攻读学士学位干杯