Сначала вы должны проверить формат, используемый для инструкции ori
:
0011 01ss ssst tttt iiii iiii iiii iiii
Источник: Справочник по инструкции MIPS
sssss
регистр назначения, который является $8 = 01000
ttttt
регистр источника, который является $6 = 00110
ii...
непосредственным операндом, который является 0x20 = ...10 0000
Полученная инструкция выглядит следующим образом:
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, $0, 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