Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 汇编语言8085程序,用于计算前20个偶数(8位)之和_C_Assembly - Fatal编程技术网

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置于目标地址。