这是我在ASM中的simpe "Hello“程序:
.global _start
_start:
adr r1, hello
b test
loop: ldr r12, =0x16000000
str r0, [r12]
test: ldrb r0, [r1], #1
cmp r0,#0
bne loop
@b loop
hello: .asciz "Hello world.\n\r"在注释掉b loop之后,我希望它只打印出一个"Hello“。但实际上它并没有停止,就像命令b loop仍然在那里一样。为什么?
发布于 2012-05-26 06:09:43
bne是一个条件分支,分支如果不相等,基本上分支如果零标志是清楚的。如果它不分支,它将继续执行。一旦您找到了null终止,您就不会分支为循环,而是执行构成"Hell“的字节作为指令。试试这个:
.global _start
_start:
adr r1, hello
b test
loop: ldr r12, =0x16000000
str r0, [r12]
test: ldrb r0, [r1], #1
cmp r0,#0
bne loop
forever: b forever
hello: .asciz "Hello world.\n\r"给手臂在bne之后执行一些东西,而不是数据。它应该遍历数据字符串一次,然后进入无限循环。
https://stackoverflow.com/questions/10762139
复制相似问题