ARM程序集,寄存器未设置为0?

时间:2016-11-15 16:05:47

标签: assembly arm cpu cpu-registers

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 

您好, 我正在尝试使用我的代码,因此当控制台中输入空格时,1将被添加到R7,R4将被设置为0。

当添加空格时,R4设置为0xFFFFFFF0,但是当我向它添加'5'时,我得到0xFFFFFFF65。我希望得到0x00000005。这很奇怪,因为当我在比较之外放置相同的命令时,它可以工作。感谢任何帮助。谢谢。

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

4 个答案:

答案 0 :(得分:1)

你有没有探索条件执行ADD等?

假设:ARMv7 我的机器= Linux raspberrypi 4.4.26-v7 +#915 SMP Thu Oct 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

答案 1 :(得分:0)

LDR R4, =0

不为寄存器分配零。它从存储器地址0加载寄存器。使用

MOV R4, #0

代替。

答案 2 :(得分: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

答案 3 :(得分:0)

对不起大家,代码是正确的,它只是处于正确的位置,谢谢大家!