int flag;
int cmp_1,cmp_2;
.........
code
.........
/*
当cmp_1>cmp_2时,保存数据
*/
flag = memcmp(cmp_1,cmp_2,1);
if(flag)
{
//code save data;
}
在调试的时候,发现只要cmp_1!=cmp_2,都能跳转到//code save data; 里面,跟原先的流程有很大的出入,在查看汇编的时候发现
if(flag) 翻译成汇编为 CBZ指令
CBZ 在arm指令的意思是只要不是0,都执行if括号里面的code。
因此在使用if语句判断的时候,千万注意此情况的出现。if(cmp_1>cmp_2)
memcmp 是从首地址开始比较的,如果高为放在高地址,则比较有问题!!!!
本文探讨了在C语言中使用memcmp进行数据比较时遇到的一个常见误区:即当比较两个不同内存区域的内容时,如何正确地使用if条件判断。特别关注了在ARM汇编环境下,memcmp函数的行为以及if(flag)条件语句的实现细节。
392

被折叠的 条评论
为什么被折叠?



