программа на языке ассемблера 8085 для поиска факториала числа - PullRequest
0 голосов
/ 16 марта 2010

Я хочу найти факториал, число, которое я сначала беру в память

изменить: я начинающий. Я не знаю, как писать это ассемблерные коды.

псевдокод:

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

Ответы [ 6 ]

4 голосов
/ 16 марта 2010

Во-первых, вам лучше научиться писать 8085, если вы собираетесь его использовать. Ассемблер, особенно для старых 8-битных микропроцессоров, - это не то, что вы можете просто взять с собой и установить патч.

Во-вторых, что именно вы используете для чисел? 8085 имеет 8-битную шину и может использовать регистры как 16 бит. Если вы ограничены 16-битными числами, вы можете использовать справочную таблицу, поскольку вы не можете представить 9! в любом случае.

В-третьих, если вы делаете это алгоритмическим способом, вы можете сначала посмотреть, что вы используете для умножения. 8085 не имеет встроенного умножения. (Однажды я выиграл конкурс на умножение и деление с множественной точностью, используя Z80, у которого были некоторые функции, которых у 8085 не было. В частности, я мог использовать альтернативный банк регистров, чтобы делать некоторые полезные вещи.)

2 голосов
/ 24 июля 2013

С помощью этой программы вы можете найти факториал 8-битного числа, ответ которого не превышает 24 бит ! Входные данные приведены в адресной ячейке #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
2 голосов
/ 22 ноября 2012

с процессором 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

так что добавьте 5 четыре раза, результат (то есть 20) добавьте три раза и так далее ... (5 + 5 + 5 + 5), (20 + 20 + 20), (60 + 60) и преобразовать 120 в гекс ...

1 голос
/ 01 января 2016
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!

0 голосов
/ 28 августа 2017

Этот код найдет факториал 9. Вы можете найти факториал любого числа до 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
0 голосов
/ 05 мая 2013
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
...