Vous êtes sur la page 1sur 20

Programmation en Assembleur 2012/2013 4RT

Rapport du Mini-projet
Programmation Systme Assembleur
Communication RS232 entre 2 PCs

Ralis par :
BOUAZZAOUI Hamza

Sommaire :
I. Introduction .. 03
1. Cahier des charges. 04 2. Dfinitions. 05 a. Programmation Assembleur ... 05 b. RS232.. 06 c. IRQ4..07 3. Reprsentation visuel. 07 II. Ralisation du mini-projet 08 1. Rpartition des tches. 08 2. Code commenter......08 3. Ralisation concrte et test...17 III. Conclusion 19

Remerciements :
Nous adressons tous nos remerciements et toute notre reconnaissance a notre Professeur Mr. QBADOU qui nous a encadr et dirig tout au long de la ralisation de ce projet. Nous le remercions pour avoir suivi avec autant de rigueur que de sympathie ce travail et pour son norme aide et contributions que a soit par ses ides pertinentes ou par ses conseil tout au long de ce projet, Nous tenons aussi le remercier lui et tout le corps professoral pour leurs soutiens et leurs aides pdagogique et tous ceux qui ont contribues au bon droulement et ralisation de ce travail.

I. Introduction :
Ce mini-projet nous a t propos par notre professeur de Programmation Systme Assembleur Mr. QBADOU en fin de notre formation en cette matire, pour finalement appliquer et progresser dans l'apprentissage dans le but de consolider les connaissances que lon a acquises grce a lui pendant les sances de cours et de TP (compilation des programmes avec TASM ). Dans un premier temps, nous aborderons le cahier des charges qui dcrit prcisment notre projet, nous donnerons aussi quelques dfinitions par rapport aux lments du projet, nous verrons par la suite la partie du code commenter avec le plus de dtails possible pour chacune des interruptions. Et enfin avec quelques mots nous conclurons ce rapport.

1.Cahier des charges :


Notre projet en langage assembleur a pour objectif dtablir une connexion et denvoyer un fichier fichier.txt dun ordinateur lautre en utilisant la norme standardis RS232 qui utilise des bus de communication de type srie, le programme sera compiler et linker sur deux machines lune pour envoyer le fichier et lautre pour le recevoir. Pour concevoir ce projet on a va utiliser deux machines tournantes sous Windows XP que lon va interconnecter avec un cble de type RS232 sur les ports dsigns par les noms COM1 ou COM2 (voir images ci-dessous).

2. Dfinitions : a. Programmation Assembleur :


Langage Assembleur ou simplement Assembleur par abus de langage, abrg ASM, est en programmation informatique, un langage de bas niveau qui reprsente le langage machine sous une forme lisible par un humain. Les combinaisons de bits du langage machine sont reprsentes par des symboles dits mnmoniques (du grec mnmonikos, relatif la mmoire), c'est--dire faciles retenir. Le programme assembleur convertit ces mnmoniques en langage machine en vue de crer par exemple un fichier excutable .exe , L'assembleur est le langage le plus rapide l'excution car plus proche du processeur aprs le langage machine, Le langage machine (binaire des 0 et des 1) est le seul langage qu'un processeur puisse excuter. Or chaque famille de processeurs utilise un jeu d'instructions diffrent. Par exemple nous on a utilis un jeu dinstruction que reconnaissent les processeurs de la famille x86. Sur les premiers ordinateurs, la tche d'assemblage tait accomplie manuellement par le programmeur.

b. RS-232 :
BRS-232 (parfois appele EIA RS-232, EIA 232 ou TIA 232) est une norme standardisant un bus de communication de type srie sur trois fils minimum (lectrique, mcanique et protocole). Disponible sur presque tous les PC jusqu'au milieu des annes 2000, il est communment appel le port srie . Sur les systmes d'exploitation MS-DOS et Windows, les ports RS232 sont dsigns par les noms COM1, COM2, etc. Cela leur a valu le surnom de ports COM , encore utilis de nos jours. Cependant, il est de plus en plus remplac par le port USB. Le standard RS-232 recouvre plusieurs autres standards : les recommandations UIT-T V.24 (dfinition des circuits) et V.28 (caractristiques lectriques), ainsi que la norme ISO 2110 pour la connectique. Les liaisons RS-232 sont frquemment utilises dans l'industrie pour connecter diffrents appareils lectroniques (automate, appareil de mesure, etc.). La connectique de cette liaison se prsente frquemment sous la forme du connecteur DE-9 ou DB-25, mais peut aussi tre d'un autre type (RJ25). Seule la version DB-25 est vraiment standardise, la DE-9 (trs souvent appel DB-9 dans le commerce) est une adaptation d'IBM lors de la cration du PC AT. La transmission des lments d'information (ou bit) s'effectue bit par bit, de manire squentielle. Cette transmission est dcrite sur la page communication srie.

