Программа на языке ассемблера 8085 для поиска факториала числа

Я хочу найти факториал число, которое я беру память в первую очередь.(Intel 8085)

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

псевдокод:

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

6 ответов

Решение

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

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

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

С процессором 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 в гекс...

С помощью этой программы вы можете найти факториал 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
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!

Этот код найдет факториал из 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
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
Другие вопросы по тегам