andeq r14,r7, r0, lsl #20
ASSERT :DEF:ENDIAN _CHANGE135 [ ENDIAN _CHANGE136 ASSERT :DEF:ENTRY_ BUS _WIDTH137 [ ENTRY_ BUS _WIDTH=32138 b ChangeBigEndian ;DCD 0xea000007139 ]140 [ ENTRY_ BUS _WIDTH=16141 andeq r14,r7, r0, lsl #20 ;DCD 0x0007ea00142 ]143 [ ENTRY_ BUS _WIDTH=8144 streq r0,[r0,-r10 , ror #1 ] ;DCD 0x070000ea145 ]146 | ; 如果没有定义总线宽度,则跳转到复位中断147 b ResetHandler148 ]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,[r0,-r10 , ror #1 ] ;DCD 0x070000ea 中各寄存器原来的值是什么?又是如何实现 DCD 0x070000ea 的?大家不要见笑,新手问题多,嘿嘿!问题补充:
还有,第3,4问题中那两句程序中为什么要加一个条件代码eq,即Z位为1,为什么要加这个条件?