将用户输入从C传递给Assembler

时间:2017-03-18 15:42:57

标签: c linux assembly arm

我是ARM Assembler的新手。使用qemu模拟器。

solution对我不起作用。

我有这个C文件 md1_main.c

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

    int main (void)
    {
            int n;
            scanf("%d", &n);
            printf("Result = %u\n", asum(n));
            return 0;
    }

和.h文件包含函数原型unsigned int asum(unsigned int n);

我真的很困惑,如何将n传递给汇编代码。

汇编代码 md1.s

.text
.align  2
.global asum
.type   asum, %function

asum:
    mov r1, #0
    mov r2, #1

loop:
    cmp r2, #3 ; instead of 3 there should be my input
    bgt end
    add r1, r1, r2
    add r2, r2, #1
    b loop

end:
    mov r0, r1
    bx lr

无法得到它。

1 个答案:

答案 0 :(得分:4)

OP已经将架构称为ARM 64.所以我将根据调用约定来回答。

前4个参数在r0,r1,r2,r3中传递。

这就是编译器在编译C文件时也会为您做的事情。因此,您可以在r0寄存器中获得参数n,并且可以直接使用它。

我还看到你的函数返回一个无符号值。这将在r0寄存器中返回。

有关调用约定的更详细说明,请参阅this