Получение результата от мульта в mips

Я новичок в ассемблере, и меня очень смущает умножение.

Я читал краткое руководство здесь (мертвая ссылка , веб-архив здесь)

В нем говорится, что после того, как я использую mult $t0, $t1, результаты сохраняются в Hi и Lo, я понимаю, что это специальные регистры для mult и div, но как мне получить к ним доступ?

Допустим, я делаю mult $t0, $t1, где $t0 и $t1 равны 2. Как мне получить результат? (4)


person Nick    schedule 23.03.2014    source источник
comment
Есть специальные инструкции для доступа к этим регистрам. См. здесь   -  person pat    schedule 24.03.2014
comment
Я прочитал эту ветку, все еще немного запутавшись, я попытался найти пример умножения, но не смог, не могли бы вы сказать мне, как я могу получить доступ к результату вопроса выше?   -  person Nick    schedule 24.03.2014
comment
Используйте mfhi $t0, чтобы переместить HI в t0, и mflo $t1, чтобы переместить LO в t1. Обратите внимание, что с помощью этих инструкций вы можете переместить HI и LO в любой из GPRS. Вы также можете перемещать значения в HI и LO с помощью mthi и mtlo. Подробности см. В справочном руководстве по эксплуатации MIPS.   -  person pat    schedule 24.03.2014


Ответы (2)


Вы должны использовать MFHI и MFLO для перемещения данных из HI и LO в регистр общего назначения.

Справочная информация

person a.ndrea    schedule 24.11.2015

например:

      .globl main
       main:
            li $t0,3
            li $t1,2
            mult $t0,$t1

Условие mult умножает 2 32 бита со знаком и формирует 64-битный результат. Чтобы получить к нему доступ, сначала сохраните значения в регистрах с помощью команд. Это сохраняет значения HI, LO в регистры общего назначения.

             mfhi $t2
             mflo $t3

а затем распечатайте эти значения, используя оператор печати:

             move $a0,$t2
             li $v0,1
             syscall
 
             move $a0,$t3
             li $v0,1
             syscall  

чтобы получить вывод на консоль.

Чтобы получить результат умножения, вы можете использовать другую команду, т.е.

            mul $t2,$t0,$t1 

где вы сохраняете произведение значений в регистре 1 и регистре 0 в регистре 2, однако это портит HI и LO.

person Sukaina    schedule 26.03.2021