1
我试图用我的程序集代码中的char字符比较Char字符。比较字符(ARM程序集)
这是C代码我用来启动汇编代码:
char a[] = "abc";
char b = 'a';
int size = 3;
int d = _asm_main(a);
printf("Char a: %s\n",a);
printf("Erg:%d\n",d);
,这是汇编代码:
_asm_main:
push {r6,r7,r8,lr}
mov r8,r0
ldr r7,[r8,#2]
mov r6,r7
b compare
compare:
cmp r6,#'c'
beq true
b false
true:
mov r0,#1
b end
false:
mov r0,#2
b end
end:
pop {r6,r7,r8,pc}
BX lr
它为“C”,但如果我试试吧'a'或'b'我总是进入错误的标签。我不明白它为什么对三者中的一个起作用,而对另外两个起作用。
您正在加载4个字节,而不是1'C'恰好是字符串的结束,想必后面3零个字节的机会,所以你的作品比较。你应该使用'ldrb'。 PS:学习使用调试器。另外,从弹出'pc'后,你的'bx lr'永远不会到达。 – Jester