[英]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.