在C程序中调用汇编语言函数

问题描述

此作业要求我编写一个名为diff.s的文件,该文件包含一个参数,使用相同的参数调用function2,然后返回function2返回的值,减去传入的值 论据。例如,如果diff被称为5,则应返回20 = 5 * 5-5

每次遇到分段错误时,我都需要有关如何编写汇编语言的帮助。

//gcc -g callC-AL-C.c diff.s -o callC-AL-C

#include <stdio.h>
#include <stdlib.h>

int diff(int);

int function1(int number) {
    int returnValue = diff(number) + 7;
    return returnValue;
}

int function2(int number) {
    return number*number;
}

int main(int argc,char **argv) {

    int argument1 = atoi(argv[1]);
    printf("%d\n",function1(argument1));

    return 0;
}

汇编语言diff.s只有5行:

    .global diff
diff:
    pushq   %rdi
    movl    %rax,%rbp
    subl    %rax,%eax
    call    function2
    ret

寄存器表,我们必须使用右侧列

Callee must restore           Callee may change
%rbp                          %rax
%rsp                          %rcx 
%rbx                          %rdx
                              %rsi
                              %rdi
%r12-%r15                     %r8-%r11

解决方法

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

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

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...