C 汇编语言8085程序,用于计算前20个偶数(8位)之和
一种汇编语言C 汇编语言8085程序,用于计算前20个偶数(8位)之和,c,assembly,C,Assembly,一种汇编语言8085程序,用于计算前20个偶数(8位)之和,并将结果存储在6000和6001位置。我试过了,但没能完成 MVI c,00H MOV B, C MOV D, 00H NEXT: INX, H 首先用伪代码写出来: sum := 0 ; init sum num := 2 ; init first even number count := 20
8085
程序,用于计算前20个偶数(8位)之和,并将结果存储在6000
和6001
位置。我试过了,但没能完成
MVI c,00H
MOV B, C
MOV D, 00H
NEXT:
INX, H
首先用伪代码写出来:
sum := 0 ; init sum
num := 2 ; init first even number
count := 20 ; init loop counter
loop:
sum := sum + num ; accumulate sum
num := num + 2 ; next even number
count := count - 1 ; decrement loop count
IF count > 0 THEN GOTO loop ; if loop count still positive then next num
store sum -> 6000/6001 ; else we're done - store the result
从这里开始,将伪代码转换为8085操作码应该非常简单。不要使用循环,因为现在使用汇编最常见的原因是速度
n
偶数2,4,6,
之和等于n(n+1)
。(当然,当你从0,2,4,…
开始时,n(n+1)-2
)测试一个数字在汇编中是偶数还是奇数只是测试最小重要位的问题。因此,您只需要有一个增加值的循环,并重复测试该位。如果是,则将其添加到您的总数中
sum = 0
value = 0
found = 0
loop:
if found == 20
goto done
if value & 1
sum += value
found = found + 1
value = value +1
goto loop
done:
print sum
好吧,为了获得最佳性能,手动计算结果,然后用两条左右的指令将其存储在内存中。第一个偶数不是2,而是。@Devulus No,@PaulR这正是我们教育系统的问题所在:强迫学生给出“正确”的答案,而不是奖励自己思考&做研究。想到别的东西是不好的,这真令人难过。我不是在这里反对你,呃:-)意思很重要:奥托能够思考问题的动机和隐含意义,而不仅仅是字面上的理解,这是一项重要的“生活技能”。当然,对于科学/数学/工程等,你需要同时做到这两个方面!;-)@意思很重要,我的观点是正确的。我怀疑仅仅写几行代码将420的值存储在6000:6001就可以获得及格分数。@PaulR请参阅我对上述教育系统的评论。我同意,那太简单了。但实施我给出的公式应该能为他赢得100%的赞誉。顺便说一句,现在编写汇编最常见的原因是什么:速度。因此,使用循环是不明智的。@我想,这很重要,如果theacher想要强制执行循环示例,他应该选择不同的课程。:)我同意,这将是最好的解决方案,如果老师没有给出明确的指示,比如
。。。使用循环
则答案应该被接受和称赞。我的解决方案有一个问题,似乎不包括乘法:-)您始终可以使用加法实现乘法。;)您可以更进一步,不使用任何指令—只需使用数据指令将420置于目标地址。