Как скопировать машинную инструкцию в регистр, просто используя shift или ori?

for (i = 0; i <= (listOfLinks.size()); i++) {

должен быть

for (i = 0; i < (listOfLinks.size()); i++) {

в строке 145.

0
задан 5 March 2019 в 02:44
поделиться

1 ответ

Сначала вы должны проверить формат, используемый для инструкции ori:

0011 01ss ssst tttt iiii iiii iiii iiii

Источник: Справочник инструкций MIPS

  • sssss регистр назначения, который является $8 = 01000
  • ttttt регистр источника, который является $6 = 00110
  • ii... непосредственным операндом, который является 0x20 = ...10 0000 [1117 ]

Полученная инструкция выглядит следующим образом:

0011 01ss ssst tttt iiii iiii iiii iiii
0011 0101 0000 0110 0000 0000 0010 0000

, которую мы конвертируем в шестнадцатеричное для использования в нашем коде: 0x35060020

, поскольку инструкция ori принимает 16 бит для непосредственного операнда, мы можем объединить его с простым сдвигом влево, чтобы заполнить старшие 16 бит сначала 0x3506, а затем добавить младшие 16 бит другой командой ori.

ori $9, [112], 0x3506 # insert upper 16 bits of instruction
# 0000 0000 0000 0000 0011 0101 0000 0110

sll $9, $9, 0x10   # shift 16 bits to higher part of register
# 0011 0101 0000 0110 0000 0000 0000 0000

ori $9, $9, 0x0020 # insert lower 16 bits of instruction
# 0011 0101 0000 0110 0000 0000 0010 0000
0
ответ дан Minn 5 March 2019 в 02:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: