簡體   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