【发布时间】:2012-07-02 11:04:17
【问题描述】:
我有一个带有计数器的 LC-3 程序。我可以使用 TRAP x21 将计数器打印到屏幕上。但是,如果计数器编号为两位数,我的程序将无法运行。
示例:9 可以完美打印,但 19 则不能。
我猜在打印包含计数器的寄存器之前,我需要一个循环,它将通过除以 2 来截断数字(与十进制除以 10 相同,但二进制为 2)。然后我想我会打印 digit1, digit0。我有一个问题,我如何划分 LC-3?右移?对于这个问题,这似乎太难了,超出了我的知识范围。
请帮忙。
0010 000 000000011 ; R0 <= x30 which is for
0001 000 000 0 00 010 ; R0 <= R0 + R2
1111 0000 00100001 ; TRAP x21
1111 0000 00100101 ; TRAP x25
0000000000110000
【问题讨论】:
-
如果要生成十进制输出,则需要除以 10,而不是 2。鉴于 LC-3 的指令集非常有限,除以 10 例程会非常痛苦.柜台可以有多大? (例如,总是小于 20?小于 100?)
-
如果计数器值的范围不是很受限制,我想我建议编写具有以下结构的代码。 16 位值的长度不能超过 5 个十进制数字。留出 5 个寄存器来保存这些数字。 (假设 R3..R7。)将它们全部设置为 0。现在:减去 10000;如果结果 >= 0,则增加 R3 并循环,否则重新添加 10000;减去 1000;如果结果 >= 0,则增加 R4 并循环,否则重新添加 1000;等等当你完成后,一个一个地输出结果数字,跳过前导零。低效但有效。