在没有递增或递减指令的情况下对 1 到 100 的整数求和(并且不使用高斯公式)?
Sum integers from 1 to 100 without increment or decrement instructions (and without using Gauss's formula)?
为 Intel 8085 编写汇编语言程序
微处理器计算N个自然数之和,
也就是说,ΣN = 1+2+3+ … +(N-1)+N.
尽可能多地满足限制条件:
- 不使用公式 N*(N+1) / 2
- 不使用任何递增和递减指令
像 INR、DCR、INX 和 DCX
- 不使用内存地址读写数据
输出结果(假设累加器寄存器为
相同)
我的代码是:
START: LDA 3000H
MOV B, A
INR A
MOV C, A
MVI A, 00H
LOOP1: ADD B
DCR C
JNZ LOOP1
MVI C, 02H
MVI B, 00H
LOOP2: INR B
SUB C
JNZ LOOP2
MOV A,B
STA 3001H
HLT
我已经尝试并制作了程序,但使用了所有这些约束,而问题要求不要使用它们。所以我怀疑是否可以不使用这些来制作程序。
我认为下面的代码满足所有条件:
START:LDA 3000H
MVI B, 00H
MVI C, 00H
MVI L, 01H
LOOP:MOV H, A
MOV A, C
ADD L
MOV C, A
MOV A, B
ADD C
MOV B, A
MOV A, H
SUB L
JNZ LOOP
MOV A, B
HLT
它不使用guass公式而是一个一个地添加,而不是使用自增自减指令,它使用加减指令。结果存储在累加器寄存器中。
题目说总和为100
或0x64
,这将导致无法存储在8位累加器中的100*(100+1)/2 = 5050
或0x13BA
。在那种情况下,我们可以将结果保存在寄存器对中,比如 HL
.
MVI A,64H ; A <- n
MVI C,01H
MVI D,00H
MVI E,00H
MVI H,00H
MVI L,00H
LOOP: MOV E,A ; E <- n
DAD D ; HL <- HL + n
SUB C ; n <- n-1
JNZ LOOP
HLT
开头的初始化指令是使用 MVI
编写的,以便更清晰,并且可以轻松转换为高效指令。
为 Intel 8085 编写汇编语言程序 微处理器计算N个自然数之和, 也就是说,ΣN = 1+2+3+ … +(N-1)+N.
尽可能多地满足限制条件:
- 不使用公式 N*(N+1) / 2
- 不使用任何递增和递减指令 像 INR、DCR、INX 和 DCX
- 不使用内存地址读写数据 输出结果(假设累加器寄存器为 相同)
我的代码是:
START: LDA 3000H
MOV B, A
INR A
MOV C, A
MVI A, 00H
LOOP1: ADD B
DCR C
JNZ LOOP1
MVI C, 02H
MVI B, 00H
LOOP2: INR B
SUB C
JNZ LOOP2
MOV A,B
STA 3001H
HLT
我已经尝试并制作了程序,但使用了所有这些约束,而问题要求不要使用它们。所以我怀疑是否可以不使用这些来制作程序。
我认为下面的代码满足所有条件:
START:LDA 3000H
MVI B, 00H
MVI C, 00H
MVI L, 01H
LOOP:MOV H, A
MOV A, C
ADD L
MOV C, A
MOV A, B
ADD C
MOV B, A
MOV A, H
SUB L
JNZ LOOP
MOV A, B
HLT
它不使用guass公式而是一个一个地添加,而不是使用自增自减指令,它使用加减指令。结果存储在累加器寄存器中。
题目说总和为100
或0x64
,这将导致无法存储在8位累加器中的100*(100+1)/2 = 5050
或0x13BA
。在那种情况下,我们可以将结果保存在寄存器对中,比如 HL
.
MVI A,64H ; A <- n
MVI C,01H
MVI D,00H
MVI E,00H
MVI H,00H
MVI L,00H
LOOP: MOV E,A ; E <- n
DAD D ; HL <- HL + n
SUB C ; n <- n-1
JNZ LOOP
HLT
开头的初始化指令是使用 MVI
编写的,以便更清晰,并且可以轻松转换为高效指令。