Pointers 指针反汇编输出中的NOP代码

Pointers 指针反汇编输出中的NOP代码,pointers,disassembly,keil,Pointers,Disassembly,Keil,我想知道为什么会有如下所示的初始化指针的NOP 我甚至定义了一个全局变量,但面临相同的结果 值得一提的是,我使用默认的ARM编译器版本5,并将优化设置为0级 有根据的猜测:对于某些处理器来说,通过插入noop指令来对齐分支目标是一种优化。见例。这可能就是这里发生的事情。谢谢Gene的评论,但这不是问题。当我将地址引用到指针时,什么也没发生。你不明白。指针值#BEEF由STR指令指定。源代码中的下一个内容是,而(1){}。这将编译为跳转到自身的单个分支。我的意思是编译器插入了一个NOOP,这样分支

我想知道为什么会有如下所示的初始化指针的NOP

我甚至定义了一个全局变量,但面临相同的结果

值得一提的是,我使用默认的ARM编译器版本5,并将优化设置为0级


有根据的猜测:对于某些处理器来说,通过插入noop指令来对齐分支目标是一种优化。见例。这可能就是这里发生的事情。谢谢Gene的评论,但这不是问题。当我将地址引用到指针时,什么也没发生。你不明白。指针值#BEEF由STR指令指定。源代码中的下一个内容是
,而(1){}
。这将编译为跳转到自身的单个分支。我的意思是编译器插入了一个NOOP,这样分支目标会下降到280而不是27度。280位于16字节边界上,这是一种非常常见的对齐方式。27C位于4字节边界上,而不是。谢谢gene,如果我理解正确,请解释NOP以及我们在反汇编代码中使用它的原因,那么为什么我在指针中没有bitband地址(bitbandAddress),如果您看到watch 1窗口,编译器已优化指针分配,因为从未使用该值。如果您使用指针作为参数调用另一个函数,您将看到编译代码中包含的地址。有根据的猜测:对于某些处理器来说,通过插入noop指令来对齐分支目标是一种优化。见例。这可能就是这里发生的事情。谢谢Gene的评论,但这不是问题。当我将地址引用到指针时,什么也没发生。你不明白。指针值#BEEF由STR指令指定。源代码中的下一个内容是
,而(1){}
。这将编译为跳转到自身的单个分支。我的意思是编译器插入了一个NOOP,这样分支目标会下降到280而不是27度。280位于16字节边界上,这是一种非常常见的对齐方式。27C位于4字节边界上,而不是。谢谢gene,如果我理解正确,请解释NOP以及我们在反汇编代码中使用它的原因,那么为什么我在指针中没有bitband地址(bitbandAddress),如果您看到watch 1窗口,编译器已优化指针分配,因为从未使用该值。如果您使用指针作为参数调用另一个函数,您将看到编译代码中包含的地址。