Я пытаюсь понять приложение MIPS, но меня немного смущают следующие инструкции:
la $k1, off_9FC005A8
lw $k1, (off_9FC005D4 - 0x9FC005A8)($k1)
jr $k1
В моем понимании это будет равнозначно следующему псевдокоду C:
$k1 = *off_9FC005A8;
$k1 = *($k1 + (*off_9FC005D4 - 0x9FC005A8));
Итак, зная следующее:
off_9FC005A8: .word 0x9FC01508
off_9FC005D4: .word 0x9FC011B4
Вы получите:
$k1 = 0x9FC01508;
$k1 = *($k1 + (0x9FC011B4 - 0x9FC005A8));
Остается: $k1 = 0x9FC02114. Однако это смещение находится на полпути к блоку кода, который я уже просмотрел и подтвердил правильность. Значит, мое понимание этих инструкций и адресации памяти ошибочно?