diff options
Diffstat (limited to 'semestre 3/architecture des ordinateurs')
3 files changed, 162 insertions, 2 deletions
diff --git a/semestre 3/architecture des ordinateurs/2- Programmation en ASM Mips.md b/semestre 3/architecture des ordinateurs/2- Programmation en ASM Mips.md index 0e1de16..002c89e 100644 --- a/semestre 3/architecture des ordinateurs/2- Programmation en ASM Mips.md +++ b/semestre 3/architecture des ordinateurs/2- Programmation en ASM Mips.md @@ -335,4 +335,39 @@ Branchement sont en format I **Dans tous les cas, on a besoin de savoir où se trouve l'étiquette pour la coder** |> on a donc besoin de le faire en deux étapes (on les appelle "passe") 1. on s'occupe de toutes les instructions sans traiter les étiquettes -2. on traite les étiquettes après qu'on connait bien tout
\ No newline at end of file +2. on traite les étiquettes après qu'on connait bien tout + +**Revoir la construction des sauts** +## Tableaux, structures +**revoir le début des tableaux** + +Un tableau de taille $n$ prend $n$ fois la taille du type stocké +|> un tableau d'entier prend $4n$ octets + +L'adresse du $i$-ième élément du tableau est l'adresse du début $+ i\times n$ +|> c'est déréférencer `&T[i]` + +On déclare les tableaux comme +```asm +.text +tab: .word 1, 2, 3 # équivalent de int tab[] = {1,2,3}; +``` + +Attention à l'alignement quand on utilise les tableaux ! + +Les structures sont des ensembles de variables +|> on utilise les `.space` pour en initialiser des vides + +**besoin de vérifier si c'est complet** +## Variables locales +Elles ne sont pas au même endroit que les variables globales +|> elles sont dans une zone variable qui contient les infos dynamiques +-> la pile ! +|> création d'un contexte pour chaque fonction +|> contexte sont en LIFO, d'où la pile + +**rattraper la gestion mémoire** +`0x8000 0000` -> égal ou plus grand pour le système +|> ce qui précède `0x8000 0000` est pour l'utilisateur +|> le fond de la partie utilisateur sont les contextes de fonction (la pile !) +-> le sommet de la pile est variable et est dans un registre particulier, le `$29` (stack pointer)
\ No newline at end of file diff --git a/semestre 3/architecture des ordinateurs/td/25-10-08.md b/semestre 3/architecture des ordinateurs/td/25-10-08.md index 45c488e..eb4a9e3 100644 --- a/semestre 3/architecture des ordinateurs/td/25-10-08.md +++ b/semestre 3/architecture des ordinateurs/td/25-10-08.md @@ -68,4 +68,4 @@ chaine: .asciiz "toto" ori $2, $0, 10 syscall -``` +```
\ No newline at end of file diff --git a/semestre 3/architecture des ordinateurs/td/25-10-15.md b/semestre 3/architecture des ordinateurs/td/25-10-15.md new file mode 100644 index 0000000..5046904 --- /dev/null +++ b/semestre 3/architecture des ordinateurs/td/25-10-15.md @@ -0,0 +1,125 @@ +--- +tags: + - sorbonne + - informatique + - architecture-des-ordinateurs + - td +semestre: 3 +--- +```asm +beq $8, $9, label # va à label si $8 == $9 +bne $8, $9, label # va à label si $8 != $9 +blez $8, label # va à label si $8 <= 0 +bltz $8, label # va à label si $8 < 0 +bgez $8, label # va à label si $8 >= 0 +bgtz $8, label # va à label si $8 > 0 +j label # va à label +jr r1 # va à l'adresse mémoire dans r1 +``` + +```asm +.data +a: .word -5 +b: .word 3 +.text +# on commence par le nom de la fonction +main: + lui $8, 0x1001 + lw $9, 0($8) + # if + bne $9, $0, else + # then + lw $9, 0($8) # on recharge à chaque fois qu'on l'utilise + lw $10, 4($8) + addu $9, $9, $10 + sw $9, 0($8) + j endif +else: + lw $9, 0($8) + lw $10, 4($8) + subu $9, $9, $10 + sw $9, 0($8) +endif: + ori $2, $0, 10 + syscall +``` + +```asm +.data +p: .word 10 # 0 -> $9 +q: .word 20 # 4 -> $10 +i: .word 0 # 8 -> $11 +s: .word 0 # 12 -> $12 +.text +main: + lui $8, 0x1001 + # i = p + lw $9, 0($8) + or $11, $0, $9 + sw $11, 8($8) +for: + # i <= q + lw $10, 4($8) + lw $11, 8($9) + slt $13, $10, $11 + bne $13, $0, end_for + # s += i + lw $12, 12($8) + lw $11, 8($8) + addu $12, $12, $11 + sw $12, 12($8) + # i++ + lw $11, 8($8) + addiu $11, $11, 1 + sw $11, 8($8) + j for +end_for: + # printf("%d", s) + ori $2, $0, 1 + lw $12, 12($8) + or $4, $0, $12 + syscall + # exit() + ori $2, $0, 10 + syscall +``` + +```asm +.data +max: .word 0 +tab: .word -2, 1, 5, -7, 42, -9, 0 +.text +main: + lui $8, 0x1001 + ori $12, $0, $8 + addui $8, $8, 4 + # max = tab[0] + lw $9, 4($8) + or $10, $0, $9 + ori $11, $0, $8 + sw $10, 0($12) +while: + # tab[i] != 0 + lw $9, 0($8) + beq $9, 0, end_while + # if tab[i] > max + lw $10, 0($12) + lw $9, 0($8) + slt $10, $10, $9 + beq $10, $0, skip + # max = tab[i] + lw $9, 0($8) + lw $10, 0($12) + or $10, $0, $9 + sw $10, 0($12) +skip: + # i++ + addiu $8, $8, 4 + j while +end_while: + ori $2, $0, 1 + lw $4, 0($12) + syscall + ori $2, $0, 10 + syscall +```
\ No newline at end of file |
