Вам необходимо очистить регистр перед использованием la в MIPS? - PullRequest
0 голосов
/ 22 октября 2019

Нас учат всегда очищать регистр перед его использованием или обращаться с ним так, как будто он уже содержит данные, которые могут повлиять на операцию, которую мы пытаемся выполнить с этим регистром. Если я использую инструкцию la, перезаписывает ли она все, что было в этом регистре, чтобы не имело значения, если в нем уже есть данные?

Может ли операция or или операция andсделать то же самое, что и la? Есть ли лучший способ загрузить адрес, чем la? Это то, что я чаще всего вижу для операций такого типа, но я чувствую, что, возможно, однажды, прежде чем использовать or вместо.

Я знаю, что некоторые инструкции являются псевдоинструкциями и не так быстры или желательны. Какой метод предпочтительнее?

Ответы [ 2 ]

4 голосов
/ 22 октября 2019

la - это псевдоинструкция, так что каждый ассемблер должен решать, как и как он хочет это реализовать. Но я бы сказал, что он обычно реализуется как lui + ori или lui + addiu. Обе эти комбинации будут влиять на все биты регистра назначения без какой-либо зависимости от старого значения. (Они начинаются с lui)

Нас учат всегда очищать регистр перед его использованием

Это звучит как странный совет. Очистите регистр, если нужно, иначе не делайте. MIPS не имеет частичных регистров, таких как x86.

Установка регистра на 0 непосредственно перед установкой какого-либо другого значения просто загромождает ваш исходный код и замедляет вашу программу. Два доступа в регистр только для записи в строке бессмысленны.

Есть ли лучший способ загрузить адрес, чем la?

Нет, не совсем. Это самый удобный способ. И если ассемблер не делает глупостей, он почти всегда будет так же эффективен, как и любой метод с ручным кодированием. (За исключением использования преимуществ битов смещения в инструкции lw, но MARS не предоставляет способа сделать это, кроме жесткого кодирования числовых адресов. См. Комментарии.)

0 голосов
/ 22 октября 2019

Вместо использования la чаще используется addi. Вы всегда делаете одно из этих двух, потому что если вы не сделаете их, переменные будут иметь мусор внутри них, а не конкретные значения. or или and должны использоваться только в условии условия.

...