Итак, согласно нескольким источникам, на которые я смотрел, невозможно использовать 32-битное немедленное выполнение в 32-битных mips, потому что машинные инструкции 32-битные, а немедленные значения хранятся в машинных инструкциях. Насколько мне известно, наибольшее значение может быть 16-битным, чтобы оставить место для остальной части инструкции. Но в MARS 4.5 mips эта инструкция работает нормально (с настройками по умолчанию):
.text
ori $t1, $0, 0xffffffff #load 32-bit pattern into $t1
Это собирает и работает нормально, что сбивает меня с толку, поскольку я думаю, что этого не должно быть по вышеупомянутым причинам (как 32-битный машинный код может немедленно поддерживать 32-битный?). Я предполагаю, что ori в MARS действительно запускает псевдо-инструкцию, когда значение поля немедленного действия выше 0xffff, что lui и ori должны загружаться регулярно, но я не уверен. Может кто-нибудь пролить свет на это?
addi
, расширяют действие сразу, поэтомуaddi $t1, $0, 0xffffffff
действительно работает. Между прочим, эту инструкцию ассемблер мог бы использовать вместоori
здесь. - person Jester   schedule 15.03.2017