AREA Init,CODE,READONLY
ENTRY
;1)The code, which converts to Big-endian, should be in little endian code.
;2)The following little endian code will be compiled in Big-Endian mode.
; The code byte order should be changed as the memory bus width.
;3)The pseudo instruction,DCD can't be used here because the linker generates error.
ASSERT :DEF:ENDIAN_CHANGE
[ ENDIAN_CHANGE
ASSERT :DEF:ENTRY_BUS_WIDTH
[ ENTRY_BUS_WIDTH=32
b ChangeBigEndian ;DCD 0xea000007
]
[ ENTRY_BUS_WIDTH=16
andeq r14,r7,r0,lsl #20 ;DCD 0x0007ea00
]
[ ENTRY_BUS_WIDTH=8
streq r0,[r0,-r10,ror #1] ;DCD 0x070000ea
]
|
b ResetHandler
]
////////////////////////////////////////////////////////
问题:
1、DEF在这里是一个类似于ENDIAN_CHANGE的变量吗?有什么作用?
2、这里所有的代码都应该以小端格式编译吧?
3、这段代码的目的应该是:当外接端口固定为大端格式时,通过修改寄存器动态地改变到小端格式吧?
如果是这样,当ENTRY_BUS_WIDTH=32,“b ChangeBigEndian”仍然是以小端格式编译吗?
是不是因为大小端格式不影响指令(当总线宽度为32bits),只影响数据处理(包括取指时序)?
感觉表达得不是很清楚,请见谅!