0% ont trouvé ce document utile (0 vote)
14 vues4 pages

EMD 2010 Corrig

Le document traite des architectures Von Neumann et Harvard, en soulignant leurs différences en termes de mémoire, de bus et d'accès. Il présente également des exemples de code pour un microprocesseur et un microcontrôleur, illustrant la manipulation des données et l'interaction avec des ports. Enfin, il décrit un exercice de multiplication simple en utilisant un code assembleur pour un microcontrôleur PIC.

Transféré par

Hadj Safa
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
14 vues4 pages

EMD 2010 Corrig

Le document traite des architectures Von Neumann et Harvard, en soulignant leurs différences en termes de mémoire, de bus et d'accès. Il présente également des exemples de code pour un microprocesseur et un microcontrôleur, illustrant la manipulation des données et l'interaction avec des ports. Enfin, il décrit un exercice de multiplication simple en utilisant un code assembleur pour un microcontrôleur PIC.

Transféré par

Hadj Safa
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

CORRIGE EXAMEN FINAL

EXRCICE I
1- Plusieurs bonnes réponses sont possibles :
Dans l’architecture Von Neumann, les instructions et les données sont stockées
dans la même unité de mémoire tandis que dans l’architecture Harvard, il existe
deux unités de mémoire séparées, une pour les instructions et une pour les
données.
Dans l’architecture Von Neumann, il existe un seul bus pour relier la mémoire
au CPU. Ce bus sert alternativement à transmettre les instructions et les
données. Dans l’architecture Harvard, il y a présence de deux bus physiquement
distincts pour relier les deux unités de mémoire au CPU. Un de ces bus sert à
transmettre les instructions et l’autre bus sert à transmettre les données.
Dans l’architecture Von Neumann, on ne peut réaliser qu’un seul accès à la
mémoire en un cycle d’horloge. Il y a donc embouteillage puisqu’un seul mot
binaire peut circuler à un instant donné sur le bus. Dans l’architecture Von
Neumann, il est possible de réaliser deux accès à la mémoire en même temps
(un pour les instructions, un pour les opérandes), ce qui accélère la vitesse de
traitement.
L’architecture Von Neumann est simple à implémenter et nécessite peu de
circuits. L’architecture Harvard nécessite de doubler l’espace réservé aux bus, ce
qui donne généralement des circuits assez volumineux.
L’architecture Von Neumann permet une petite bande passante sur le bus de
données et donc, elle est bien adaptée pour les microprocesseurs effectuant des
opérations complexes, comme les processeurs CISC. L’architecture Harvard
permet une grande bande passante sur le bus de données et donc, elle est bien
adaptée pour les microprocesseurs effectuant beaucoup d’opérations simples,
comme les processeurs RISC.

2- Pour microprocesseur : adresse de saut sur 16 bits directement.


Adresse de retour conservé dans la pile.
Pour Microcontrôleur : adresse de saut sur 10 bits contenu
directement dans l’instruction donc il faut mettre bout à cout ces 10 bits avec
les bits 3 et 4 du PCLATH. Ces bits constituent le numéro de page

3- :L'instruction spécifie un registre


dans lequel se trouve l'adresse de la donnée.
a)MICROPROCESSEUR : Seuls les registres BX, BP, SI et DI peuvent
être utilisés en mode indirect. Par défaut le
segment utilisé est DS sauf avec BP qui
utilise SS.
valeur DW 1234h
mov si, OFFSET valeur ; si <-- adresse(valeur)
mov ax,[si] ; ax <-- ((si)) = 1234h
b)PIC : Les registres FSR et INDF sont utilises dans le mode indirect

movlw 0x50 ; chargeons une valeur quelconque


movwf mavariable ; et plaçons-la dans la variable " mavariable "
movlw mavariable ; on charge l’ADRESSE de mavariable,
movwf FSR ; on place l’adresse de destination dans FSR.
movf INDF,w ; charger le CONTENU de INDF dans W.
Le contenu de INDF est considéré par le Pic comme étant le contenu de l’adresse pointe
par FSR

EXERCICE II

;L'objectif est de lire l'état des microswitchs connectés sur le port A (RA0 à RA3).

; L'état de chaque microswitch sera visualisé par une LED. Les LEDs sont connectées sur le
port B

début
Initialiser accès à Bank 1
Initialiser RB0 à RB5 en sortie Et RB6 et RB7 en entrée
Initialiser RA0 à RA7en entrée
Initialiser accès à Bank 0
1ecture du port A
Ne garder que les 4 bitsde poids faibles de la lecture
Ecriture du résultat dans le port B

list p=16f84

#include <[Link]>

__CONFIG _CP_ON & _WDT_ON & _PWRTE_ON & _HS_OSC

org 0x00

;movlw B'00000111' ; Disable Comparator module's pour utiliser le port A en logique

;movwf CMCON

bsf STATUS,RP0 ; Acces a BANK1

movlw B'11000000' ; Ne pas mettre RB6 et RB7 en sortie, RB5 a RB0 en entrée

movwf H'06' ; Programmation du registre TRISB (config port B)

movlw B'11111111' ; RA0 a RA7 en entree (port A)

movwf H'05' ; Programmation du registre TRISA (config port A)

bcf STATUS,RP0 ; Acces a BANK0

fin movf PORTA,W ; Registre W= lecture port A

andlw B'00001111' ; Et logique pour ne garder que les 4 bits de poids faibles

movwf PORTB ; LEDs (RB0) allumees en fonction des switchs


goto fin

end

EXERCICE III ; Multiplication Simple Précision 8 * 8 -> 16 non signée


; N * D -> R non signée
LISTp=16F84
#include <[Link]>
__CONFIG _CP_ON & _WDT_ON & _PWRTE_ON & _HS_OSC

cblock 0x20
N0 : 1
D0 : 1
R1,R0 : 1
C0: 1
endc
ORG 0x0000
goto main
main bsf STATUS,RP0 ; Bank 1pour initialisation ports .0
movlw B'00010000';
clrf TRISB ; PortB en sortie
clrf TRISA ; Port A en sortie
bcf STATUS,RP0 ; Bank0
clrf PORTB ;
clrf PORTA ;
movlw 0xFF ; D0=FF (le multiplicateur)
movwf D0 ;
movlw 0x02 ; N0=02 (le multiplicande )
movwf N0 ;
movlw 8 ; C0=8, pour les 8 bits donc 8 boucles
movwf C0 ;
clrf R1 ; initialiser à 0 le résultat R1 et R0
clrf R0 ; R1=0 (high)et R0=0(low)
movf N0,W ; N0W
bcf STATUS,C ; 0 Carry
BOUCLE rrf D0,F ; bit de poids faible de D0 Carry
btfsc STATUS,C ; cary =0(n’ ajoute pas N0), on saute
addwfR1,F ; carry=1(on ajoute N0)
rrf R1,F ; décalage du resutat high R1 droite
rrf R0,F ; décalage du resutat lowR0 droite
decfsz C0,F ; verifier fin des 8 additions (boucles)
goto BOUCLE ; si pas la fin recommencer
end
Debut: D0=FF; N0= 02 ; R1= 00 : R0=00
Exécution D0 = 00 ; N0= 02 ; R1= 01 ; R0=FE(multiplication 02parFFresultat dans
R1retR0)
Debut: D0=FF; N0= FF R1= 00 : R0=00
Exécution D0 = 00 N0=FF; R1= FE ; R0=01 (multiplication 02parffreuslatat dans
R1retR0)

Vous aimerez peut-être aussi