c. IRQ4 :
Avant les appareils plug-and-play, les utilisateurs devaient mettre lIRQ valeurs de priphriques manuellement lors de l'ajout de l'appareil, comme un modem ou une imprimante, un systme. Il y a 16 IRQ nous avons utilis lIRQ4. LIRQ4 Cette interruption est normalement utilis pour le premier port srie (COM1) cest donc se port que nous avons utilis pour la ralisation de notre projet. C'est aussi l'interruption par dfaut pour le troisime port srie (COM3).

3. Reprsentation visuel :
Pour mieux comprendre le but de notre projet voici une petite reprsentation graphique.

Pour tablire une connexion entre 2 ordinateurs distants, on a recours une transmission par modems (modulateur/dmodulateur) au travers d'une ligne tlphonique, pour notre projet les 2PCs sont dans la mme pice et le cable que nous utilisons a une longuer de 4m.

II. Ralisation du mini-projet : 1. Rpartition des tches :


On a commenc tout dabord par la rpartition des taches pour chacun des membres de notre groupe, Le projet tant dfini a lavance, il devient ais de relever lensemble des tches raliser, les prioriser et les rpartir entre les diffrents membres du groupe, afin dassurer leur excution, et cest la philosophie quon a suivie.

2. Code comment :
title RS232 donnees segment

;;;;;;;;;;;;;;; Port COM ;;;;;;;;;;;;;;;;;;;;

commprt equ THR DL_LSB DL_MSB IER IIR FCR LCR equ equ equ equ equ equ equ

03F8h commprt commprt commprt+1 commprt+1 commprt+2 commprt+2 commprt+3

; adresse de base du com1 ; THR ; divisor latch LSB ; divisor latch MSB ; IT enable ; IT identification ; Fifo ctrl register ; ctrl ligne

MCR LSR MSR

equ equ equ

commprt+4 commprt+5 commprt+6

; ctrl modem ; status ligne ; status modem

;;;;;;;;;;;;;;; Controlleur d'interruption ;;;;;;;;;

interr

equ

21h

;;;;;;;;;;;;::::::;;; Variables ;;;;;;;;;;;;;;;;;;;

cheminfich db "fichier.txt",0 texte x dw ? db 512,0,512 dup(36),36

donnees ends

pile

segment stack dw 80 dup(?)

pile

ends

code

segment use16

assume cs:code,ds:donnees prog proc far

;;;;;;;;;;;;; Sauvegarde des registres ;;;;;;;;;;;;;;;

push push push

ds es ax

push push

si dx

;;;;;;;;;;;;; Initialisation des registres de segments ;;;;;;;;;;;;;;;;;;

mov mov mov

ax,donnees ds,ax es,ax

;;;;;;;;;;;;; dtournement de l'IRQ4 ;;;;;;;;;;;;;;;;;

cli xor mov mov in and out mov shl ax,ax fs,ax dx,interr al,interr al,0EFh dx,al ax,cs eax,16

; dsactive les interruptions

; fs = 0

; lecture du masque d'interruption ; dmasque l'IRQ4 ; criture du masque ; ; eax = cs00h ; eax contient segment et offset de la nvlle ; dtourne l'irq4

mov ax,offset irq4 routine d'interruption mov fs:[0Ch*4],eax

;;;;;;;;;;;;; Initialisation du port COM ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

mov mov out

al,80h dx,LCR dx,al

; DLAB=1

10

mov mov out xor mov out

al,0Ch dx,DL_LSB dx,al al,al dx,DL_MSB dx,al

; 9600 bits/s

mov parit mov out

al,03h dx,LCR dx,al

; DLAB=0, 8 bits de donnes, 1 bit d'arrt, aucune

mov al,5 ; Active l'interruption donnee prete et l'interruption de changement du status de ligne mov out dx,IER dx,al

sti

; Autorise les interruptions

;;;;;;;;;;;;; programme principal ;;;;;;;;;;;;;;;;;;;;;;

