0

ユーザーの入力に基づいてアルファベットの文字をピラミッド状に表示するアセンブリ プログラムを作成しています。たとえば、ユーザーが文字 a を入力した場合、出力は a ab abc になります。. . abcdef...z

ユーザーが文字 b を入力すると、次のように出力されます。

b bc 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
4

1 に答える 1

1

アセンブラをプログラミングする最も簡単な方法は、疑似コード (または他の言語) を書き、それをアセンブラに変換することです。

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

2 つのインクリメントとジャンプだけが必要です。

于 2013-01-25T22:36:16.517 に答える