.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