我正在尝试在 ARM 程序中计算包含字符串的元音,然后将十六进制计数的元音数量打印到控制台。我可以在寄存器 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 也很陌生(这是我的第一个程序)。
提前感谢您提供的任何帮助!