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も初めてです(これは私の最初のプログラムです)。
ご協力いただきありがとうございます。