LC-3程序,在两个数字之间添加奇数整数之和
问题描述:
我不知道如何输入两位数字并且实际上可以使用它(加,减,AND等)。到目前为止,我可以输入我的开始和结束数字作为字符串,并使用LEA输出字符串,但我需要它们在寄存器中,以便我们可以将它们从ASCII转换为整数并计算总和。我认为我对总和计算的逻辑很好,但我可能是错的。到目前为止,我有这个:LC-3程序,在两个数字之间添加奇数整数之和
.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添加到寄存器并存储到目标寄存器,或与其自己进行与,并存入目标寄存器。
+0
感谢您的评论。我意识到我在做什么,我需要做的是两件不同的事情。我以后可以发布完整的代码给任何正在犯同样错误的人 – prisonmike
我对硬件并不熟悉,但是目前的结果是什么,你试过了吗?问题究竟在哪里?您也可以在不将字符串转换为数字的情况下执行一些操作(例如:添加,减法)。 –
基本上现在发生的事情是,当它到达代码的一部分时,它会检查结束数字是否大于起始数字,它会跳转到ERROR字符串,即使我输入的结束数字大于起始号码。我相信这是因为ASCII值实际上并不在寄存器R2和R3中,而只是地址 – prisonmike
您可以尝试通过单步执行指令进行调试吗?通常情况下,ASCII码(值为48-57)和内存地址(无论其他地方通常相当大)之间的差别是显而易见的。然后,可以查看LC-3的一些示例/教程,以更好地理解如何使用值与地址(我不知道LC-3,因此我没有详细阅读您的代码,只是“LEA R3,死亡笔记”听起来像是“加载地址”,所以它是合理的解释...虽然你可能稍后用某些输入覆盖R3?不知道,很难说没有学习LC-3)。 – Ped7g