我不确定如何输入两位数字并且实际上能够使用它(加,减,和等)。到目前为止,我可以输入我的开始和结束数字作为字符串并使用LEA输出字符串,但我需要它们在寄存器中,所以我可以将它们从ASCII转换为整数并计算总和。我认为我的和计算的逻辑很好,但我可能是错的。到目前为止,我有这个:
.ORIG x3000
AND R0, R0, #0 ; clear R0
LEA R2, blankspace ; string space R2
LD R1, pooploop ; loop condition
LEA R0, ENTER
PUTS ; print start number prompt
startloop
GETC
OUT
STR R0, R2, #0
ADD R2, R2, #1
ADD R1, R1, #-1
BRp startloop
LEA R3, deathnote ; string space R3
LD R1, pooploop ; loop condition
LEA R0, END
PUTS ; print end number prompt
endloop
GETC
OUT
STR R0, R3, #0
ADD R3, R3, #1
ADD R1, R1, #-1
BRp endloop
ADD R2, R2, #-12 ; convert
ADD R2, R2, #-12
ADD R2, R2, #-12
ADD R2, R2, #-12
ADD R3, R3, #-12 ; convert
ADD R3, R3, #-12
ADD R3, R3, #-12
ADD R3, R3, #-12
NOT R2, R2 ; negate R2
ADD R4, R3, R2 ; R3 - R2
BRn NEG
NOT R2, R2 ; if end number is greater, negate R2 again
loop
ADD R2, R2, #1 ; increment start number by 1
NOT R2, R2 ; negate R2
ADD R5, R3, R2 ; R3 - (R2+1)
BRz exit ; exit when start number is equal to end number
NOT R2, R2 ; negate R2 if start number is less than end number
AND R5, R2, #1 ;
BRp sum
BRnzp loop
sum
ADD R6, R2, #0
BRnzp loop
exit
NEG LEA R0, ERROR
PUTS
HALT
deathnote .blkw 50
blankspace .blkw 100
pooploop .FILL x02
ENTER .STRINGZ "\nEnter Start Number > "
END .STRINGZ "\nEnter End Number > "
ERROR .STRINGZ "\nERROR! Invalid Entry!"
答案 0 :(得分:1)
快速扫描您的代码。
GETC
OUT
STR R0, R2, #0
[...]
GETC
OUT
STR R0, R3, #0
请记住,LD / LDR / LDI / ST / STR / STI指令将进入内存。如果您只是想将一个寄存器的值移动到另一个寄存器,那么您不应该使用任何这些指令。
可以使用ADD或AND指令简单地将一个寄存器移动到另一个寄存器。只需将0添加到寄存器并存储到目标寄存器中,或者将AND与其自身相加并存储到目标寄存器中。