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/.gitignore1
-rw-r--r--semestre 3/architecture des ordinateurs/1- Représentation de l'information.md86
-rw-r--r--semestre 3/architecture des ordinateurs/td/25-09-17.md70
3 files changed, 151 insertions, 6 deletions
diff --git a/semestre 3/architecture des ordinateurs/.gitignore b/semestre 3/architecture des ordinateurs/.gitignore
new file mode 100644
index 0000000..a136337
--- /dev/null
+++ b/semestre 3/architecture des ordinateurs/.gitignore
@@ -0,0 +1 @@
+*.pdf
diff --git a/semestre 3/architecture des ordinateurs/1- Représentation de l'information.md b/semestre 3/architecture des ordinateurs/1- Représentation de l'information.md
index ee2a51c..8ef0fc2 100644
--- a/semestre 3/architecture des ordinateurs/1- Représentation de l'information.md
+++ b/semestre 3/architecture des ordinateurs/1- Représentation de l'information.md
@@ -135,6 +135,9 @@ Le codage est la correspondance entre le représentation externe de l'informatio
|> c'est comment on souhaite utiliser l'information qui définit quel codage on utilise !
-> est ce qui définit les grandes classes de processeur (Intel, ARM, RISC...)
+> [!NOTE] Les bases $B$ sont toujours strictement supérieures à 1 !
+> Sinon, on ne peut représenter que $0$
+
Tout entier naturel $N$ peut être exprimé comme une somme de multiples de puissance de la base $B$
|> $N = \sum_{i}a_iB^i$ avec $\forall i, a_i < B$ -> permet de convertir une notation dans la base $B$ vers $N$
|> notation condensée est $a_{n-1}\ldots a_0$
@@ -161,8 +164,7 @@ L'hexadécimal (de 0 à F) permet de compacter le binaire
> [!danger] Interprétation
> Le codage ne permet toujours pas d'interpréter les données brutes !
-## Entiers
-### Entiers naturels
+## Entiers naturels
Comme les mots sont de taille bornée, il n'est pas possible de tout représenter
Sur $p$ symboles en base $B$, on peut représenter tous les entiers dans $[0,B^p-1]$
@@ -248,10 +250,13 @@ Les additions / soustractions sont triviales
Attention à l'overflow !
|> arrive quand on dépasse la taille du bit
-|> est détectable à l'aide de la retenu -> revoir le moodle pour ça
+|> est détectable à l'aide de la toute dernière retenu -> si elle est présente, on dépasse !
+|> la retenu est ignorée quand on dépasse -> est de l'arithmétique modulaire sur $2^n$
-Les décalages servent à multiplier / diviser (voir le diapo)
-### Entiers relatifs
+Décaler à gauche de $n$ revient à multiplier par la base $B^n$
+|> $(a_{p-1}\ldots a_0)_b\times 2^n = (a_{p-1}\ldots a_0)_b << n = (a_{p-1}\ldots a_0\underbrace{0\ldots0}_n)_b$
+|> $(a_{p-1}\ldots a_0)_b/2^n = (a_{p-1}\ldots a_0)_b >> n = (a_{p-1}\ldots a_{n})$
+## Entiers relatifs
On les appelle les nombre entiers signés
La représentation classique en signe/module (i.e. un bit pour le signe, le reste pour le module)
@@ -265,6 +270,10 @@ où $(k_i)$ sont les bits représentés
-> s'appelle représentation des entiers relatifs en complément à deux
|> avec $n$ bits on peut donc représenter $[2^{n-1},2^{n-1}-1]$
+Exemples :
+- $-1$ = `0b111`
+- 1 = `0b001`
+
Pour prendre l'opposer, on prend son complémentaire et on lui ajoute 1
|> est appelé le complément à deux
|> le complémentaire de `0b1001` est `0b0110`
@@ -276,4 +285,69 @@ $$ = \mathrm{0b}1\ldots1 = -1 $$
Donc, on a que $\bar N$ doit être décalé de 1, d'où le plus 1
|> cela est dû au fait que l'intervalle ne soit pas symétrique
-Voir le moodle pour la suite
+Pour étendre un mot relatif de $p$ bits à $n$ bits ($n > p$), on doit :
+- ne pas toucher aux $p$ bits
+- on recopie le $p-1$ bits (bit de poids fort) sur tous les bits "vides"
+
+Exemples :
+- `0b01` devient `0b0001`
+- `0b10` devient `0b1110`
+
+**Preuve :**
+$$ N_p = -a_{p-1}2^{p-1}+\sum^{p-2}_{i=0}a_i2^i $$
+$$ N_{p+1} -a_{p-1}2^p+a_{p-1}2^{p-1}+\sum^{p-2}_{i=0}a_i2^i = a_{p-1}(-2^p+2^{p-1})+\sum^{p-2}_{i=0}a_i2^i $$
+$$ N_{p+1} = -a_{p-1}2^{p-1}+\sum^{p-2}_{i=0}a_i2^i = N_p $$
+car $-2^p + 2^{p-1} = -2^{p-1}$.
+
+L'addition fonctionne de la même manière que pour les entiers naturels
+La soustraction est l'addition de l'opposé
+
+Pour détecter le débordement sur entier relatif, on regarde les deux dernières retenues
+|> si $C_{out,n-1}$ est différent de $C_{out,n-2}$, alors il y a un débordement
+
+Exemples :
+- `0b0110` + `0b0011` = `0b1001` avec $C_{out,n-1} = 0$ et $C_{out,n-2} = 1$, donc débordement en relatif ! (besoin de poser le calcul pour s'en rendre compte)
+- `Ob110` + `0b1011` = `0b1001` avec $C_{out,n-1} = C_{out,n-2} = 1$, donc pas de débordement en relatif !
+## Chaînes de caractères
+Elles sont majoritairement codées à l'aide de l'ASCII et de l'UTF-8
+|> ASCII est le plus vieux
+
+ASCII n'est que sur 7 bits (et non sur 8)
+|> le bit de poids fort vaut toujours 0
+|> est représenté dans un tableau à double entrée -> colonne = quartet de poids faible, ligne = quartet de poids fort
+|> `0x0A` en ASCII est l'équivalent de `LF`et `0x0D` est le `CR`
+-> besoin d'étendre le code ASCII pour représenter les autres tables
+|> le bit de poids fort sert à ça, mais c'est peu pratique car n'est pas universel
+
+Une chaîne de caractère est une succession de caractère se terminant par `\0` qui est `0x00` en ASCII
+-> **ne pas oublier le `\0` à la fin**
+
+> [!warning] `"123"` $\neq 123_d$
+## Rationnels
+Un rationnel est $\frac ab$ où $a\in\mathbb{Z}$ et $b\in\mathbb{Z}^*$
+|> contient une partie entière et une partie fractionnaire -> est le développement décimale
+
+Pour représenter d'une manière exacte un rationnel dans une base $B$, on fait :
+$$ \sum^{\infty}_{i=-\infty}a_iB^i $$
+Les $(a_i)$ sont les coefficients dans la base $B$.
+|> on n'est pas obligé de mettre les 0 non significatifs
+**Cette représentation n'est pas bornée**
+
+La partie entière est $(a_i)_{i\in\mathbb{N}}$
+La partie fractionnaire est $(a_i)_{i\in\mathbb{Z}^*_-}$
+
+Si $a>0$ et $a,b$ premier entre eux, alors $a/b$ est unique
+|> son développement décimal est toujours fini ou infini périodique
+|> est vrai dans toutes les bases $B$
+
+Voir le moodle pour la méthode par multiplications successives
+
+Deux manières de représenter : virgule fixe et virgule flottante
+
+Voir le moodle pour le codage en virgule fixe
+
+Virgule fixe est très simple à utiliser : il suffit de rajouter un facteur lors des opérations
+|> les opérations fonctionnent pareilles que pour les autres représentations
+|> les détections de l'overflow fonctionnent aussi
+
+Voir le moodle pour la représentation en virgule flottante \ No newline at end of file
diff --git a/semestre 3/architecture des ordinateurs/td/25-09-17.md b/semestre 3/architecture des ordinateurs/td/25-09-17.md
new file mode 100644
index 0000000..cf81253
--- /dev/null
+++ b/semestre 3/architecture des ordinateurs/td/25-09-17.md
@@ -0,0 +1,70 @@
+---
+tags:
+ - sorbonne
+ - informatique
+ - architecture-des-ordinateurs
+ - td
+semestre: 3
+---
+$127_d$ prend 7 bits
+$32_d$ prend 6 bits (car le nombre max dans $n$ bits est $2^n-1$ !)
+
+Un mot hexa de taille $n$ permet de coder $16^n$ valeurs, soit toutes les valeurs entières dans $[0;16^n-1]$
+
+| Mot binaire de 8 bits | Décimal | Mot hexa de 8 bits |
+| --------------------- | ------- | ------------------ |
+| `0b0000 1010` | 10 | `0x0A` |
+| `0b0000 0010` | 2 | `0x02` |
+| `0b0001 0000` | 16 | `0x10` |
+| `0b0011 1001` | 57 | `0x3B` |
+| `0b1000 0001` | 127 | `0x81` |
+| `0b0001 0111` | 23 | `0x17` |
+| `0b0101 1011` | 91 | `0x5B` |
+| `0b0010 1001` | 41 | `0x29` |
+| `0b1010 1010` | 170 | `0xAA` |
+$5B_h+17_h = 72_h$ -> 7 bits
+$71_h+B5_h = 126_h$ -> 9 bits
+
+`0x2B` + `0x95` = `0xC0` -> pas de dépassement en interprétation « entier naturel »
+`0xC8` + `0x6D` = `0x35` -> dépassement en interprétation « entier naturel »
+`0x8B57` + `0xA34F` = `0x2EA6` -> dépassement en interprétation « entier naturel »
+
+`0b1001 0011` - `0b1010 0011` = `0b1111 0000` -> dépassement en interprétation « entier naturel »
+`0b1100 1111` - `0b1011 0011` = `0b0001 1100` -> pas de dépassement en interprétation « entier naturel »
+
+`M1 & M2` = `0b1000`
+`M1 | M2` = `0b1101`
+`~M1` = `0b0110`
+`M1 ^ M2` = `0b0101`
+
+`M3 & 0x0000 FF00`
+`M3 ^ M3 = 0x0000 0000`
+`M3 ^ 0x0000 00FF` -> permet d'inverser les bits 0 à 7 (i.e. les 8 premiers)
+
+`M7` = `0b01010011`
+`M7 << 1` = `0b10100110`
+`M7 << 2`= `0b01001100`
+`M7 >> 4`= `0b00000101`
+
+`<<` réduit le nombre entier naturel et `>>` l'augmente !
+
+| Base 16 | Signe | Base 2 | Opposé base 2 | Opposé base 16 |
+| -------- | ----- | ----------------------- | ----------------------- | -------------- |
+| `0x0B24` | + | `0b0000 1011 0010 0100` | `Ob0111 0100 1101 1100` | `0x74DC` |
+| `0xABCD` | - | `0b1010 1011 1100 1101` | `0b0101 0100 0011 0011` | `0x5433` |
+| `0xFFFF` | - | `0b1111 1111 1111 1111` | `Ob0000 0000 0000 0001` | `0x0001` |
+`0b01101001` + `0b10000000` = `0b11101001`
+|> est valide pour des naturels (pas de retenu sortante)
+|> est valide pour des relatifs (les deux dernières retenues sont identiques)
+
+`0b0110` + `0b0100` est valide en naturel, mais pas en relatif
+
+`127 - 128 = -1` -> pas de dépassement
+`120 - (- 150) = 270 > 127` -> dépassement de capacité
+`-64 + 127 + 1 = 64` -> pas de dépassement de capacité
+|> on n'aurait pas pu réaliser `-64 + 128` directement car 128 ne rentre pas sur 8 bits
+|> si on avait fait `opposer(64 - 128)`, on aurait pu le faire
+
+`0xFF` sur 32 bits, c'est `0xFFFFFFFF`
+|> sa valeur en décimal (relatif en complément à 2), c'est $-1_d$
+|> si c'est un naturel, c'est plus du tout la même chose !