aboutsummaryrefslogtreecommitdiff
path: root/semestre 3/architecture des ordinateurs/td
diff options
context:
space:
mode:
authorAnhgelus Morhtuuzh <william@herges.fr>2025-10-05 16:28:33 +0200
committerAnhgelus Morhtuuzh <william@herges.fr>2025-10-05 16:28:33 +0200
commit85fbaa4d9381e435be129aa7bc4ea6a472acb2b2 (patch)
treea5d0149a7e70ec1ec24edd2fc0a6c2971e94130a /semestre 3/architecture des ordinateurs/td
parent4c4b68ac62514cad87e023b877571d1952588d4e (diff)
Cours du 29 au 3 octobre
Diffstat (limited to 'semestre 3/architecture des ordinateurs/td')
-rw-r--r--semestre 3/architecture des ordinateurs/td/25-10-01.md78
1 files changed, 78 insertions, 0 deletions
diff --git a/semestre 3/architecture des ordinateurs/td/25-10-01.md b/semestre 3/architecture des ordinateurs/td/25-10-01.md
new file mode 100644
index 0000000..7ef3507
--- /dev/null
+++ b/semestre 3/architecture des ordinateurs/td/25-10-01.md
@@ -0,0 +1,78 @@
+---
+tags:
+ - sorbonne
+ - informatique
+ - architecture-des-ordinateurs
+ - td
+semestre: 3
+---
+## Exercice 1
+Deux sections :
+1. `.data` -> contient les variables globales (dites statiques)
+2. `.text` -> contient les données du programme
+
+Le point d'entrée est la première instruction de `.text`
+
+Se termine avec le syscall exit :
+```asm
+ori $2, $0, 10
+syscall
+```
+## Exercice 2
+### Arithmétique
+Les opcodes finissant par `u` sont pour les unsigned
+Les opcodes avec `i` indiquent qu'il utilisera des immédiats
+
+On préfère utiliser les versions unsigned
+
+Format R = tous ceux qui ne finissent pas par `i`
+|> travaillent avec les registres
+|> immédiat est sur 16 bits
+`mult`, `multu`, `div`, `divu` n'ont pas de registre de destination, ils vont toujours dans `HI` et `LO`
+
+Format I = tous ceux qui finissent par `i`
+|> travaillent avec les registres et un immédiat
+
+`addiu $12, $18, 15` -> `0b001001 10010 01100 0000 0000 0000 1111`
+`addu $12, $18, $4` -> `0b001001 10010 00100 01100 000 000 00000`
+### Logique
+`sra` et `srav` sont des opcodes logiques même s'il y a arithmétique dans leur nom
+|> ils étendent le signe
+
+Les opcodes *ne* finissant *pas* par `v` sont l'équivalent des `i` en arithmétique
+|> mais il n'y a que des format R
+|> pas d'immédiat, mais des `sh` (shifts)
+
+`sll $9, $8, 8` avec `0x0000000F` dans `$8` donne `0x00000F00`
+`srl $9, $8, 28` avec `0xF0000000` dans `$8` donne `0x0000 000F`
+`sra $9, $8, 28` avec `0xF0000000` dans `$8` donne `0xFFFF FFFF`
+`andi $9, $8, 0x000F` avec `0x0000 0036` donne `0x000 0006`
+|> immédiat est sur 8 bits en logique
+
+Pour mettre `8` dans `$8`, on fait : `ori $8, $0, 0x0000` ou `andi $8, $0, 0xFFFF`
+Pour copier `$10` dans `$8`, on fait : `or $8, $0, $10` ou `addu $8, $10, $0`
+## Exercice 3
+`ori $8, $0, 0x1234`
+
+```asm
+ori $8, $0, 0x1234
+sll $8, $8, 16
+ori $8, $8, 0x5678
+```
+on peut aussi faire
+```asm
+lui $8, 0x1234 # met 0x1234 dans les bits de poids forts
+ori $8, $8, 0x5678
+```
+
+```asm
+.data
+
+.text
+ ori $8, $0, 0x34
+ ori $9, $0, 34
+ addu $10, $8, $9
+
+ ori $2, $0, 10
+ syscall
+```