Вызов файла сборки ARM из другого - PullRequest
0 голосов
/ 15 октября 2019

В настоящее время я следую примеру RPIA-1, который показывает, как использовать внутренние функции с ARM Assembler на Raspberry Pi.

Однако я хочу отделить функцию mult_by_5, создать ее как собственный файл сборки (.s) и вызвать ее из основной программы.

Я не уверен, с чего начать, так как книга преимущественно говорит о внутренних функциях и не упоминает много о внешнем вызове функции. Я попытался определить файл .global mult_by_5, но, похоже, это не сработало.

Если бы я хотел разделить mult_by_5 в его собственный файл, как бы я определил этот файл и правильно вызвал его обратно в основную программу? ?

 /* -- printf02.s */
2 .data
3
4 .balign 4 @ First message
5 message1: .asciz "Hey, type a number: "
6 .balign 4 @ Second message
7 message2: .asciz "%d times 5 is %d\n"
8 .balign 4 @ Format pattern for scanf
9 scan_pattern: .asciz "%d"
10 .balign 4 @ Where scanf will store the number read
11 number_read: .word 0
12 .balign 4
13 return: .word 0
14 .balign 4
15 return2: .word 0
16
17 .text
18
19 /* mult_by_5 function */
57
9. Functions
20 mult_by_5:
21 ldr r1, =return2 @ r1 <- &return2
22 str lr, [r1] @ *r1 <- lr
23
24 add r0, r0, r0, LSL #2 @ r0 <- r0 + 4*r0
25
26 ldr lr, =return2 @ lr <- &return2
27 ldr lr, [lr] @ lr <- *lr
28 bx lr @ return to main using lr
29
30 .global main
31 main:
32 ldr r1, =return @ r1 <- &return
33 str lr, [r1] @ *r1 <- lr
34
35 ldr r0, =message1 @ r0 <- &message1
36 bl printf @ call to printf
37
38 ldr r0, =scan_pattern @ r0 <- &scan_pattern
39 ldr r1, =number_read @ r1 <- &number_read
40 bl scanf @ call to scanf
41
42 ldr r0, =number_read @ r0 <- &number_read
43 ldr r0, [r0] @ r0 <- *r0
44 bl mult_by_5
45
46 mov r2, r0 @ r2 <- r0
47 ldr r1, =number_read @ r1 <- &number_read
48 ldr r1, [r1] @ r1 <- *r1
49 ldr r0, =message2 @ r0 <- &message2
50 bl printf @ call to printf
51
52 ldr lr, =return @ lr <- &return
53 ldr lr, [lr] @ lr <- *lr
54 bx lr @ return from main using lr
55
56 /* External */
57 .global printf
58 .global scanf
...