[ARM入门] 关于ARM汇编伪指令DCD内存分配问题

[复制链接]
6082|4
 楼主| 木叶小镇 发表于 2013-12-6 11:17 | 显示全部楼层 |阅读模式
最近在学习ARM汇编,在书上看到:DCD用于分配一段字内存单元,一般用来定义数据表格和其它常数。
  1. ;实现x=(a+d)-c;
  2.   AREA Code1, CODE, READONLY;定义一个代码段
  3.   ENTRY
  4.   ADR r4,a
  5.   LDR r0,[r4]
  6.   ADR r4,d;
  7.   LDR r1,[r4]
  8.   ADR r4,c
  9.   LDR r2,[r4]
  10.   ADD r4,r0,r1
  11.   SUB r2,r4,r2
  12.   ADR r4,x
  13.   STR r2,[r4]
  14.   NOP
  15. a        DCD 0x03;定义a的值
  16. d        DCD 0x02;定义b的值
  17. c        DCD 0x01;定义c的值
  18. x        DCD 0x12345678;定义x的值
  19.   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 | 显示全部楼层
 楼主| 木叶小镇 发表于 2013-12-6 14:02 来自手机 | 显示全部楼层
ayb_ice 发表于 2013-12-6 13:27
类似于51的DB吧

我也感觉类似于51的DB指令。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

57

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部