- Selon la modèle de Von Neumann, un ordinateur est composée de :
- Une mémoire principale : Permet de stocker les informations (programmes et données).
- Un microprocesseur : Chargé d'interpréter et d'exécuter les instructions d'un programme.
- Interfaces d'entrées et sorties E/S : Permet au microprocesseur de communiquer avec les périphériques externes.
- Bus d'adresses et données : Ensemble de fils conducteurs ou broches qui transporte des signaux binaires.
Examen d'Architecture des ordinateurs SMI (S4) Juillet 2023
Examen PDF
Questions de cours
- Quelles sont les différentes composantes d'un ordinateur? Expliquer leur fonctionnalités.
- A quoi sert la segmentation de la mémoire ?
- La segmentation est une méthode qui permet de diviser la mémoire en segments (CS, DS, SS, EX).
- Qu'est ce qu'un registre ?
- Un registre est une mémoire de petite taille rapide permet de stocker temporairement des données, instructions ou adresses.
- Qu'est ce qu'une pile ?
- Une pile est une zone mémoire et une pointeur qui pointe sur le sommet de la pile.
- Quels sont les registres utilisés pour manipuler une pile ?
- Registre SS (Stack Segment) segment pile : Registre qui conserve l'adresse de la pile.
- Registre SP (Stack Pointer) pointeur pile : Registre qui pointe sur le sommet de la pile.
- Quelles sont les instructins utilisées pour manipuler une pile ?
- Il existe deux instructions pour manipuler une pile :
- PUSH registre : Empiler le contenu de registre sur le sommet de la pile.
- POP registre : Retire la valeur en haut de la pile et la place dans le registre spécifié.
Correction
Correction
Correction
Correction
Correction
Correction
Exercice 1
- Donner les commandes debug, avec la syntaxe complète qui permettent de faire les taches suivantes :
- Afficher le contenu de la mémoire à l'adresse par défaut en tant que :
- Octets en hexadécimal - Octets en ASCII - Instructions
- Pour afficher le contenu de la mémoire à l'adresse par défaut en tant que octets en hexadécimal et octets en ASCII, il faut utiliser la commande:
- Pour afficher le contenu de la mémoire à l'adresse par défaut en tant que instructions, il faut utiliser la commande:
- Remplir de 55 le premier Ko du segment N 073F.
- On a : 1Ko = 1024 octets, ce qui correspond à 400 en hexadécimal. Ainsi, pour remplir 1Ko, il faut remplir de l'offset de départ jusqu'à (départ + 400 - 1). Selon le professeur qui enseigne ce cours de 2022 à 2025, le segment commence à l'offset 0100. Par conséquent, pour remplir 1Ko, on remplit de 0100 à 400. Le segment de travail étant 073F, la commande pour remplir de 55 de 073F:0100 à 073F:0400 est :
- Remarque : Cette réponse dépend de l'enseignant. Certains documents indiqueraient que le segment débute à 0000 (donc de 0000 à 03FF pour 1Ko), mais selon le professeur en charge de ce cours (2022-2025), le segment commence à 0100, ce qui modifie la plage de remplissage.
- Placez les caractères "bonne chance" au début de segment N 073F.
- Le début de segment 073F est l'offset 0100, donc pour placez "bonne chance" il faut utiliser la commande :
- Vérifier que ces caractères sont bien rangés en mémoire.
- Pour vérifier si ces caractères sont bien rangés en mémoire, il faut utiliser la commande :
- Entrer le code B4 4C CD 21 à l'adresse 073F:0100h
- Pour entrer le code B4 4C CD 21, il faut utiliser la commande :
- Détérminer les instructions correspondant au code précédent.
- Pour détérminer les instructions correspondant au code, il faut utiliser la commande :
- Le code B4 4C correspondent a MOV AH, 4Ch et le code CD 21 correspondent a INT 21h.
- B4 4C se trouve dans l'adresse 073F:0100 et CD 21 se trouve dans l'adresse 073F:0102.
Correction
d
u
Correction
f 073F:0100 0400 55
Correction
e 073F:0100 "bonne chance"
Correction
d 073F:0000
Correction
e 073F:0100 B4 4C CD 21
Correction
u 073F:0100
Exercice 2
- Ecrire un programme assembleur qui permet de :
- Lire des chaînes de caractères autant de fois qu'on veut. Utiliser une procédure "lire_chaine" qui permet la lecture d'une chaîne de caractères.
- Pour chaque chaine lue, calculer la longueur et déposer sa valeur dans le registre AX. Utiliser une procédure "longueur_chaine" qui calcule la longueur d'une chaine de caractères.
- Afficher un par ligne les caractères de chaque chaine lue.
Correction
data SEGMENT msg_entrer DB "Veuillez vous entrer une chaine? 'O' si oui: ",'$' msg_lu DB "Chaine lu est: ",'$' chaine DB 20 dup('?'), '$' data ENDS code SEGMENT ASSUME DS: data, CS: code debut: ; Initialiser le segment de données MOV AX, data MOV DS, AX boucle: ; Afficher le message "Veuillez vous entrer une chaine?" MOV DX, offset msg_entrer MOV AH, 09H INT 21H ; Lire un caractère MOV AH, 01H INT 21H ; Comparer si le caractère est 'O' CMP AL, 'O' JNE fin ; Ajouter un saut de ligne MOV DL, 0AH MOV AH, 02H INT 21H ; Lire une chaîne et calculer sa longueur CALL lire_chaine CALL longueur_chaine ; Ajouter un saut de ligne MOV DL, 0AH MOV AH, 02H INT 21H ; Afficher le message "Chaine lu est:" MOV DX, offset msg_lu MOV AH, 09H INT 21H ; Ajouter un saut de ligne MOV DL, 0AH MOV AH, 02H INT 21H ; Afficher la chaîne entrée MOV BX, offset chaine boucle_afficher: MOV DL, [BX] CMP DL, '$' JE boucle MOV AH, 02H INT 21H ; Ajouter un saut de ligne MOV DL, 0AH MOV AH, 02H INT 21H INC BX JMP boucle_afficher fin: ; Fin du programme MOV AH, 4CH INT 21H lire_chaine PROC NEAR ; Lire une chaîne MOV DX, offset chaine MOV AH, 0AH INT 21H RET lire_chaine ENDP longueur_chaine PROC NEAR ; Calculer la longueur de la chaîne MOV BX, offset chaine MOV CX, 0 boucle_proc: MOV AL, [BX] CMP AL, '$' JE fin_proc INC CX INC BX JMP boucle_proc fin_proc: MOV AX, CX RET longueur_chaine ENDP code ENDS END debut

Exercice 2
- Que fait le programme suivant :
MOV bx, [0200] Mov ax, 15 Repeat: SHL bx Dec ax JNE Repeat Mov [0140], bx Mov ah, 4ch Int 21h
Correction
- Ce programme charge le registre bx avec la valeur existant à l'adresse 0200 et le registre ax par 15. Il boucle ensuite jusqu'à ce que ax devienne 0 (15 fois) et multiplie la valeur de BX par 2. Après la boucle, la valeur de BX devient (BX initial) x 2^15 et le programme se termine et retour au DOS