这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 一个关于寻址方式的问题

共5条 1/1 1 跳转至

一个关于寻址方式的问题

菜鸟
2008-03-28 10:21:55     打赏
在看LDR和STR指令时,有下面一段程序
GPIO-BASE   EQU   0xe0028000

    LDR    R0,=GPIO-BASE
    LDR    R1,=0x00ffff00
    STR    R1,[R0,#0x0c]

我不是很明白,第一句是把GPIO-BASE的地址装载到R0寄存器中,所以在第三句中R0的值加上#0x0c是GPIO-BASE的地址加了#0x0c,并不是GPIO-BASE的值0xe0028000加上了#0x0c,所以R1的值没有存储到0xe002800c中去,而是存到变量GPIO-BASE的地址向后偏移0x0c的地址中去了。所以无法实现对 地址0xe002800c处寄存器的有效控制。

说白了GPIO-BASE就是一个指针,程序中是对指针的地址也就是指针的指针进行了操作,而不是对指针的值进行操作,所以无法改变指针所指向的寄存器。

但书上的历程是这么写的,是不是我理解错了,希望大家帮助解答一下!



关键词: 一个     关于     寻址     方式     问题    

菜鸟
2008-03-28 11:08:17     打赏
2楼
你在看汇编的时候,建议不要考虑指针的概念。大概解释一下你贴的程序:

1》    GPIO-BASE   EQU   0xe0028000
2》    LDR    R0,=GPIO-BASE
3》    LDR    R1,=0x00ffff00
4》    STR    R1,[R0,#0x0c]


1》定义GPIO-BASE的值为0XE0028000
2》将GPIO-BASE的值装载到R0,执行完毕后,R0的值为0XE0028000
3》将R1的值置为0X00FFFF00,执行完毕后,R0的值为0X00FFFF00
4》将R1的值存储到R0+0x0C的地方去,也就是将0X00FFFF00存储到(0XE0028000+0X0C)去。

菜鸟
2008-03-28 11:08:57     打赏
3楼
其实,你碰到这类问题,用软件仿真验证一下就知道结果了,而不用去猜测。

菜鸟
2008-03-28 11:11:20     打赏
4楼

谢谢twentyone提供这么一个好的办法!按客观事实说话,我怎么没想到!


菜鸟
2008-03-28 13:45:41     打赏
5楼
: -)  欢迎常来论坛看看。

共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]