总的来说,我正在尝试比较从c ++程序传递到我的汇编函数中的数组的第一个元素的值和一个恒定值,并在它们相等时执行跳转。
我可以使用%rdi
在gdb中查看x /c $rdi
的值,并输出0x7fffffffde80: 97 'a'
我希望cmp $97, %rdi
然后在相等的情况下执行跳转,但可惜比较失败,就好像这两个值不相等。
我已经构建了一个小型测试程序,以演示我正在尝试做的事情。如果要传入的数组的第一个元素不是“ a”,则程序应陷入无限循环,否则应正常退出。当运行时,无论数组中传递的值如何,我都会陷入无限循环。
任何对这里发生的事情的见识将不胜感激。
在我的驱动程序cpp中:
#include <iostream>
#include <stdio.h>
extern int _asmTest(char c[]) __asm__("_asmTest");
int main()
{
char arr[2] = {'a','b'};
int test = _asmTest(arr);
std::cout << "First element was 'a'" << std::endl;
return 0;
}
在我的asm中:
.global _asmTest
.text
_asmTest:
push %rbp
mov %rsp, %rbp
# Go to infinite loop if arg1's first element is not 'a'
loop:
cmp $97, %rdi
je continue
jmp loop
continue:
mov %rbp, %rsp
pop %rbp
ret