汇编语言程序,根据用户的输入显示金字塔中字母表中的字母

时间:2013-01-25 21:54:10

标签: assembly x86 dos

我正在编写一个程序集程序,根据用户的输入显示金字塔中的字母。例如,如果用户输入字母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

1 个答案:

答案 0 :(得分:1)

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

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

你只需要两次增量和跳跃。