【问题标题】:Pass user input from C to Assembler将用户输入从 C 传递到汇编程序
【发布时间】:2017-03-18 15:42:57
【问题描述】:

我是 ARM 汇编程序的新手。使用 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

就是拿不到。

【问题讨论】:

  • 你编译这个 C 代码的目标是什么?平台 - Linux、Windows 还是其他平台?
  • @AjayBrahmakshatriya,Linux。
  • @Benny,那个解决方案(?)对我不起作用。
  • 好的,所以我们必须遵循 Linux 调用约定。现在的目标?那是什么大会? X86? X64? ARM?
  • 你确定吗?因为这些寄存器看起来不像 x86_64 寄存器。说明也不行。

标签: c linux assembly arm


【解决方案1】:

OP 提到了架构为 ARM 64。所以我会根据调用约定来回答。

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

这也是编译器在编译 C 文件时也会为你做的事情。所以你可以期待你的参数n在r0寄存器中,你可以直接使用它。

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

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

【讨论】:

    猜你喜欢
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多