原创 有关于机器码 DCD 0xee110f10的解释

2011-6-2 15:43 2312 1 1 分类: MCU/ 嵌入式

擦,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,在低对齐内存模式时用来填充的数据。
上面是改变大小端的程序,这里采用直接定义机器码的方式,至说为什么这么做就得问三星了
反正我们程序里这段代码也不会去执行,不用去管它

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
1
关闭 站长推荐上一条 /1 下一条