什么是arm gnu汇编程序中的IMPORT替代方案?

时间:2017-03-31 06:16:14

标签: assembly arm gnu-arm

我正在阅读用于学习ARM和ARM程序集的书。本书中的示例基于armcc编译器,但我使用的是arm-none-eabi-gcc。那么如何才能将这种代码的和平改变为gnu汇编程序?

IMPORT |Lib$$Request$$armlib|,WEAK. 

整个例子是:

    AREA |.text|, CODE , READONLY
    EXPORT main
    IMPORT |Lib$$Request$$armlib|,WEAK
    IMPORT __main ;C library entry
    IMPORT printf ; prints to stdout
i   RN 4
    ;int main(void)
main
    STMFD sp!,{i,lr}
    MOV i,#0
loop
   ADR r0, print_string
   MOV r1,i
   MUL r2,i,i
   BL printf
   ADD i,i,#1
   CMP i,#10
   BLT loop
   LDMFD sp!,{i,pc}
print_string
   DCB "Square of %d is %d\n",0
   END

所以我将它转换为

 .section .text
    .weak Lib$$Request$$armlib
    .global main
    i .req r4
main:
    STMFD sp!,{i,lr}
    MOV i,#0
loop:
    ADR r0,print_string
    MOV r1,i
    MUL r2,i,i
    BL printf
    ADD i,i,#1
    CMP i,#10
    BLT loop
    LDMFD sp!,{i,pc}
print_string:
    .ascii "Square of %d is %d\n"
    .end

我使用ARMSim进行模拟......但是我收到了一些错误:

未定义的符号printf 地址不在文本部分 那么怎样才能包含“stdio.h”用于使用printf或者通常有什么问题?

1 个答案:

答案 0 :(得分:3)

在GNU汇编程序中,您不需要声明您使用的符号。如果使用符号并且该符号未在任何地方定义,则它将作为未定义的符号输入到目标文件中。

要将符号定义为弱符号,请写:

.weak sym

其中sym是符号的名称。