【发布时间】:2017-08-25 07:30:32
【问题描述】:
我正在阅读学习 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 或一般有什么问题?
【问题讨论】:
-
你知道哪个库提供了
printf函数吗?而且由于您不是用 C 编程,我不确定您想对stdio.h头文件做什么。 -
如果您使用的是
ARMSim,则printf可能根本不可用。 -
我在这里很困惑,如果你足够好心,请帮助我找出并描述我曾经的单行代码和对 gnu 汇编器的翻译。我会好好珍惜这份善意。
-
我相信你的翻译是正确的(虽然,这个
.weak Lib$$Request$$armlib不会做任何事情)。只是您没有链接到提供printf的库。由于我从未使用过 ARMSim,因此我无法确定是否有提供此功能的库。 -
如果您想解释您的代码,请提出单独的问题。