start: xor lea mov int choix: mov ah,1 int 21h ; lire caractre si,si dx,Salut ah,09h 21h

11

cmp al,'e' jz envoi cmp al,'r' jz recep jmp choix ; si char=r "reception caractre" ; si char=e "envoi caractre"

envoi: mov ah,3dh lea dx,cheminfich mov al,0 int 21h mov x,ax ; ouvrire un fichier (deja existant) ; le chemin du fichier ; 0: en Lecture seul ; ax reoie le Handle du fichier

mov ah,3fh mov cx,512 mov bx,x lea dx,texte int 21h

; lire d'un fichier ; le nombre de caractres a lire ; le Handle du fichier ; ladresse du buffer qui enregistrera la chaine lu)

loop1:

lea mov call cmp jz inc jnz

si,texte al,[si] send_char al,'$' fin si loop1 ; envoi caractre ; teste si touche=$ ; sortir

12

recep: mov ah,3ch lea dx,cheminfich mov cx,0 int 21h mov x,ax ; Handle du fichier ; crer le fichier ; le chemin du fichier ; 0 : Lecture seul

mov ah,3dh lea dx,cheminfich mov al,0 int 21h mov x,ax

; ouvrire un fichier (deja existant) ; le chemin du fichier ; 0: en Lecture seul ; ax reoie le Handle du fichier

loop2:

lea call mov cmp jz inc jnz

si,texte receive_char [si],al al,'$' fin si loop2 ; teste si touche=$ ; sortir ; recevoir caractre

fin: mov ah,3eh mov bx,x int 21h ; fermer le fichier

13

pop pop pop pop pop

dx si ax es ds

mov ah,4ch int prog 21h

endp

irq4: push push ax dx ds

push

;;;;; Source de l'interruption ;;;;;;

mov in and test jz

dx,IIR al,dx al,6 al,6 erreur_ligne ; erreur ligne ; conserver que bits 1 et 2

; sinon donne prte mov in dx,commprt al,dx ; lit un caractre du tampon de rception

mov mov int

dl,al ah,02h 21h ; l'affiche l'cran

14

jmp

fin_irq4

erreur_ligne: mov in test jz test jz jmp dx,LSR al,dx al,2 overrun al,8 cadrage fin_irq4 ; si bit 3 est = 1 => erreur cadrage (forme) ; si bit 1 est = 1 => erreur overrun ; lecture de l'tat de la ligne

overrun: lea mov mov mov int jmp dx,overrun_msg ax,cs ds,ax ah,9 21h fin_irq4

cadrage: lea mov mov mov int dx,cadrage_msg ax,cs ds,ax ah,9 21h

fin_irq4: mov out pop al,20h 20h,al ds ; EOI

15

pop pop iret

dx ax

overrun_msg cadrage_msg

db "erreur overrun$" db "erreur cadrage$"

;;;;;;;;;;;;; routine d'envoi d'un caracactre ;;;;;;;;;;;;;;;;

send_char proc near push push mov attend: in test jz pop mov out pop ret send_char endp al,dx al,20h attend ax dx,commprt dx,al dx dx ax dx,LSR

;;;;;;;;;;;;; routine de reception d'un caracactre ;;;;;;;;;;;;;;;;

receive_char proc near push push mov dx ax dx,LSR

16

attend: mov mov int test jnz ret receive_char endp dx,commprt ah,2 14h ah,80h attend ;Check for error ;Select COM1: ;Receive opcode

code end

ends prog

3. Ralisation concrte et test :


Pour tester notre projet on a dcid de compiler et linker le programme quon a ralis sur deux machines avec lassembleur Turbo Assembleur (TASM), on a cbl ses deux machines avec un bus RS232 dune longueur de 6m et on a excut les programmes compil .exe cela donne :

17

2 Ordinateurs (rcepteur / metteur)

Cble RS23 de longueur 6m

18

III. Conclusion :
Aprs lachvement de notre mini projet et aprs avoir mis en uvre toutes nos connaissances et nos comptences que lon a acquises au cours de notre formation en langage Assembleur , nous avons lhonneur de dire que nous avons eu beaucoup de plaisir raliser ce travail car on eu loccasion dutiliser dautres interruptions quon a du faire des recherches pour mtriser leur utilisation. Et bien sr tout cela grce notre professeur qui a eu lobligeance et la patience de nous apprendre mtriser le travail sur ce logiciel TASM . Nous tenons aussi dire que nous esprons avoir t a la hauteur de vos attentes.

FIN

19