毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> 开发语言 >> 正文

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

更新时间:2013-4-25:  来源:毕业论文

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

下面的小程序用于计算前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装入寄存器在加偏移固然也可以,但我想直接在汇编阶段也应该可以由汇编器计算这个地址,不知道应该如何书写这个地址?谢谢。 我个人觉得确实应该用这个偏移,确定不是其他问题导致的这个错误?

 cmp r0, #fib+M     #fib+M 限制很多 ,内核不同 也有区别

ldr   r4,=fib
add   r4,r4,#M
cmp   r0,r4

应该用post-indexed的。
查阅ARM手册后发现,cmp指令中只能存放12位立即数,而fib+M过大,因此汇编出错。

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。