• 全部
...

如何在ARM汇编程序中表示指定的内存地址

jet8 2013-04-11 02:52:42

下面的小程序用于计算前20个斐波那契数

area exam04, code, readonly

N equ 20
M equ 4*N
fib space M
entry
start ldr r0, =fib
mov r1, #1
mov r2, #1
str r1, [r0]
str r2, [r0]
loop add r3, r1, r2
str r3, [r0]
mov r1, r2
mov r2, r3
cmp r0, #fib+M
blt loop

stop b stop

end

编译时出现错误提示:Error: L6286E: Value(0x8000) out of range(0 - 0xff) for relocation #0 (wrt symbol exam04) in exam04.o (exam04)

指示发生错误的指令是:cmp r0, #fib+M
我的本意是取缓冲区fib偏移M个字节的地址,把fib装入寄存器在加偏移固然也可以,但我想直接在汇编阶段也应该可以由汇编器计算这个地址,不知道应该如何书写这个地址?谢谢。
...全文
给本帖投票
419 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jet8 2013-04-15
  • 打赏
  • 举报
回复
惭愧,应该用post-indexed的。 查阅ARM手册后发现,cmp指令中只能存放12位立即数,而fib+M过大,因此汇编出错。谢谢!
qisiwoye 2013-04-15
  • 打赏
  • 举报
回复
另外楼主 这个 R0 都没有动过~你存不了 20个 斐波那契数哦
qisiwoye 2013-04-15
  • 打赏
  • 举报
回复
cmp r0, #fib+M #fib+M 限制很多 ,内核不同 也有区别 ldr r4,=fib add r4,r4,#M cmp r0,r4
早恋 2013-04-12
  • 打赏
  • 举报
回复
我个人觉得确实应该用这个偏移,确定不是其他问题导致的这个错误?

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
社区公告
暂无公告

试试用AI创作助手写篇文章吧

手机看
关注公众号

关注公众号

客服 返回
顶部