Параметры инструкции MIPS Assembler

почему такая инструкция как

mul   $t1, $v0 , 4 

оценивает как ожидалось. Но

mul   $t1, 4 , $v0 

приводит к синтаксической ошибке!

Интересно, почему первый работает, потому что mul работает только с регистрами по умолчанию, поэтому я ожидаю, что будет работать только такое решение.

li   $t1, 4             # set $t1 = 4
mul   $t1, $v0 , $t1      # set $t1 = 4 * n

Я использую симулятор SPIM.


person Martin K.    schedule 10.05.2010    source источник


Ответы (2)


Хорошо, я бы посоветовал посмотреть вывод кода операции. Возможно, умножение на 4 заменяется на добавление или, возможно, сразу же для ускорения. Версия 4,reg не может быть обнаружена с помощью этой «оптимизации», и поэтому она выдает ошибку.

person Michael Dorgan    schedule 10.05.2010
comment
Мой первый ответ был совершенно неправильным, этот должен быть намного лучше :) - person Michael Dorgan; 11.05.2010
comment
Как работает такой процесс обмена и почему он не заботится о 4, если он заменен? - person Martin K.; 11.05.2010
comment
sll reg,2 равносильно умножению на 4 без использования дополнительного регистра. Я предполагаю, что, возможно, ассемблер сделал это за вас и хотел, чтобы вы дважды проверили вывод кода операции, чтобы быть уверенным. - person Michael Dorgan; 11.05.2010

Это приводит к синтаксической ошибке просто потому, что MIPS поддерживает только псевдоинструкцию mul [rs] [rt] [imm], а не mul [rs] [imm] [rt]. Я предполагаю, что это делается для согласованности, потому что в MIPS нет реальной инструкции, которая поддерживает непосредственное значение в середине инструкции.

person Zach Langley    schedule 15.05.2010