Седов Иван Алексеевич

Рязанский политехнический колледж

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