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

Я пытался изучать ассемблер (MIPS32) самостоятельно, и я следую этой бесплатной онлайн-программе, которая учит этому.

Существует упражнение, в котором меня просят скопировать ori $ 8, 6, 0x20 в $ 9, используя только or, ori и shift.К сожалению, ответ не предоставлен, и я понятия не имею, как это сделать.Может ли кто-нибудь помочь мне или указать мне правильное направление?Спасибо.

1 Ответ

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

Сначала вы должны проверить формат, используемый для инструкции 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
...