我想找一个阶乘数字,我首先记忆。(英特尔8085)
编辑:我是初学者。我不知道怎么写它的汇编代码。
伪代码:
input n
fact = 1
loop:
..multiply fact by n
..decrement n
..test n
..jump if not zero to loop
output fact
答案 0 :(得分:4)
首先,如果您希望使用它,最好学习如何编写8085。汇编程序,尤其是旧的8位微处理器,不是你可以只使用固定软件和补丁。
第二,究竟是什么用于数字? 8085具有8位总线,可以使用16位寄存器。如果您限制为16位数字,则可以使用查找表,因为您不能代表9!反正。
第三,如果你以算法方式进行,你可能想先了解一下你用于乘法的内容。 8085没有片上乘法。 (我曾经使用Z80赢得了多精度乘法和除法的竞赛,它具有8085没有的一些特性。特别是,我能够使用备用寄存器组来做一些有用的东西。)
答案 1 :(得分:2)
使用intel 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
所以加4次,结果(即20次)加3次等等...... (5 + 5 + 5 + 5),(20 + 20 + 20),(60 + 60)并将120转换为十六进制...
答案 2 :(得分:2)
使用此程序,您可以找到8位数的阶乘,其答案不超过 24位!
输入在地址位置#2070
中给出,获得的输出在#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
答案 3 :(得分:1)
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!
答案 4 :(得分:0)
此代码将找到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
答案 5 :(得分:-1)
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