RISCV разрешающий код операции - PullRequest
0 голосов
/ 14 февраля 2019

Мне нужна помощь с пониманием, как решить эту проблему в RISCV.Укажите инструкцию на языке ассемблера для следующих шестнадцатеричных значений:
Адрес 1000: b3 Адрес 1001: 0b Адрес 1002: 9c Адрес 1003: 41

Я знаю, что должен перейти на двоичный код, и что RISCV имеет младший порядковый номерНо кроме этого я не знаю, как поступить.У меня есть несколько таких проблем, но все остальное я хочу сделать сам.

1 Ответ

0 голосов
/ 14 февраля 2019

Как вы сказали, RISC-V имеет младший порядок, поэтому слово с адресом от 1000 до 1003 имеет значение 0x419c0bb3, в двоичном виде:

01000001100111000000101110110011

Первое, на что нужно обратить внимание, инструкция заканчивается на 0110011,Это соответствует нескольким инструкциям, см. Стр. 104 и 105 в riscv-spec-v2.2.pdf .Для дальнейшего декодирования инструкции я проверяю поле FUNC3 в битах 14-12, это 000.У меня есть несколько возможных инструкций, ADD, SUB или MUL.Теперь я рассмотрю наиболее значимые 7 битов инструкции 0100000.Инструкция SUB.Полная расшифровка инструкции:

FUNC7   rs2   rs1   FUNC3 rd    OPCODE
0100000 11001 11000 000   10111 0110011

В ассемблере это должно быть sub x23,x24,x25.Для проверки ответа лучше всего использовать ассемблер / эмулятор.

...