Я пытаюсь понять приложение 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.Однако это смещение находится посередине блока кода, который я уже рассмотрел и подтвердил, что он правильный.Так ли неверно мое понимание этих инструкций и адресации памяти?