aboutsummaryrefslogtreecommitdiff
path: root/semestre 3/architecture des ordinateurs/td/25-09-17.md
blob: cf812530ac0dd2b5a5e3dd859beb92c9f9179a59 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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 !