MOV R0,R0有何意义?
startMOV R0,R0
bl disable_watch_dog
bl memsetup
bl copy_steppingstone_to_sdram
ldr pc, =on_sdram
大家看这段代码,其中MOV R0,R0到底起了什么作用,有何意义呢? NOP 就是 NOP 指令. arm 没有特别的 NOP 指令, 就用这条无意义的操作来实现 NOP. 怎么大侠也说是NOP了?难道没有其他作用? 本帖最后由 W_Controller 于 2012-11-25 15:12 编辑
谢谢2楼,3楼两位大侠,刚才我查了下资料,确实都说是用MOV R0, R0来做NOP使用的。 本帖最后由 W_Controller 于 2012-11-25 15:12 编辑
一开始我也是想到这个是NOP,但是由于以前看到有些程序在声明变量(比如int a;)的时候,会在主程序中写着
a = a;说是为了防止编译器对为引用的变量做报错的处理,所以就想MOV R0,R0是不是也有其他用途,呵呵。 本帖最后由 W_Controller 于 2012-11-25 15:14 编辑
如果MOVR0, R0相当于NOP,那程序起始放这条指令有何作用呢? 虽然知道MOV R0, R0相当于NOP,但我一直想问,那干嘛不直接用NOP呢,写成MOV R0, R0很好玩吗? 虽然知道MOV R0, R0相当于NOP,但我一直想问,那干嘛不直接用NOP呢,写成MOV R0, R0很好玩吗?
jlass 发表于 2012-11-26 14:30 https://bbs.21ic.com/images/common/back.gif这个三楼airwill说了,arm 没有特别的 NOP 指令。 不知道程序一开始加这个NOP是什么意思? 本帖最后由 jlass 于 2012-11-27 12:39 编辑
很多跳转都会这么做,因为跳转指令需要两个指令周期,在bl这种长跳转之后马上接一个bl长跳转是会出错的,中间加一个nop已满足系统流水线要求(个人意见,请勿拍砖) 哎,没一个说明白为什么要这么做的。
真正的原因其实是:
由于ARM同时支持16位指令和32位指令,所以当系统受到干扰、PC指针意外修改程序错乱时,有一定的可能跑到不对齐的指令上,比如从一个32位指令的中间执行,这时系统会整个全乱套而不能恢复。
比如程序以32位跑到无代码区0xFFFF0002,一路顺序执行下去,直到0x00000002,就会执行到不对齐代码。
而在每个跳转入口前加入NOP,则不会存在不对齐问题了。
为了通用,做编译器的意识到这个问题可能性的话就会有意识的加上这个。 哎,没一个说明白为什么要这么做的。
真正的原因其实是:
由于ARM同时支持16位指令和32位指令,所以当系统受到干扰、PC指针意外修改程序错乱时,有一定的可能跑到不对齐的指令上,比如从一个32位指令的中间执行,这 ...
xwj 发表于 2012-11-27 09:09 https://bbs.21ic.com/images/common/back.gif哎,终于有大侠出现了。xwj的意思是说加了nop能够防止程序错乱跑到不对齐的指令上。这是“其然”,还请大侠不吝赐教,讲解一下其“所以然”。呵呵,我是不是有点钻牛角尖了;P 哎,没一个说明白为什么要这么做的。
真正的原因其实是:
由于ARM同时支持16位指令和32位指令,所以当系统受到干扰、PC指针意外修改程序错乱时,有一定的可能跑到不对齐的指令上,比如从一个32位指令的中间执行,这 ...
xwj 发表于 2012-11-27 09:09 https://bbs.21ic.com/images/common/back.gif
如果这里NOP是32位指令,跳到中间一样会挂掉。 MOV R0,R0的机器码并不是0吧。
这里是汇编代码,是人工编写的,并不是编译器生成的。
且放在reset处,用于上电延迟启动的,虽然这样作用并不是很大。 我觉得楼上两位说的都太玄了,可否直接告知其出处(某本书或是某个文档),请不吝赐教。 还是没有人说清楚啦 来个大神解释一下吧 没人规定程序入口一定要加nop,加了也不见得有用。ARM跟MIPS不一样,没有延迟槽的概念,所以长周期指令后面不必要跟nop。 我先说一下,我的解释的出处吧
ARM9五级流水线结构
http://www.21ic.com/app/embed/200903/34441.htm
刚才百度了一下,这是别人讨论的
http://bbs.chinaunix.net/thread-3565986-1-1.html jlass有心了,谢谢你。论坛有你们真好:) 这个10几年前的帖子,还没看到答案,我想是不是因为代码的分段是32位对齐的,刚好到这个地方不对齐,所以用一个全0的16位填充以达到32位对齐。
页:
[1]