ORG 100
Input, Input / Read input value
Store A / Store input value in A
Input / Read input value
Store B / Store input value in B
Input / Read input value
Store C / Store input value in C
Load B / Load value of B
Store Count / Set count for B
LoopA, Load A / Load value of A
Add Z / Add value of Z
Store Z / Store new value of Z
Subt ONE / Decrement count by 1
Store Count / Store new value
Skipcond 400 / Check if Count is negative or zero
Jump LoopA / If Count is positive, repeat loop
Load C / Load value of C
Store Count / Set count for C times
LoopC, Load Z / Load value of Z
Add B / Add value of B
Store Z / Store new value of Z
Subt ONE / Decrement count by 1
Store Count / Store new value of Count
Skipcond 400 / Check if Count is negative or zero
Jump LoopC / Repeat loop if count is positive
Output, Load Z / Load value of Z
Output / Output value of Z
Halt / End program
A, DEC 0 / Variable A
B, DEC 0 / Variable B
C, DEC 0 / Variable C
Z, DEC 0 / Result variable
Count, DEC 0 / Loop counter
ONE, DEC 1 / Constant value 1
END
字符串
我一直被困在循环A中,无法得到z的正确输出。如果你能帮忙的话,我将不胜感激。
1条答案
按热度按时间kb5ga3dv1#
这一点:
字符串
递减累加器中的任何值,在两个循环中都是
Z
的最新值,因此不是您想要递减的值(并存储在Count
中)相反,只需加载计数来替换累加器值:
型
第一个循环计算
Z = A × B
。但是,第二个循环计算Z += B × C
,所以实际上是乘以B
两次,计算Z = (A × B) + (B × C)
而不是Z = A × B × C
。您需要查看第二次乘法
(A × B)
* × *C
,作为第一次循环计算的中间结果A × B
乘以C
。第二个循环需要的是
Z = Z × C
,但是当Z
本身发生变化时,这将很难计算,因此建议执行Z2 = Z × C
-换句话说,使用一个新的变量作为第二个循环乘法答案,同时将Z
固定为(A × B
的)中间结果。如果是我,我会在代码中将
Z
(和Z2
)清零,而不是依赖于DEC 0
初始化-这将允许每个程序运行乘法段不止一次,即如果你愿意的话您使用的是
do ... while (--Count > 0)
循环结构。使用do..while
循环形式在乘以零时会有问题,特别是对于变量B
和C
-如果其中任何一个为零,那么它们将循环65535次。有两种方法可以解决do .. while
周围加上一个保护if语句型
因此,如果
Count
从零开始,只需跳过do,而将Z
保留为0。while () {...}
形式型
因此,在
Count
第一次递减之前测试它。