un programme en langage assembleur 8085 pour trouver le factoriel d'un certain nombre

StackOverflow https://stackoverflow.com/questions/2455690

  •  20-09-2019
  •  | 
  •  

Question

Je veux trouver un numéro qui factoriels je prends la mémoire en premier. (Intel 8085)

edit: je suis débutant. Je ne sais pas comment l'écrire est des codes d'assemblage.

pseudo-code:

input n
fact = 1
loop:
..multiply fact by n
..decrement n
..test n
..jump if not zero to loop
output fact
Était-ce utile?

La solution

En premier lieu, vous feriez mieux d'apprendre comment écrire 8085 si vous prévoyez de l'utiliser. Assembleur, en particulier pour les anciens microprocesseurs 8 bits, n'est pas quelque chose que vous pouvez simplement prendre le logiciel et patch mis en conserve.

En second lieu, exactement ce que vous utilisez pour les numéros? Le 8085 a un bus à 8 bits et peut utiliser en tant que registres de 16 bits. Si vous êtes limité à un nombre de 16 bits, vous pouvez utiliser une table de consultation, comme vous ne pouvez pas représenter 9! de toute façon.

En troisième lieu, si vous le faites la manière algorithmique, vous voudrez peut-être regarder d'abord dans ce que vous utilisez pour la multiplication. Le 8085 n'a pas la multiplication sur puce. (Une fois, je gagné un concours pour la multiplication multiple précision et la division en utilisant la Z80, qui avait quelques caractéristiques de la 8085 n'a pas eu. J'ai pu, en particulier, d'utiliser la banque de registre autre de faire des choses utiles.)

Autres conseils

avec un processeur Intel 8085, en prenant un nombre de 8 bits, dans ce cas cinq, je peux écrire ceci:

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

le factoriel 5 serait alors 78 dans l'hexagone. la logique est .. 5! = 5x4x3x2x1

il faut donc ajouter 5 quatre fois, le résultat (i.e. 20) ajouter trois fois et ainsi de suite ... (5 + 5 + 5 + 5), (20 + 20 + 20), (60 + 60) et le convertir en hexadécimal 120 ...

Avec ce programme, vous pouvez trouver factoriel d'un nombre de 8 bits dont la réponse ne dépasse pas 24bits ! L'entrée est donnée dans l'emplacement d'adresse #2070 et la sortie est obtenue est de 2 emplacements de mémoire dans l'ordre #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
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

Cela peut vous aider. Ceci est pour 7 !.

Ce code se trouve le factoriel de 9. Vous pouvez trouver factoriel d'un nombre jusqu'à 9 en changeant la valeur DB.

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top