打印
[ARM入门]

关于ARM汇编伪指令DCD内存分配问题

[复制链接]
5721|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
木叶小镇|  楼主 | 2013-12-6 11:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在学习ARM汇编,在书上看到:DCD用于分配一段字内存单元,一般用来定义数据表格和其它常数。
;实现x=(a+d)-c;
  AREA Code1, CODE, READONLY;定义一个代码段
  ENTRY
  ADR r4,a
  LDR r0,[r4]
  ADR r4,d;
  LDR r1,[r4]
  ADR r4,c
  LDR r2,[r4]
  ADD r4,r0,r1
  SUB r2,r4,r2
  ADR r4,x
  STR r2,[r4]
  NOP
a        DCD 0x03;定义a的值
d        DCD 0x02;定义b的值
c        DCD 0x01;定义c的值
x        DCD 0x12345678;定义x的值
  END
在Keil上运行以上代码后,发现让r2的值无法写入x对应的地址。发现a,d,c,x 的值都存入Flash里面,因为flash是readonly,故无法把最终的数据写入flash.
于是,有以下疑问:
1、DCD用于分配一段字内存单元,DCD会在内存单元里初始化数据吗?
2、这个内存单元地址如何确定?
第一次论坛发帖,望大侠们指教。

相关帖子

沙发
木叶小镇|  楼主 | 2013-12-6 11:58 | 只看该作者
把程序改了一下。上述程序不能把让r2寄存器里面的值存入Flash地址,把r2寄存器里面的值存储在了RAM里面(LPC2138存储器映射0x0--0x00080000:flash空间,0x40000000--0x40008000:RAM空间)
;实现x=(a+b)-c;
        AREA Code1, CODE, READONLY;定义一个代码段
        ENTRY
        ADR r4,a
        LDR r0,[r4]
        ADR r4,d;
        LDR r1,[r4]
        ADR r4,c
        LDR r2,[r4]
        ADD r4,r0,r1
        SUB r2,r4,r2
        ADR r4,x
        LDR r5,[r4]
        STR r2,[r5]
        NOP
a        DCD 0x03;定义a的值
d        DCD 0x02;定义b的值
c        DCD 0x01;定义c的值
x        DCD 0x40000000;定义x的值
        END

使用特权

评论回复
板凳
ayb_ice| | 2013-12-6 13:27 | 只看该作者
类似于51的DB吧

使用特权

评论回复
地板
黄小俊| | 2013-12-6 13:48 | 只看该作者

使用特权

评论回复
5
木叶小镇|  楼主 | 2013-12-6 14:02 | 只看该作者
ayb_ice 发表于 2013-12-6 13:27
类似于51的DB吧

我也感觉类似于51的DB指令。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

57

帖子

1

粉丝