ARM 程序集,查找字符是大写、小写还是特殊字符



我有这段代码,我很有信心它会起作用。但它每次都打印较低的输出。我的逻辑是将 r1(字符所在的位置(与"a"进行比较,因为它的 ascii 值高于"A"。如果它大于或等于"a",我们知道它必须是小写字母。如果它小于,我们将其与"A"进行比较,然后如果它大于或等于该值,则它必须是大写的。如果它小于"A",那么我们知道它一定是一个特殊字符。但这行不通,为什么?

printchar:
cmp r1, #'a'
blt T1
ldr r0, =loweroutput
bl printf
b exit
T1: cmp r1, #'A'
blt T2
ldr r0, =upperoutput
bl printf
b exit
T2: ldr r0, =specialoutput
bl printf
exit:

你的代码看起来很理智。

如评论中所述,您最好的朋友是调试器。 单步执行代码,观察r1的值,并观察blt指令的行为。 我最好的猜测是r1的值在输入时不正确。