1

Я хотел бы сделать несколько байт манипуляции с помощью набора инструкций MIPS.Байт Манипуляция для набора команд MIPS

  • У меня зарегистрировать $S0 который имеет 0x8C2E5F1E и зарегистрировать $S1 который имеет 0x10AC32BB.
  • Я хотел бы сохранить второй байт $S0, 5F, в третий байт $S1, AC.

Моей логикой было бы сохранить байт регистра $S0 в другой регистр, сдвинуть его на желаемый байт. Тогда я бы и зарегистрировал $S1 с 0xFF00FFFF. Наконец, я бы просто или два регистра. Как это звучит? Правильно ли это? Любой лучший способ?

Любые предложения или решения будут оценены.

ответ

1

Для версии 2 и более поздних версий, MIPS, включает в себя команду битовое поле Insert, который принимает биты, начиная с наименее значимый из одного регистра и размещение их в указанном диапазоне во втором регистре , Таким образом, ваш байтовый ввод может быть выполнен следующим образом:

// rotating right one byte rather than shift to preserve data 
// without using an additional register 
ROTR $S0, $S0, 8; 
// insert LSbits from $S0 into $S1 starting at bit 16 
// with size of 8 bits 
INS $S1, $S0, 16, 8; 
+0

Отличный, точный ответ, который я искал, потому что я не знал, что такая инструкция существует. Однако ваша инструкция имеет четыре операнда ?! поэтому какой формат он рассматривает? релиз 2 также добавляет новый формат? Кроме того, Павел, если вы знаете, что вкратце отличается от всех выпусков, я знаю, что теперь они выпустят 5, я думаю. – Salchem

+0

@ user2994448 Формат имеет стандартный 6-разрядный основной код операции, затем регистр источника [rs], затем регистр назначения [rt] (который также является источником), затем два 5-битных немедленных поля, затем 6-разрядный второстепенный код операции; поэтому он похож на формат SRA с третичным кодом операции [bits 25:21], замененным на rs, и поле rd заменено на 5-битное мгновенное или в формате SRAV с третичным кодом операции [bits 10: 6], замененным на 5-битное немедленное и первое поле заменяется немедленным. –

+0

@ user2994448 Что касается различных выпусков/версий MIPS ISA, это может быть порядочным вопросом сам по себе (не уверен, что StackOverflow будет хорошим местом для такого вопроса). R5 добавляет хост страницы таблицы аппаратного обеспечения и выделяет модули (лицензированные с базовой архитектурой. - MultiThreading и DSP ASE стали модулями, SIMD и Virt.) Добавлены из Application Specific Extensions. Нет R4, R3 включает кодирование переменной длины microMIPS. Я * думаю * микроконтроллер ASE пришел в R3, но Rev. 1.01 руководства датирован 21 марта 2011 года. До R2 были MIPS I, II, III и IV (IV == R2 ??). –

1

Рассмотрим следующий пример:

ori $t0 $s0 0xFF00 #extract byte 2 
sll $t0 $t0 8 #shift to third byte 

#create mask to clear third byte 
lui $t1 0xFF 
not $t1 $t1 

and $s1 $s1 $t1 #clear third byte 
or $s1 $s1 $t0 #set third byte 
+0

Я знаю это. Я спрашиваю, является ли это правильной логикой для манипулирования байтом или существует гораздо более короткий путь, такой байт перемещения или что-то в этом роде. – Salchem