求助:关于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。 {:dizzy:}有没有人知道的能解答一下啊。。。迷茫。。。
页:
[1]