[英]LC-3 program that adds the sum of odd integers between two number
我不确定如何输入两位数的数字,并且实际上是否可以使用它(加,减,与等)。 到目前为止,我可以将我的开始和结束数字输入为字符串,并使用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!"
快速扫描您的代码。
GETC
OUT
STR R0, R2, #0
[...]
GETC
OUT
STR R0, R3, #0
请记住,LD / LDR / LDI / ST / STR / STI指令将进入内存。 如果您只是想将一个寄存器的值移到另一个寄存器,则不应使用任何这些指令。
只需使用ADD或AND指令即可将一个寄存器移至另一个寄存器。 只需将0添加到寄存器中并存储到目标寄存器中,或者将其自身与AND并存储到目标寄存器中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.