Examen-2 SE-2 CORRECTION

Transcription

Examen-2 SE-2 CORRECTION
Examen-2 SE-2
CORRECTION
Q1 :
Pour dialoguer avec ces périphériques le microprocesseur a trois façons de communiquer
avec ces derniers :
- En questionnant de façon continue le périphérique pour vérifier que des données peuvent
être lues ou écrites (Polling).
- En l'interrompant lorsqu'un périphérique est prêt à lire/écrire des données (interruption)
- établir une communication directe entre 2 périphériques (DMA : Direct memory acces).
Q2 :
Passer les paramètres par registres est beaucoup plus rapide et plus simple que par la pile (on
évite des accès à la mémoire). Cependant, le nombre de registre est limité et il faudra mettre
les registres sur la pile de toute façon si la fonction appelle une autre fonction avec des
paramètres passés par les mêmes registres. Bref, les registres sont mieux, mais ils sont plus
limités et n’offrent pas une solution universelle.
Q3 :
Voir Cours.
(Registre MMX : MM0, MM1,.., MM7 – Taille : 64 bits).
(FPU : manipule des registres de 80 bits.)
Exercice -1 :
Contrôle du mot-de-passe :
.stack 64
.data
cr equ 13
lf equ 10
password db 'ENSI2014$'
prompt db 'Enter Password & then <cr> (Max 40 chars)',cr,lf,'$'
entry db 41 dup(?)
msgsuc db 'Vous etes autorise',cr,lf,'$'
msgfail db 'Pssword errone! Reesayer',cr,lf,'$'
.code
pass:
mov ax, data
mov ds,ax
mov es,ax
lea dx,prompt
mov ah,09h
int 21h
mov bp,0
tryagain:
mov cx,40
mov bx,0
again:
mov ah,08h ;read a char from KB s/echo on screen
int 21h
;stores the char read in al
cmp al,0dh ;cmp al with <cr>(0dh)
je action
mov entry[bx],al ;store the chars read in entry[]
inc bx
loop again ;to read next char from Clavier
action:
mov entry[bx],'$' ;store $ at the end of the array
lea si,password
lea di,entry
mov cx,06
;cx=6 length of the password
repe cmpsb
;cmp si(password) & di(entry)
je sucmsg
lea dx,msgfail
mov ah,09h
int 21h
jmp tryagain
sucmsg:
lea dx,msgsuc
mov ah,09h
int 21h
mov ah,4ch
int 21h
Exercice -2 :
Occurrence dans une chaine :
.data
String db “exercise”, $
compteE db ?
Length db $-String
.code
Main proc
MOV AX, data
MOV DS, AX
MOV AL,00H
MOV SI, offset String
MOV CX, Length
Back: MOV BH, [SI]
CMP BH, “e”
JNZ Label
INC AL
Label: INC SI
LOOP Back
MOV compteE, AL
MOV AH, 4CH
INT 21H
Exercice -3 :
Ecrire un programme en assembleur 8086, qui transfère un block de 10 données (taille de
chaque donnée: 1byte-Chaine de caract), en utilisant les instructions de chaines de caractères.
. DATA
STRNO1 DB 10 DUP(?) ; Element of string stored here
STRNO2 DB 10 DUP(0) ; Storage for the transferred 10 byte string
.CODE
MOV DX, DATA ; Code and Data
MOV DS, DX
; Segment registers
MOV ES, DX
; Segment register
MOV SI, STRNO1 ; Point SI to source string
MOV DI, STRNO2 ; Point DI to destination string
MOV CX, 000AH ; Initialize counter register
CLD
; Clear DF to auto-increment SI, DI
REP MOVSB
; Transfer data, Repeter jusqu’a CX= 0
MOV AH, 4CH
INT 21H
END
; Après CX= 0
Exercice -4 :
Afficher le contenu d’un fichier
.DATA
Filename DB ’assembleur’, 0
Buffer db 100 dup (?), ’$’
err1_msg db ’Erreur a l’’ouverture’, 13, 10, ’$’
err2_msg db ’Erreur a la lecture’, 13, 10, ’$’
.CODE
; ouverture et test d’existence du fichier
mov ah,3dh ; ouverture du fichier
mov al,0
; accès en lecture
mov dx, Filename
int 21h
jc err1
; le fichier n’existe pas -> erreur
; préparation de la boucle
mov bx, ax ; sauvegarde du Handle
mov dx, Buffer
boucle:
; lecture des 100 caractères suivants du fichier
mov cx, 100
mov ah, 3fh ; lecture du fichier
int 21h
jc err2
; affichage a l’écran des caractères lus
mov cx, ax
mov si, ax
mov si+Buffer, ’$’
mov ah,9h
int 21h
cmp cx, 100
je boucle
; fin du traitement
mov ah, 3eh ; fermeture du fichier
int 21h
jmp fin
; Traitements des erreurs
err1:
; le fichier ne peut être ouvert
mov dx, err1_msg
jmp affiche_msg
err2:
; erreur lors de l’accès au contenu du fichier
mov dx, err2_msg
jmp affiche_msg
affiche_msg:
mov ah,9
int 21h
jmp fin
fin: mov ah,4Ch
int 21h
End

Documents pareils