问题–编写一个汇编语言程序,以使用8085微处理器计算前n个自然数的总和。
例子 –
Input : 04H
Output : 0AH
as 01+02+03+04 = 10 in decimal => 0AH
用于计算前n个自然数之和的公式为 。
算法 –
- 使用n作为输入,对其进行递增以获得n + 1。
- 将n乘以n + 1。
- 将获得的乘积除以2。
在8085微处理器中,不存在直接指令将两个数字相乘,因此乘法是通过重复加法完成的,因为4×5等于4 + 4 + 4 + 4 + 4(即5次)。
输入:04H
添加04H 5次
产品:14H(20 10 )
同样,在8085微处理器中,不存在直接除以两个数字的指令,因此除以重复的减法即可完成。
输入14H
继续从输入中减去2,直到其减少到0。
由于必须在14H变为0之前执行10 10次减法,因此商为10 10 => 0AH。
脚步 –
- 将数据从存储位置(201BH,任意选择)加载到累加器中
- 将此数据移到B
- 将累加器中的值加1并将其移至寄存器C
- 用0初始化累加器
- 乘法:继续将B加到累加器上。 B必须加的次数等于C的值
- 用00H初始化B。 B将存储除法的商
- 用02H初始化C。这是除法的除数
- 除法:继续从A减去C直到A变为0。对于每个减法,将B加1。
- 最终答案在B中。将其移至A。然后将A的值存储在201CH中(再次任意选择)
201CH包含最终答案。
ADDRESS | LABEL | MNEMONIC |
---|---|---|
2000H | LDA 201BH | |
2001H | ||
2002H | ||
2003H | MOV B, A | |
2004H | INR A | |
2005H | MOV C, A | |
2006H | MVI A, 00H | |
2007H | ||
2008H | LOOP1 | ADD B |
2009H | DCR C | |
200AH | JNZ LOOP1 | |
200BH | ||
200CH | ||
200DH | MVI C, 02H | |
200EH | ||
200FH | MVI B, 00H | |
2010H | ||
2011H | LOOP2 | INR B |
2012H | SUB C | |
2013H | JNZ LOOP2 | |
2014H | ||
2015H | ||
2016H | MOV A, B | |
2017H | STA 201CH | |
2018H | ||
2019H | ||
201AH | HLT |
将n的值存储在201BH中。该总和可在201CH处找到。