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

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

ASSEMBLER 8-bit SIMULATOR

Занятие #7: создание процедуры

вычисления чисел Фибоначчи

https://e1m7.github.io/work/

Создание процедуры вычисления числа Фибоначчи заключается в том, чтобы по введенному числу найти число Фибоначчи под этим номером

 




Для вычисления нового числа нам надо два предыдущих, кроме случая 0,1 и 2 числа (это 0, 1 и 1).

число 0  1  1  2  3  5  8  13 21 34 55 ...
номер 0  1  2  3  4  5  6  7  8  9  10 ...
3 4 5 6
A=1
B=1
C=A+B=2
A=1
B=2
C=A+B=3
A=2
B=3
C=A+B=5
A=3
B=5
C=A+B=8
A=B, B=C A=B, B=C A=B, B=C A=B, B=C
  JMP start
  
start:

  MOV A, 8
  CALL fibonachi
  CALL print_number
  HLT

fibonachi:
; input
; A = number
; output
; A = number

  PUSH B
  PUSH D
  SUB A, 1    ; A=A-1=8-1=7
  MOV D, A    ; D=A (7 действий)
  MOV A, 1    ; A=1 первое число
  MOV B, 1    ; B=1 второе число 
.loop95:
  CMP D, 0
  JE .exit96
  ; Поиск нового числа: А=A+B
  ; A=1 | A=A+B=2 | A=1
  ; B=1 | B=1     | B=2
  ADD A, B    ; A=A+B=1+1=2
  PUSH A      ; Сохраним значение А
  MOV A, B    ; A=B
  POP B       ; B=сохраненное значение А
  DEC D       ; D=D-1
  JMP .loop95
.exit96:
  POP D
  POP B
  RET

Задача №5

1) Доработать процедуру, чтобы она принимала 0 (ответ 0)

2) Доработать процедуру, чтобы она реагировала на большое число (какое?) и выдавала ответ "слишком большое число"

  • print_string
  • print_number

  • print_char

  • remainder_division
  • remdiv10

  • halt
  • string_to_number
  • number_to_string
  • factorial
  • fibonachi

Замечание

В нашем распоряжении есть процедуры:

assembler8_07

By Ivan Sedov

assembler8_07

  • 523