0

我想找到一个我首先记忆的数字。(intel 8085)

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

伪代码:

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

6 回答 6

4

首先,如果您希望使用它,最好学习如何编写 8085。汇编器,尤其是对于旧的 8 位微处理器,不是你可以只使用罐装软件和补丁的东西。

其次,你到底用什么来表示数字?8085 有一个 8 位总线,可以使用 16 位寄存器。如果您仅限于 16 位数字,则可以使用查找表,因为您不能表示 9!反正。

第三,如果你用算法的方式来做,你可能想先看看你用什么来做乘法。8085 没有片上乘法。(我曾经使用 Z80 赢得了多精度乘法和除法竞赛,它具有 8085 所没有的一些功能。特别是,我能够使用备用寄存器组来做一些有用的事情。)

于 2010-03-16T15:50:48.263 回答
3

使用此程序,您可以找到答案不超过 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
于 2013-07-24T07:12:52.193 回答
2

使用英特尔 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 。 ..

于 2012-11-21T23:39:46.920 回答
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!。

于 2016-01-01T12:43:06.710 回答
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
于 2017-08-28T15:12:20.877 回答
-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
于 2013-05-05T04:52:01.363 回答