Я пишу C программу с встроенной функцией сборки, которая сравнивает две строки, если они совпадают.
Когда я компилирую это с помощью 'arm-none- linux -gneabi-g cc 'и' arm- linux -gnueabi-g cc ', результаты разные. Разница, кажется, происходит от ключевого слова «нет», которое является местом для [продавца] согласно поиску Google.
Мои вопросы
- Является ли это причиной различия в результатах ?
- Если это так, что установлено как [vendor] в 'arm- linux -gnueabi-g cc'?
Мой код:
#include <stdio.h>
int * intoneplus(int * i);
char * charoneplus(char * c);
int my_strcmp(const char *src1, const char *src2);
int main(void)
{
const char *a = "Hello world!";
const char *a1 = "Hello world!";
const char *a2 = "hello aorld!";
if(my_strcmp(a, a1)==0)
printf("a and a1 are same sentence\n");
else
printf("a and a1 are different\n");
if(my_strcmp(a, a2)==0)
printf("a and a2 are same sentence\n");
else
printf("a and a2 are different\n");
return 0;
}
int my_strcmp(const char *src1, const char *src2)
{
int ch1, ch2, ret=0;
__asm__ (
"loop:\n\t"
"LDRB %[ch1], [%[src1]], #1 \n\t LDRB %[ch2], [%[src2]], #1\n\t"
"CMP %[ch1], %[ch2]\n\t"
"MOVNE %[ret], #1\n\t BNE done \n\t"
"CMP %[ch1], #0\n\t BNE loop\n\t"
"done:\n\t"
:[ret]"=r"(ret)
:[src1]"r"(src1),[src2]"r"(src2),[ch1]"r"(ch1),[ch2]"r"(ch2)
);
return ret;
}
Результаты компиляции и выполнения:
@ubuntu:~/test$ arm-linux-gnueabi-gcc -o practice2.out practice2.c -static
@ubuntu:~/test$ qemu-arm practice2.out
464281
a and a1 are different
1
a and a2 are different
@ubuntu:~/test$ arm-none-linux-gnueabi-gcc -o practice2.out practice2.c -static
@ubuntu:~/test$ qemu-arm practice2.out
0
a and a1 are same sentence
1
a and a2 are different