一个8085汇编语言程序,用于查找数字的阶乘

时间:2010-03-16 15:30:40

标签: assembly 8085

我想找一个阶乘数字,我首先记忆。(英特尔8085)

编辑:我是初学者。我不知道怎么写它的汇编代码。

伪代码:

input n
fact = 1
loop:
..multiply fact by n
..decrement n
..test n
..jump if not zero to loop
output fact

6 个答案:

答案 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

的顺序中的2个内存位置
    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