我一直在尝试用ARMv8打印我的总和,但是我似乎不能让它工作。我可以编译和运行,但没有显示任何输出。
这是我的代码:
.balign 4
.global main
main:
stp x29, x30, [sp, -16]!
mov x29, sp
mov x19, 1
mov x20, 2
add x21, x20, x19
mov w0, 0
ldp x29, x30, [sp], 16
ret 发布于 2016-10-05 01:19:14
正如@Michael所指出的,您没有使用任何指令将您的金额“打印”到屏幕上。您可以使用syscalls或printf。下面的示例ARMv8代码使用了printf和一些简单的宏,这些都不是必需的。
我建议你学习ARMv7,因为有很多教程,然后复习ARMv8指令集概述和AArch64的ARM过程调用标准。
1 /*
2 David @InfinitelyManic
3 http://stackoverflow.com/questions/39845288/cant-print-sum-in-armv8-assembly
4 $ uname -a
5 Linux alarm 3.10.65-4-pine64-longsleep #16 SMP PREEMPT Sun Apr 3 10:56:40 CEST 2016 aarch64 GNU/Linux
6 $ cat /etc/os-release
7 NAME="Arch Linux ARM"
8 gcc -g print_sum.s -o print_sum
9 */
10 .bss
11 .data
12 fmt: .asciz "%d + %d = %d\n"
13 .text
14 .global main
15
16 // macros
17 // push2
18 .macro push2, xreg1, xreg2
19 .push2\@:
20 stp \xreg1, \xreg2, [sp, #-16]!
21 .endm
22
23 // pop2
24 .macro pop2, xreg1, xreg2
25 .pop2\@:
26 ldp \xreg1, \xreg2, [sp], #16
27 .endm
28
29 // exit
30 .macro _exit
31 .exit\@:
32 mov x8, #93 // exit see /usr/include/asm-generic/unistd.h
33 svc 0
34 .endm
35
36 main:
37 mov x1, 1
38 mov x2, 2
39 add x3, x1, x2
40 bl write
41
42 _exit
43
44 write:
45 push2 x29, x30
46 ldr x0,=fmt
47 bl printf
48 pop2 x29, x30
49 ret输出:
$./print_sum
1 + 2 = 3https://stackoverflow.com/questions/39845288
复制相似问题