1
Я пытаюсь сравнить символ из Char-Array с символом в моем ассемблере.Сравнение символов (сборка 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
Он работает для «с», но если я попробовать с «a» или «b» я всегда попадаю в ложную лабильность. Я не понимаю, почему это работает для одного из трех, а не для двух других.
Вы загружаете 4 байта вместо 1. 'c' просто бывает в конце строки и, предположительно, с последующими 3 нулевых байтов случайно поэтому ваши сравнения работ , Вы должны использовать 'ldrb'. PS: научитесь использовать отладчик. Кроме того, ваш 'bx lr' никогда не достигается, так как вы' pop' в 'pc'. – Jester