我在ARM程序集中为cortex定义了两个段--M4,一个是代码(只读),另一个是数据(读写)。只读存储器定义为从地址0x08000000开始,RW存储器在0x20000000处开始。每个段都在其自己的程序集文件中定义,并且正确导出/导入标签名称。
数据段写为:
AREA myData, Data, READWRITE
EXPORT myString
myString DCB "To be or not to be, that is the question"
END
在代码中,我使用LDR R0,= myString
加载字符串的地址R0正确地将地址0x20000000加载到R0中。但是当使用Keil uVision IDE内存视图时,该地址的内存为空。相反,我在Read Only区域的代码后面找到了字符串。那么请你告诉我如何将字符串放在内存中的正确位置?
由于
答案 0 :(得分:3)
在执行汇编代码之前,您是否正在运行C运行时?如果为字符串提供初始值,则必须将其存储在程序存储器中,然后在运行时复制到RAM。 C运行时应该为您执行此操作,或者如果您只运行汇编代码,则可以自己执行此操作,但必须明确完成。
答案 1 :(得分:1)
DATA区域不应该用于定义常量...使用CODE区域。这样你就可以访问字符串并将其读入寄存器,然后根据需要将其写入内存。 DATA区域应该用于使用SPACE指令为程序分配内存。
我读过的每本教科书/手册声称你可以在DATA区域定义一个常量,但我还没有看到它正常运作。
答案 2 :(得分:0)
如果您已在编译器选项中指定了其段起始地址,那么
的输出是什么readelf -S
或
nm | grep myData