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