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