Псевдо-иструкции MIPS, замены
После проведения исследования, что это такое, я обнаружил, что это просто замена способа получения того же результата. Поправьте меня, пожалуйста, если я ошибаюсь.
Пример:
move $s0, $t1
Можно заменить на:
add $s0, $zero, $t1
Вопросы:
Как можно заменить lw
, la
, sw
, bne
?
1 ответ:
Да, инструкция
move
может и заменяется инструкциейadd
.Некоторые сведения о псевдо-инструкциях: MIPS-это архитектура RISC (Reduced Instruction Set Computer), то есть имеется относительно небольшое количество инструкций, которые вы можете использовать. Эта простота приводит к более быстрой производительности, но компромисс заключается в том, что более сложные операции требуют нескольких инструкций. Псевдо-инструкции - это "поддельные" инструкции, представляющие одну или несколько других более сложная операция.
На ваш вопрос:
lw
,sw
, иbne
не являются псевдо-инструкциями. Все они выполняются по одной инструкции сборки MIPS.
la
, или адрес загрузки, это псевдо-инструкция.la
можно разбить наlui
инструкцию иori
инструкцию. В 32-разрядной архитектуре MIPS каждая инструкция, а также размер каждого регистра составляют 32 бита. Таким образом, чтобы сохранить 32-битный адрес, вы должны сначала захватить наиболее значительный (высокий порядок) сначала 16 бит, а затем возьмите наименее значимые (младшего порядка) 16 бит после этого.
lui
, или Load Upper Immediate, берет поле immediate, сдвигает его влево 16 раз и сохраняет во временном регистре ассемблера. Инструкцияori
делает побитовое или на временном регистре и немедленное значение и сохраняет полный адрес в начальном регистре, указанном в инструкцииla
.Edit: для получения адреса строки, например, вы можете использовать этот сегмент кода в своей функции:
la $a0, msg # pseudo-instruction to load the address of the label str
Вы бы также
msg
определили в другом месте:.data msg: .asciiz "This is a string"
После выполнения этого примера в SPIM инструкция
la
преобразуется в:lui $1, 4097 [msg] ori $4, $1, 0 [msg]
$1
является временным регистром ассемблера и$4
является регистромa0
, который был аргументом, переданным в начальную инструкциюla
.Ссылки: MIPS набор инструкций и от просто делать много MIPS. Попробуйте выполнить каждую инструкцию в симуляторе типа QTSPIM и посмотрим, что получится.
Смотрите также: lui 4097 и адрес загрузки