Седов Иван Алексеевич
Рязанский политехнический колледж
ASSEMBLER 8-bit SIMULATOR
Занятие #6: создание процедуры
вычисления факториала

https://e1m7.github.io/work/
Создание процедуры вычисление факториала заданного числа предполагает ввод числа, для которого надо найти
1!=1
2!=1*2=2
3!=1*2*3=6
4!=1*2*3*4=24
5!=1*2*3*4*5=120 (максимум)
6!=1*2*3*4*5*6=720 (переполнение)
Мы можем вводить числа: 1, 2, 3, 4 и 5.
Для нормальной работы процедуры надо использовать ранее созданные процедуры: print_number и remdiv10
factorial:
; input
; A = number
; output
; A = number!
PUSH D
MOV D, A ; D=A (4)
CMP A, 0 ; Проверка: A=0?
JE .exit88 ; (да) переход .exit88
MOV A, 1 ; A=1 (начало вычисления)
.loop88:
CMP D, 1 ; Сравнение: D=1?
JE .exit89 ; (да) переход .exit89
MUL D ; (нет) A=A*D
DEC D ; D=D-1
JMP .loop88
.exit88:
MOV A, 1 ; A=1 (ответ)
.exit89:
POP D
RETЗадача №4
1) Доработать процедуру, чтобы она обрабатывала 0 (факториал для 0 равен 1)
2) Доработать процедуру, чтобы при вводе числа больше 5 (6,7,8,...) она выдавала надпись "слишком большое число"

- print_string
-
print_number
-
print_char
- remainder_division
-
remdiv10
- halt
- string_to_number
- number_to_string
- factorial
Замечание
В нашем распоряжении есть процедуры:
assembler8_06
By Ivan Sedov
assembler8_06
- 394