为什么这个汇编程序以一个无限循环结束



这个程序是我课本上的一个例子,这个程序的目的是计算N+N-1++2+1,并将结果存储在R1中。为什么它以死循环块结束,它能做什么?

; asm4-1.s
N          EQU 10 
Stack_Size EQU 0x00000400 
AREA MyStack, NOINIT, READWRITE, ALIGN=3 
Stack_Mem  SPACE Stack_Size 
__initial_sp
AREA Reset, DATA, READONLY 
__Vectors DCD __initial_sp 
DCD Reset_Handler 
THUMB 
PRESERVE8 
AREA Init, CODE, READONLY 
ENTRY
Reset_Handler

LDR r0, =N 
MOV r1, #0 
loop
ADD r1, r0 
SUBS r0, #1 
BNE loop 
deadloop
B deadloop ; Does this create an infinite loop? why is it here
NOP
END

这看起来像是针对ARM微控制器的。

在裸金属上,没有什么可退出的,空的无限循环比运行更多指令使CPU进入睡眠状态更容易。

如果让执行继续进行,它会尝试将内存中的下一个指令作为指令执行,可能会在连接调试器并查看它们之前弄乱寄存器。或者触发连续的重新启动,这将使从外部信号引脚中很难判断引导加载程序实际加载了什么。(例如,因为指令后面的字节发生了故障,而故障处理程序也在其他地方运行垃圾代码,或者其他什么地方。(

或者在一个不那么琐碎的引导加载程序中,可能会导致视频内存中的数据混乱。

还有一种可能性是,在内存中运行随机垃圾作为指令可能会对硬件造成不良影响,这取决于板以及软件必须做什么才能损坏硬件。(例如,将I/O引脚配置为输出,即使它已经连接到电源或接地。(

相关内容

  • 没有找到相关文章

最新更新