1

ARMプログラムで文字列に含まれる母音をカウントしようとしています。次に、カウントされた母音の数を16進数でコンソールに出力します。レジスタ r2 で正しくカウントされていることがわかります (この場合は 0x2) が、数値が r0 に転送されて正しく印刷されないことが原因です。誰かが私を正しい方向に向けることができますか? C の印刷コマンドは使用できません。SWI_WriteC だけを使用してコンソールに出力します。(注:オンラインで見つけることができるものはすべて、数字の印刷にCを使用しています)

SWI_WriteC  EQU &0      ;output character in r0   
SWI_Exit    EQU &11     ;finish program

            ENTRY

Start       ADR r1, text        
            MOV r2, #0          ;counter for number of vowels
            BL ParseChar        ;call to parse each character and test if vowel
            BL PrintNumber      ;call PrintNumber subroutine, prints number of vowels   
            ALIGN           
            SWI     SWI_Exit    ;finish


ParseChar   LDRB    r0,[r1], #1 ;load a character in r0
            CMP r0, #0          ;testing if null 
            BNE TestChar        ;if not null, TestChar subroutine
            MOV     pc, r14     ;if null, return

TestChar    TEQ     r0, #'a'    ;test if character is an a
            TEQNE   r0, #'e'    ;if not above, test if it is an e
            TEQNE   r0, #'i'    ;if not above, test if it is an i           
            TEQNE   r0, #'o'    ;if not above, test if it is an o
            TEQNE   r0, #'u'    ;if not above, test if it is a  u
            TEQNE   r0, #'A'    ;if not above, test if it is an A
            TEQNE   r0, #'E'    ;if not above, test if it is an E
            TEQNE   r0, #'I'    ;if not above, test if it is an I
            TEQNE   r0, #'O'    ;if not above, test if it is an O
            TEQNE   r0, #'U'    ;if not above, test if it is an U
            ADDEQ   r2, r2, #1  ;if vowel was found add 1 to R1
            B       ParseChar   ;returns to ParseChar           

PrintNumber LDRB    r0, [r2], #1  ;load number from r2  
            SWI     SWI_WriteC    ;print 
            MOV     pc, r14       ;return


text        DCB     "a1u",&0a,&0d,0     

            END 

注:これは私の最初の投稿ですので、フォーマットエラーをお許しください。私はARMも初めてです(これは私の最初のプログラムです)。

ご協力いただきありがとうございます。

4

1 に答える 1