Проблема с кодом сборки - PullRequest
0 голосов
/ 22 марта 2011

Я хочу иметь программу, которая принимает 2 ввода от пользователя и умножает друг друга, используя сложение (например, 3 * 2 добавляет 2 три раза), но я не знаю, что с ним не так. Заранее спасибо

.text    
.globl main
main:
  li           $v0, 5                       # Code for read int.
  syscall                                   # Ask the system for service.
  move         $s0, $v0                     # Copy to safer location.

  # Ask for another number.
  li           $v0, 5                       # Code for read int.
  syscall                                  # Ask the system for service.

loop:
  add  $s0,$s0,$s0
  addi $v0,$v0,-1
  bne $v0,$zero,loop                                  

  li      $v0, 1
  syscall                                 # print out actual sum
  li      $v0, 10                         # Code for program exit.
  syscall

Ответы [ 2 ]

4 голосов
/ 22 марта 2011

Что вы думаете add $s0,$s0,$s0 делает?

Это удваивает число. Если бы количество итераций было 6, то оно удвоило бы первое значение шесть раз.

Это домашнее задание? Если да, добавьте этот тег к вопросу.

0 голосов
/ 22 марта 2011

Вы удваиваете значение каждый раз, не добавляя к нему начальное значение, как хотите.Это означает, что он становится $ s0 = 6, $ s0 = 12, $ s0 = 24, $ s0 = 48, $ s0 = 96 и т. Д.

Используйте временный регистр для хранения начального значения $ s0 ($t0) и когда вы делаете добавление, делайте это, как добавить $ s0 $ s0 $ t0 (или что-то в этом роде), и оно будет делать то, что, по вашему мнению, делает ваш код

...