J'essaie de comprendre une application MIPS, mais je suis un peu confus sur les instructions suivantes:besoin d'éclaircissements sur la mémoire MIPS adressage pv
la $k1, off_9FC005A8
lw $k1, (off_9FC005D4 - 0x9FC005A8)($k1)
jr $k1
Dans ma compréhension cela équivaudrait à la pseudo suivante code C:
$k1 = *off_9FC005A8;
$k1 = *($k1 + (*off_9FC005D4 - 0x9FC005A8));
savoir donc les éléments suivants:
off_9FC005A8: .word 0x9FC01508
off_9FC005D4: .word 0x9FC011B4
Vous obtiendrez:
$k1 = 0x9FC01508;
$k1 = *($k1 + (0x9FC011B4 - 0x9FC005A8));
Départ: $ k1 = 0x9FC02114. Cependant ce décalage est à mi-chemin à travers un bloc de code que j'ai déjà regardé et confirmé pour être correct. Alors, est-ce que ma compréhension de ces instructions et de l'adressage de la mémoire est erronée?
Ok, mais cela ne me laisse toujours pas $ k1 contenant 0x9FC02114? Ce qui ne semble pas être un endroit valable pour sauter à. – PeterBelm
Je comprends maintenant, tout se résume à la manière stupide dont IDA sort l'assemblage, essayant d'être intelligent mais à moins que vous ne reconnaissiez le comportement, il est assez obscur. L'instruction réelle est: lw $ k1, 0x2C ($ k1) – PeterBelm