【发布时间】:2013-10-11 17:41:38
【问题描述】:
我正在尝试使用旧的汇编语言在 LMC 中编写两个不同的程序。第一个如下:
编写一个 LMC 程序,该程序接受两个输入、一个要倒数的数字和步长值(例如:从 35 倒数 5),直到它达到零。如果序列不以零结束,它应该打印每一步,以及零之前的最后一个数字,但如果数字变为负数,则不应打印该数字。使用 13 和 3 作为输入的示例输出为:13、10、7、4、1。使用 12 和 3 作为输入的示例输出为:12、9、6、3、0。
我尝试过类似的方法:
IN
STO 91
IN
STO 92
IN
STO 93
LDA 91
ADD 92
SUB 93
OUT
HLT
这不起作用
我要写的第二个LMC程序如下:
编写代码来计算三角形的面积和周长。该程序应接受 3 个输入,依次是三角形的底边、高度和第三边。代码应该在输出框中产生 2 个值,第一个数字是面积,第二个数字是周长。 (提示:您可能希望使用 DAT 语句来存储一些值以开始)。
我什至不知道从哪里开始。
任何帮助将不胜感激。
我还有一些示例代码可以提供帮助:
计算周长和面积 - 将 L 和 W 作为输入 先打印周长,然后打印面积。
00 LDA #01;
01 STA 99;
02 IN;
03 STA 98;
04 LDA #00;
05 STA 96;
06 IN;
07 STA 97;
08 ADD 97;
09 ADD 98;
10 ADD 98;
11 OUT;
12 LDA 96;
13 ADD 98;
14 STA 96;
15 LDA 97;
16 SUB 99;
17 STA 97;
18 SKZ;
19 JMP 12;
20 LDA 96;
21 OUT;
22 HLT;
两个数相乘。
00 IN;
01 STA 99;
02 STA 97;
03 IN;
04 STA 98;
05 SUB 90;
06 STA 98;
07 SKZ;
08 JMP 12;
09 LDA 97;
10 OUT;
11 HLT;
12 LDA 97;
13 ADD 99;
14 STA 97;
15 LDA 98;
16 JMP 05;
90 DAT 001;
将第一个数字输入添加到自身, 然后从总数中减去第二个输入
00 IN;
01 STA 90;
02 IN;
03 STA 91;
04 LDA 90;
05 ADD 90;
06 SUB 91;
07 OUT;
08 HLT;
一种从输入到零的计数方法
00 IN;
01 OUT;
02 SUB 98;
03 SKP;
04 JMP 06;
05 JMP 01;
06 HLT;
98 DAT 002;
平方数
00 IN; take input
01 STA 99; save value as a mulitiplier
02 STA 97; save value as multiplicand
03 SUB 90; subtract one from counter
04 STA 98; copy value to counter
05 LDA 97; load our accumulator number
06 ADD 99; Add original number
07 STA 97; store intermediate sum
08 LDA 98; Load counter
09 SUB 90; subtract one from counter
10 STA 98; Store counter value
11 SKZ; skip if counter is at zero
12 JMP 05; othewise, loop back to 5
13 LDA 97; load our squared number
14 OUT; Write output
15 HLT; stop
90 DAT 01; countdown value
【问题讨论】:
-
您需要提供一个程序和一个错误。你还没有真正接近。你有例子可以工作。首先,您需要 2 个输入,但您读取 3 个输入。其次,您需要倒计时,这意味着您需要一个循环,但您没有分支语句。我给你一个提示,你需要使用 BRP。
标签: assembly little-man-computer