擦,init.s中直接上机器码了,看的头晕,股割一下原来发现是这样滴
在init.s文件中有以下几段代码:
[ ENTRY_BUS_WIDTH=32
DCD 0xee110f10 ;0xee110f10 => mrc p15,0,r0,c1,c0,0
DCD 0xe3800080 ;0xe3800080 => orr r0,r0,#0x80; //Big-endian
DCD 0xee010f10 ;0xee010f10 => mcr p15,0,r0,c1,c0,0
]
[ ENTRY_BUS_WIDTH=16
DCD 0x0f10ee11
DCD 0x0080e380
DCD 0x0f10ee01
]
[ ENTRY_BUS_WIDTH=8
DCD 0x100f11ee
DCD 0x800080e3
DCD 0x100f01ee
]
DCD 0xffffffff ;swinv 0xffffff is similar with NOP and run well in both endian mode.
DCD 0xffffffff
DCD 0xffffffff
DCD 0xffffffff
DCD 0xffffffff
b ResetHandler
其中的0xee110f10为机器码并非汇编指令.汇编指令为 mrc p15,0,r0,c1,c0,0.
以下为汇编的意思:
mrc p15,0,r0,c1,c0,0 //将c1读到r0
orr r0,r0,#0x80; //r0的第7位置1
mcr p15,0,r0,c1,c0,0 //将r0写到协处理器c1中
总的意思为:
如果总线是16位的就用ENTRY_BUS_WIDTH=16这个数据段来填充内存控制器寄存器。32位就用ENTRY_BUS_WIDTH=32数据段。
DCD 0xffffffff 这些只不过是NOP,在低对齐内存模式时用来填充的数据。
上面是改变大小端的程序,这里采用直接定义机器码的方式,至说为什么这么做就得问三星了
反正我们程序里这段代码也不会去执行,不用去管它
文章评论(0条评论)
登录后参与讨论