繁体   English   中英

ARM Assembly,寄存器未设置为0吗?

[英]ARM Assembly, register not being set to 0?

start

read

    BL  getkey              ; read key from console
    CMP R0, #0x0D           ; while (key != CR)
    BEQ endRead             ; {
    BL  sendchar            ;   echo key back to console    

    CMP R0, #' '            ; if (ro = ' ')
    BNE nocount             ;{                          
    ADD R7, R7, #1          ; r7 += 1
    LDR R4, =0              ; r4 = 0
nocount                     ;}

    MOV R6, R0              ; Store input in R6
    SUB R6, R6, #'0'        ; Convert from decimal to hex
    MULS R4, R5, R4         ; If there is another input, multiply total by 10
    ADDS R4, R4, R6         ; Add the input to the total

    ADD R8, R4, R8          ;sum

    B   read    

endRead                 

end                     

stop    B   stop

    END 

嗨,我正在尝试编写代码,以便在控制台中输入空格时,将在R7中添加1,并将R4设置为0。

当添加空格时,R4设置为0xFFFFFFF0,但是当我向其添加'5'时,我得到0xFFFFFFF65。 我希望只得到0x00000005。 这很奇怪,因为当我在比较之外放置相同的命令时,它就起作用了。 任何帮助表示赞赏,谢谢。

我也希望r8是输入数字的总和,它似乎工作不正常,有人可以告诉我为什么吗?

您是否探索过条件执行添加(ADD)等?

假设:ARMv7我的机器= Linux raspberrypi 4.4.26-v7 +#915 SMP 2016年10月20日星期四17:08:44 BST 2016 armv7l GNU / Linux

        cmp r0, #0x20          // white space - space char
        addeq r7, r7, #1        // conditional add
        eoreq r4, r4            // conditional zero
LDR R4, =0

没有为寄存器分配零。 它从存储器地址0加载寄存器。

MOV R4, #0

代替。

关于数字的总和; 请在下面的简单递减循环示例中将每个数字的总和加到R1。 希望这可以帮助。

main:   nop

        eor r2, r2
        mov r1, #0xf
        1:

        add r2, r2, r1
        bl write

        subs r1, #1
        bne 1b

输出:

15 15
14 29
13 42
12 54
11 65
10 75
9 84
8 92
7 99
6 105
5 110
4 114
3 117
2 119
1 120

对不起,每个人的代码都是正确的,只是位置不正确,谢谢大家!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM