Risc-v инструкция, которую я не понимаю - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть этот код риска:

lui S0, 0x1234
ori S1, S0, 0x5678
add S2, S1, S1

и вопрос меня спрашивает: "Что держит регистр S2?" Вопрос объясняет, что lui и я цитирую:

" Загрузить нижнее половинное слово непосредственного imm в верхнее половинное слово регистра rt. Нижние биты регистра установлены в 0 "

Я не знаю, как «скомпилировать эту программу» и что означает 0x1234? Спасибо

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

"LUI помещает значение U-непосредственного значения в верхние 20 битов регистра назначения rd, заполняя младшие 12 битов нулями." - riscv-spec-v2.2

так, lui s0, 0x1234

s0 должно быть 0x01234000

0 голосов
/ 15 ноября 2018

Принимайте инструкции по одному.Сначала load-верхний-немедленный , возьмите немедленный (0x1234) и «загрузите» его в верхнюю половину регистра S0 и обнулите нижнюю половину:

lui S0, 0x1234 

S0 = 0x12340000

Далее или немедленное , мы ИЛИ значение в S0 со значением 0x5678:

ori S1, S0, 0x5678

   0x12340000
OR 0x00005678
   ----------
   0x12345678 = S1

Наконец add , мыдобавляем значение в S1 к себе или, эквивалентно, умножаем значение в S1 на 2:

add S2, S1, S1

  0x12345678
+ 0x12345678
  ----------
  0x2468ACF0 = S2

Таким образом, значение в регистре S2 равно 0x2468ACF0.Обратите внимание, я предполагаю 32-битные слова.Немедленное похоже на константу, поэтому lui - это инструкция, которая помещает константу в верхнюю половину регистра.В сочетании с ori вы можете загрузить целое слово в регистр.

...