将char与汇编中的常量进行比较

时间:2019-07-09 18:55:23

标签: c++ gcc assembly x86-64

总的来说,我正在尝试比较从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

0 个答案:

没有答案