Je suis un étudiant qui apprend des mips et j'ai quelques questions sur le fonctionnement de l'accès mémoire et du chargement.Quelques questions simples à propos de mips et de la mémoire?
Dans notre premier devoir nous sont donnés cette macro à utiliser
sw $a0, numargs
lw $t0, 0($a1)
sw $t0, arg1
lw $t0, 4($a1)
sw $t0, arg2
lw $t0, 8($a1)
sw $t0, arg3
Le travail de cette macro est d'obtenir les arguments que nous charge dans MIPS. Ça marche, mais j'étais plus curieux de savoir comment ça fonctionnait car le professeur ne l'a jamais vraiment expliqué et nous a juste dit de l'utiliser. Donc, dans le champ "arguments du programme", je vais entrer trois arguments. Est-ce que MIPS utilise instantanément a0 comme le nombre d'arguments et c'est pourquoi nous pouvons stocker cela dans notre propre variable?
Ensuite, chaque argument a sa propre adresse mémoire. Est-ce que le registre $ a1 combine tous les 4 derniers bits des adresses mémoire des arguments? De cette façon, nous sautons 4 bits à chaque fois pour arriver à un nouvel argument et ensuite stocker cet argument dans notre propre variable.
charger aussi mot me embrouille un peu
Par exemple, dans ce bout de code
lw $t0, arg2
lb $t1, 3($t0)
move $a0, $t1
addi $v0, $0, 11
syscall
Il fonctionne correctement. J'ai mis à t1 pour être le dernier octet de t0 (donc le dernier caractère de l'argument) et il imprime correctement. Donc, si l'argument est 1234, il imprime 4.
Cependant lorsque je tente d'ajouter
sll $t0, $t0, 8
après la première ligne, il ne fonctionne pas. Je ne comprends pas pourquoi. Je change $ t0 par 8 bits. Donc le dernier octet est effacé et "3" devrait être le dernier octet et ce qui est imprimé. Mais ça me donne une erreur.