ARM装配,Keil Microvision 4;使用非零注册表值

时间:2016-11-25 01:44:05

标签: arm

希望得到一些帮助。

我有一个大学作业,涉及制作基本上是一个计算器,它将用户输入的值作为ASCII字符串存储并显示输入的值,以及进行各种计算,如sum,min,等,并将它们全部存储起来。代码仅在输入值后执行。

我的代码本身正在运行到目前为止我需要它,我想我知道如何编写所有的计算,但我的问题是大多数寄存器从一开始就保持非零值,所以如果我开始立即向寄存器添加值 - 例如,总和 - 结束值将是不正确的。我不能只使用LDR并事先将它们设置为零,因为每次运行代码时都会发生这种情况,并且我需要保持添加的值以便每次都进行计算。

我不知道我是否过度思考这个问题,或者我是否有一些非常简单的问题,但是我想不出用非零注册表值做我需要的方法。

到目前为止,这是我的工作代码:

AREA    ConsoleInput, CODE, READONLY
IMPORT  main
IMPORT  getkey
IMPORT  sendchar
EXPORT  start
PRESERVE8

start

read

LDR R7, =0

BL  getkey      ; read key from console

CMP R0, #0x0D   ; while (key != CR)

BEQ endRead     ; {

BL  sendchar    ;   echo key back to console

;R4 is used to store the hex value of whatever is entered (as a full number)
;R5 stored the entered input safely (as R0 can change)
;R6 holds the constant 10, for increasing successive entries by a base of ten
;R10 is where successive values are multiplied by 10
;R11 is used to hold the count (+1 each time the code is run)


LDR R6, =10
MUL R10, R6, R10
MOV R5, R0
AND R5, R5, #&F
ADD R10, R10, R5
MOV R4, R10 ;NUMBER ENTERED SENT TO R4

ADD R11, R11, #1    ;COUNT




B   read        ; }

endRead

stop    B   stop

END 

0 个答案:

没有答案