莫之夭阏者 发表于 2012-7-22 19:02:37

求助:关于ARM9启动代码中设置存储器大端小端的问题

本帖最后由 莫之夭阏者 于 2012-7-23 09:53 编辑

ASSERT:DEF:ENDIAN _CHANGE
135   [ ENDIAN _CHANGE
136      ASSERT   :DEF:ENTRY_ BUS _WIDTH
137       [ENTRY_ BUS _WIDTH=32
138   b ChangeBigEndian      ;DCD 0xea000007
139       ]
140       [ENTRY_ BUS _WIDTH=16
141   andeq r14,r7, r0, lsl#20    ;DCD 0x0007ea00
142       ]
143       [ENTRY_ BUS _WIDTH=8
144   streq r0, ;DCD 0x070000ea
145       ]
146   |            ; 如果没有定义总线宽度,则跳转到复位中断
147      b ResetHandler
148   ]
ENDIAN _CHANGE这个逻辑变量在Option.inc中已经被定义成FALSE,那在汇编时就会直接汇编为 b ResetHandler 这句程序。说明不需要改变默认的大端和小端模式。而之前在ADS中也是默认设置,即小端模式。那我怎么知道存储器一定就是小端模式呢?有点乱,不好意思,别见笑。
有几个问题:
1.ADS中的大端和小端模式是对谁设置的,是处理器还是存储器?
2.存储器的大端和小端模式是怎么设置的,是出厂时就固定的嘛还是可以更改设置的,如果可以,怎么更改?
3.代码中 andeq r14,r7, r0, lsl#20    ;DCD 0x0007ea00 中的R7,R0,和R14中原来是什么数值?将R0逻辑左移20位,与R7作与运算,结果放入R14中也就是链接寄存器LR中,那怎么实现 DCD 0x0007ea00 了呢?
4.同第3个问题一样,streq r0, ;DCD 0x070000ea 中各寄存器原来的值是什么?又是如何实现 DCD 0x070000ea 的?
大家不要见笑,新手问题多,嘿嘿!
还有,第3,4问题中那两句程序中为什么要加一个条件代码eq,即Z位为1,为什么要加这个条件?
麻烦有知道的人帮我解答下疑惑,我是刚开始学习的,用的是S3C2440。

莫之夭阏者 发表于 2012-7-23 09:48:48

{:dizzy:}有没有人知道的能解答一下啊。。。迷茫。。。
页: [1]
查看完整版本: 求助:关于ARM9启动代码中设置存储器大端小端的问题