我想找到一个我首先记忆的数字。(intel 8085)
编辑:我是初学者。我不知道如何编写它的汇编代码。
伪代码:
input n
fact = 1
loop:
..multiply fact by n
..decrement n
..test n
..jump if not zero to loop
output fact
首先,如果您希望使用它,最好学习如何编写 8085。汇编器,尤其是对于旧的 8 位微处理器,不是你可以只使用罐装软件和补丁的东西。
其次,你到底用什么来表示数字?8085 有一个 8 位总线,可以使用 16 位寄存器。如果您仅限于 16 位数字,则可以使用查找表,因为您不能表示 9!反正。
第三,如果你用算法的方式来做,你可能想先看看你用什么来做乘法。8085 没有片上乘法。(我曾经使用 Z80 赢得了多精度乘法和除法竞赛,它具有 8085 所没有的一些功能。特别是,我能够使用备用寄存器组来做一些有用的事情。)
使用此程序,您可以找到答案不超过 24 位的 8 位数字的阶乘!输入在地址位置中给出#2070
,输出按顺序在 2 个内存位置中获得#2074
#2073
#2072
LHLD 2070
ANI 00
MOV C,L
MOV D,A
MOV E,A
XCHG
DCR C
JZ EXPT
JM EXPT
MOV B,C
L1: DAD D
JNC BAK1
INR A
BAK1: DCR C
JNZ L1
L3: DCR B
JZ STOP
MOV C,B
XCHG
LXI H,0000
L2: DAD D
JNC BAK2
INR A
BAK2: DCR C
JNZ L2
JMP L3
EXPT: MVI A,01
STA 2072
JMP END
STOP: SHLD 2072
STA 2074
END: HLT
使用英特尔 8085 处理器,采用 8 位数,在本例中为 5,我可以这样写:
mvi b,05
mov c,b
dcr b
l1: mov d,b
mvi a,00
l2: add c
dcr d
jnz l2
mov c,a
dcr b
jnz l1
hlt
5 的阶乘将是十六进制的 78。逻辑是.. 5!= 5x4x3x2x1
所以将 5 相加四次,结果(即 20)相加 3 次,依此类推... (5+5+5+5), (20+20+20), (60+60) 并将 120 转换为 hex 。 ..
MVI B, 07h
LXI H, 0007h
LXI D, 0007h
DCR B
LOOP1:
MOV C, B
LXI H, 0
LOOP:
DAD D
DCR C
JNZ LOOP
MOV E, L
MOV D, H
DCR B
JNZ LOOP1
HLT
这可能会对您有所帮助。这是7!。
此代码将找到 9 的阶乘。您可以通过更改 DB 中的值来找到最多 9 的任何数字的阶乘。
LHLD 2090
MOV C,L
MOV D,A
MOV E,A
XCHG
DCR C
MOV B,C
L1:DAD D
JNC B1
INR A
B1: DCR C
JNZ L1
L2 : DCR B
JZ END
MOV C,B
XCHG
LXI H,0000
JMP L1
END:SHLD 2092
STA 2094
HLT
#ORG 2090H
#DB 09H
Org 0000h
Mov dptr,#8000h
Mov a,@dptr
Mov r0,a
Mov r1,#01h
Mov b,r1
L1:mul ab
Dec r0
Mov b,r0
Cjne r0,#00h,l1
Mov r2,a
H:sjmp h
End