对于数组中的值,为什么比较的工作方式不同

问题描述

我正在使用内联C汇编,但我不明白为什么在这2种情况下cmp命令不能正常工作。

我有C函数:

int array_max(const int input_array[],const int array_size);

首先,我创建了数组并将其传递给函数

int input_array[] = {50,10,3,70,5};

printf("%d\n",array_max(input_array,5));

函数定义写在程序集中

__asm__
(
"array_max:;"
"   xor     %rdx,%rdx;"
"   movq    $70,%rax;"
"   movq    $50,%rbx;" 

"   cmp     %rbx,%rax;"
"   jge     gr_eq;"
"   movq    %rbx,%rax;"
    
"gr_eq:;"
"   ret"
);

在这种情况下,返回值为70

__asm__
(
"array_max:;"
"   xor     %rdx,%rax;"
"   movq    (%rdi,%rdx,4),%rbx;" // input_array[0] == 50

"   cmp     %rbx,%rax;"
    
"gr_eq:;"
"   ret"
);

但是这种情况下50 ...

Sameone可以帮助我如何比较传递的数组值和寄存器中的值吗?并向我解释为什么这种实现无效?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)