Bonjour à tous,
Je me présente; je suis un étudiant en 2ème année de Licence en Informatique.
Je ne suis pas sûr d'être dans la bonne rubrique, mais bref, je viens à vous car j'ai un problème de compréhension avec un exercice d'architecture des ordinateurs. Il s'agit d'un programme en langage assembleur MIPS.
La prof nous à donné un premier programme en C++ :
Aucun problème pour comprendre le code en C++, mais par contre pour l'autre code j'ai vraiment du mal avec les registres sp et fp, "stack pointer" et "frame pointer". J'ai cherché pas mal de temps sur le web mais je suis pas parvenu à trouver une explication me permettant de comprendre ce programme ^^.Code:int bar (int arg1, int arg2) { return (arg1+arg2); } void main () { int i=2; int j=0; j = bar(i,j); } Qui se traduit par celui-ci en langage assembleur: .text .globl bar bar: addiu $sp,$sp,-8 sw $fp,4($sp) move $fp,$sp sw $4,8($fp) sw $5,12($fp) lw $3,8($fp) lw $2,12($fp) nop addu $2,$3,$2 move $sp,$fp lw $fp,4($sp) addiu $sp,$sp,8 j $31 nop .globl main main: addiu $sp,$sp,-32 sw $31,28($sp) sw $fp,24($sp) move $fp,$sp li $2,2 # 0x2 sw $2,16($fp) sw $0,20($fp) lw $4,16($fp) lw $5,20($fp) jal bar nop sw $2,20($fp) move $sp,$fp lw $31,28($sp) lw $fp,24($sp) addiu $sp,$sp,32 j $31 nop
Pour commencer, je connais plus ou moins leur fonction, mais surtout, je comprends absolument pas l'utilité des lignes type "move $fp,$sp" ou le fait de devoir stocker des registres pour les recharger juste après, enfin bref, si quelqu'un pouvait m'expliquer les principales étapes et les fonctionnements de ce code ca me sauverait !
Merci d'avance !
-----