当前位置: 代码迷 >> 汇编语言 >> 怎么在ARM汇编程序中表示指定的内存地址
  详细解决方案

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

热度:329   发布时间:2016-05-02 04:55:23.0
如何在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