Программа на языке ассемблера 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