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'と一緒に私はいつも虚偽のlableに入ります。なぜ私は3つのうちの1つでは動作し、他の2つでは動作しません。
あなたは1ではなく 'C'の4つのバイトをロードしているだけで、文字列の末尾にあることを起こると、おそらく偶然3ゼロのバイトので、あなたの比較作品が続きます。 'ldrb'を使うべきです。 PS:デバッガの使い方を学んでください。また、あなたの 'bx lr'は、' pop'を 'pc'に入れたので決して到達しません。 – Jester