我是一个新手在组装和我不能解决一个问题我的老师给我,我只是想我做错了什么的解释。基本上我要做的是保存在R0的数字65(十进制),在R1 1B001B00(十六进制)(这部分是没有错,因为它编译,但如果你有任何建议,更好的方法来做它,我会很高兴)
- (未编译的部分)* 将R0存储在地址0x20000040中,将R1存储在0x20000044中,最后将地址0x20000040中的内容加载到R7中
下面是我到目前为止编写的代码:
MOV R0, #65
MOV R1, #0x1B00
MOVT R1, #0x1B00
STR R0, 0x20000040
STR R1, 0x20000044
LDR R7, 0x20000040
我得到的错误是
错误的符号,未定义或在外部
1条答案
按热度按时间snvhrwxg1#
ARM架构不支持直接寻址。相反,您必须将地址加载到寄存器中,然后使用变址寻址模式。
例如,您可以执行:
我们将地址分为
0x20000000
和2个小偏移量,因为ARM mov-immediate只能对某些类型的常量进行编码,例如按任意偶数计数循环的8位值。(两个相邻地址中的一个)设置了10位的位,所以如果你想这样,你可以做ldr r2, =0x20000040
,让汇编程序来计算如何把它放到寄存器中。你可以用R7来保存地址,你会用最后一次加载来覆盖它,所以如果你想避免使用任何超出指定的临时寄存器,这就可以了。