【发布时间】:2015-06-24 20:32:01
【问题描述】:
我正在LC3机器上写一个汇编程序。
我的汇编程序是一个 LC3 程序,它将 R2 和 R3 相乘并将结果存储在 R1 中。
这是我的源代码(带有 cmets)
;Sets pc to this address at start of program
.ORIG x3000
;R1 will store the result lets clear it(ANd with 0)
AND R1,R1,x0
;R2 will be multiplied by R3, let's clear both of them
AND R2,R2,x0
AND R3,R3,x0
;Test case 4 * 3 = 12;
ADD R2,R2,4
ADD R3,R3,3
;Add to increment zone
LOOP Add R1,R1,R2;
;Decrement the counter, in this case the 3 or R3
ADD R3,R3,x-1
BrP LOOP
HALT
.END
我的测试用例乘以 4 * 3。结果应该是 12,应该存储在 R1 中。然而,当我在我的 LC3 模拟器中运行这个程序时,这就是我得到的 output
R3 最后保存正确的值,但 R1 保存 -1.... 有人看到我的代码有问题吗?我确保在开始时清除 R1,并继续将 R3 添加到 R1 并将结果存储到 R1,而在这种情况下,计数器 R3 或 3 大于零。
【问题讨论】:
-
我只是运行你的程序,这不是我得到的。你把断点放在哪里了?你应该把它放在 HALT 指令下。否则你的值可能会被 HALT 陷阱覆盖。
-
另请注意,您没有在循环中的任何地方使用 R2。
-
断点不只是为了调试吗?为什么要在 HALT 指令处设置断点? HALT 不是已经停止程序了吗?
-
我修复了我的 R2 以确保我将 R1 + R2 的结果存储在 R1 中。现在好看吗?
-
HALT 不会停止我拥有的模拟器中的 CPU,它实际上是一条伪指令(TRAP HALT)。这是一台学习机器,它不会执行任何实际有用的结果,因此要检查您的程序是否运行良好,您需要在它完成之前停止它或在某处打印结果。
标签: assembly simulator cpu-registers machine-code lc3