2016-10-04 1 views
0

ARMv8에서 인쇄 합계를 인쇄하려고했으나 제대로 작동하지 않습니다. 컴파일하고 실행할 수 있지만 출력이 표시되지 않습니다.ARMv8 어셈블리에서 합계를 인쇄 할 수 없습니다.

@Michael에 의해 표시된 바와 같이
 .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      
+0

어떻게 당신이 실행? 어떤 지시 사항에 인쇄 될 것으로 예상되는 결과가 있습니까? – Michael

답변

1

, 어떤 지침 "인쇄"화면으로 합계를 사용하지 않는 :

이 내 코드입니다. 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 = 3 
+0

또 다른 방법은 버퍼/배열 주소를 가리킨 다음 time() 함수가 버퍼/배열에 시간을 저장하여 C 라이브러리의 write() 함수를 사용하는 것입니다. – InfinitelyManic

관련 문제