Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2014, 04:37   #1
Nata Golden rose
Пользователь
 
Регистрация: 03.12.2008
Сообщений: 20
По умолчанию Помогите пожалуйста разобраться с программкой

Добрый день, помогите пожалуйста разобраться только неделю назад начали изучать Ассемблер и тут дали простую задачку а я пыталась сделать но что то не получается, программка должна быть без рекурсии и без регистров а потом тоже самое с использованием регистров и рекурсии, а я даже первую часть не знаю как сделать как прибавить (-1)^n? Извините за глупые вопросы

F0=0, F1 = 1

Fn=Fn-1 +Fn-2 +(-1)^n


Код:
.data
num: .word   0 : 12        # "array" of 12 words to contain fib values
size: .word  12             # size of "array" 
      .text
      la   $t0, num        # load address of array
      la   $t5, size        # load address of size variable
      lw   $t5, 0($t5)      # load array size
      li   $t2, 0           # 1 is first and second number
      li   $t3, 1
      li   $t4, -1
      li   $t5, 1
      add.d $f0, $f2, $f4
      sw   $t2, 0($t0)      # F[0] = 0
      sw   $t3, 4($t0)      # F[1] = F[0] = 1
      sw   $t4, 5(&t0)      
      addi $t1, $t5, -2     # Counter for loop, will execute (size-2) times
loop: lw   $t3, 0($t0)      # Get value from array F[n] 
      lw   $t4, 4($t0)      # Get value from array F[n+1]
      add  $t2, $t3, $t4    # $t2 = F[n] + F[n+1]
      sw   $t2, 8($t0)      # Store F[n+2] = F[n] + F[n+1] in array
      addi $t0, $t0, 4      # increment address of Fib. number source
      addi $t1, $t1, -1     # decrement loop counter
      bgtz $t1, loop        # repeat if not finished yet.
      la   $a0, num        # first argument for print (array)
      add  $a1, $zero, $t5  # second argument for print (size)
      jal  print            # call print routine. 
      li   $v0, 10          # system call for exit
      syscall               # we are out of here.
        
#########  routine to print the numbers on one line. 
      .data
space:.asciiz  " "          # space to insert between numbers
head: .asciiz  
      .text
print:add  $t0, $zero, $a0  # starting address of array
      add  $t1, $zero, $a1  # initialize loop counter to array size
      la   $a0, head        # load address of print heading
      li   $v0, 4           # specify Print String service
      syscall               # print heading
out:  lw   $a0, 0($t0)    
      li   $v0, 1           # specify Print Integer service
      syscall              
      la   $a0, space       # load address of spacer for syscall
      li   $v0, 4           # specify Print String service
      syscall               # output string
      addi $t0, $t0, 4      # increment address
      addi $t1, $t1, -1     # decrement loop counter
      bgtz $t1, out         # repeat if not finished
      jr   $ra              # return
Nata Golden rose вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста разобраться. Ryjik Общие вопросы C/C++ 0 22.10.2009 14:07
помогите разобраться пожалуйста Aronax Общие вопросы C/C++ 2 04.07.2009 11:14
Помогите пожалуйста разобраться в С++. radikayupov1710 Общие вопросы C/C++ 0 30.01.2009 21:16
Пожалуйста помогите разобраться) Atij1 Общие вопросы C/C++ 4 13.04.2008 20:32
Помогите!!!Пожалуйста!!С программкой в Паскале... Yulichkaa Паскаль, Turbo Pascal, PascalABC.NET 1 16.03.2008 03:06