首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ARM大会中的“你好世界”

ARM大会中的“你好世界”
EN

Stack Overflow用户
提问于 2012-05-25 22:43:43
回答 1查看 9.5K关注 0票数 4

这是我在ASM中的simpe "Hello“程序:

代码语言:javascript
复制
.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仍然在那里一样。为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-26 06:09:43

bne是一个条件分支,分支如果不相等,基本上分支如果零标志是清楚的。如果它不分支,它将继续执行。一旦您找到了null终止,您就不会分支为循环,而是执行构成"Hell“的字节作为指令。试试这个:

代码语言:javascript
复制
.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之后执行一些东西,而不是数据。它应该遍历数据字符串一次,然后进入无限循环。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10762139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档