Кодирование команд машинного кода RISC-V

79
7

Что расшифрованная инструкция по сборке RISC-V: 0001100 01010 11100 100 10001 1100011? Из спецификации я знаю, что код операции является инструкцией BLT и rs1 = x28, rs2 = x10.

Но что такое закодированное смещение? imm[12|10:5] - 0001100 = 12, а imm[4:1|11] - 10001 = -8, правильно? Куда пойдет прыжок?

спросил(а) 2021-01-19T15:13:13+03:00 8 месяцев назад
1
Решение
64

.word 0x18ae48e3

blt x28,x19,hello
blt x28,x19,hello
blt x28,x19,hello
blt x28,x19,hello
blt x28,x19,hello
blt x28,x19,hello
blt x28,x19,hello
blt x28,x19,hello
blt x28,x19,hello
blt x28,x19,hello
blt x28,x19,hello
blt x28,x19,hello
blt x28,x19,hello
hello:
blt x28,x19,hello
blt x28,x19,hello
blt x28,x19,hello

00000000 <hello-0x38>:
0: 18ae48e3 blt x28,x10,990 <hello+0x958>
4: 033e4a63 blt x28,x19,38 <hello>
8: 033e4863 blt x28,x19,38 <hello>
c: 033e4663 blt x28,x19,38 <hello>
10: 033e4463 blt x28,x19,38 <hello>
14: 033e4263 blt x28,x19,38 <hello>
18: 033e4063 blt x28,x19,38 <hello>
1c: 013e4e63 blt x28,x19,38 <hello>
20: 013e4c63 blt x28,x19,38 <hello>
24: 013e4a63 blt x28,x19,38 <hello>
28: 013e4863 blt x28,x19,38 <hello>
2c: 013e4663 blt x28,x19,38 <hello>
30: 013e4463 blt x28,x19,38 <hello>
34: 013e4263 blt x28,x19,38 <hello>

00000038 <hello>:
38: 013e4063 blt x28,x19,38 <hello>
3c: ff3e4ee3 blt x28,x19,38 <hello>
40: ff3e4ce3 blt x28,x19,38 <hello>

00000001001111100100001001100011
00000001001111100100000001100011
11111111001111100100111011100011

0 000000 1001111100100 0010 0 1100011
0 000000 1001111100100 0000 0 1100011
1 111111 1001111100100 1110 1 1100011

вы видите, как извлечь эти цифры из инструкции, как указано в дате?

0 0 000000 0010 0
0 0 000000 0000 0
1 1 111111 1110 0

0 0000 0000 0100 = 0x0004
0 0000 0000 0000 = 0x0000 (<-- hello label here)
1 1111 1111 1100 = 0x1FFC

Ладно, так что здесь не магия, иногда есть смещение, часто есть смещение. Часто адрес следующей инструкции - это то, где применяется немедленное действие. Например, с ARM адрес двух инструкций впереди, где применяется смещение.

from your instruction
0001100 01010 11100 100 10001 1100011
0 001100 01010 11100 100 1000 1 1100011
010011001000 (add implied zero for bit 0)
0 1001 1001 0000 = 0x990

ответил(а) 2021-01-19T15:13:13+03:00 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема