Сломать LUI MIPS - PullRequest
       8

Сломать LUI MIPS

0 голосов
/ 02 марта 2019

Я пытаюсь выяснить, как ori t1,100000 ломается в MIPS.MIPS говорит, что это становится.

lui $1,1
ori $1,$1,34464
or $9,$9,$1

Я не уверен, как он получил значение 1 для lui и 34464 для ori.

1 Ответ

0 голосов
/ 02 марта 2019

Если вы преобразуете 100000 в шестнадцатеричный код с помощью любого калькулятора, вы получите

100000 = 0x186a0

Его размер превосходит 16 бит, и в MIPS непосредственное значение не может бытьбольше 16 бит.Мы не можем ввести это значение в одной инструкции.

Посмотрите на разные верхнюю и нижнюю части.

0x186a0 = 0x10000 + 0x86a0
= (0x1 << 16) + 0x86a0 </p>

и

0x86a0 = 34464

Теперь у нас есть все, что требуется для написания кода.

# store 0x10000==1<<16 in an intermediate register with lui (load upper immediate)
# MIPS asm uses $1 (or $at) as intermediate register
lui $1,1
# content of $1 is 0x00010000
ori $1,$1,34464
# nor we can OR this register with t1 (also called $9)
or $9,$9,$1
...