Perché shifti di 2 bit a destra?
Io pensavo a qualcosa del genere
unsigned int jmp_code = (addr_code & 0x03FFFFFF) | 0x08000000;
ma non penso ancora di aver compreso appieno il problema.
Non mi hai ancora detto con quale sistema e compilatore C stai lavorando.