aboutsummaryrefslogtreecommitdiff
path: root/semestre 3/architecture des ordinateurs
diff options
context:
space:
mode:
Diffstat (limited to 'semestre 3/architecture des ordinateurs')
-rw-r--r--semestre 3/architecture des ordinateurs/2- Programmation en ASM Mips.md37
-rw-r--r--semestre 3/architecture des ordinateurs/td/25-10-08.md2
-rw-r--r--semestre 3/architecture des ordinateurs/td/25-10-15.md125
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