Vous êtes sur la page 1sur 9

Universit de Skikda Dpartement d'informatique Module : Rseaux Informatique

Skikda, le 30/11/2008 l'enseignant : BOUTINE Rachid

Travail Pratique N01


La programmation rseaux sous Java network Les concepteurs des bibliothques Java ont faciliter la programmation rseaux jusqu la rendre similaire des oprations de lecture ou criture sur fichier,sauf que ce dernier se situ dans une machine distante. Le modle de programmation utilise en java , encapsule la connexion rseaux (socket) dans un objet stream, alors on utilise les mmes mthodes quavec les autres streams. En plus , Javas fournit des bibliothques ddies pour la multi-threading qui rend possible ltablissement de plusieurs connections en mme temps. Identification de Machines sur le rseau ? A fin quune machine puisse communiquer avec une machine bien spcifique sur le rseau il est impratif que la machine soit capable dadresser dune faon unique la machine rceptrice. cependant, Java peut fonctionner sur Internet, qui ncessite un identification unique pour chaque machine par rapport a toutes les autres travers le monde. Ceci est accomplit par les adresses IP (Internet Protocol) qui peuvent exister sous deux formes : 1. le DNS (Domain Name System) est un nom alphanumrique (exemple reseaux1.ifrance.com) qui engendre aprs rsolution une adresse IP unique . 2. alternativement , on peut utiliser la forme articule , qui est quatre nombres spars par des points, tel que ( 123.255.28.120). dans les deux cas, ladresse IP est reprsente implicitement par un nombre 32-bits . Heureusement java fournit un objet spcial pour reprsenter ce nombre : Type dobjet: InetAddress. Si nous connaissons le nom dun ordinateur alors on peut rcuprer sa adresse IP utilisant la mthode static InetAddress.getByName( ) de la bibliothque java.net. Les outils indispensables pour programmer en java: Editeur de texte : pour crire le fichier source (le nom de la classe nomClassMain.java ) Le Compilateur de JDK : le JAVAC (nomClassMain.java nomClassMain.class) Linterprteur de JDK : le JAVA (nomClassMain.class excution directe) Ou ventuellement (JBuilder) Mon premier programme java : Soit le petit programme java suivant qui sert afficher ladresse IP dun ordinateur a partir de son nom : // le programme doit tre appel Quisuisje.java // rsultat ladresse IP de votre ordinateur import java.net.*; public class Quisuisje {public static void main(String[] args)throws Exception { if(args.length != 1) { System.err.println("Usage: Quisuisje nom_de_MachineName"); System.exit(1); } InetAddress a = InetAddress.getByName(args[0]); System.out.println(a); } } par exemple si la machine est appele Univ-post1, je tape java Quisuisje Univ-post1

je dois avoir par exemple le message suivant Univ-post1/127.0.0.0 (bien sure, ladresse est diffrente a chaque excution ) si lattribution dadresse IP est dynamique:
peppy/199.190.87.75 If I tell my friend this address and I have a Web server running on my computer, he can connect to it by going to the URL http://199.190.87.75 (only as long as I continue to stay connected during that session). This can //: c15:JabberServer.java // Very simple server that just // echoes whatever the client sends. import java.io.*; import java.net.*; public class JabberServer { // Choose a port outside of the range 1-1024: public static final int PORT = 8080; public static void main(String[] args) throws IOException { ServerSocket s = new ServerSocket(PORT); System.out.println("Started: " + s); try { // Blocks until a connection occurs: Socket socket = s.accept(); try { System.out.println( "Connection accepted: "+ socket); BufferedReader in = new BufferedReader( new InputStreamReader( socket.getInputStream())); // Output is automatically flushed // by PrintWriter: PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter( socket.getOutputStream())),true); while (true) { String str = in.readLine(); if (str.equals("END")) break; System.out.println("Echoing: " + str); out.println(str); } // Always close the two sockets... } finally { System.out.println("closing..."); socket.close(); } } finally { s.close(); } } } ///:~

//: c15:JabberClient.java // Very simple client that just sends // lines to the server and reads lines // that the server sends. import java.net.*; import java.io.*; public class JabberClient { public static void main(String[] args)

throws IOException { // Passing null to getByName() produces the // special "Local Loopback" IP address, for // testing on one machine w/o a network: InetAddress addr = InetAddress.getByName(null); // Alternatively, you can use // the address or name: // InetAddress addr = // InetAddress.getByName("127.0.0.1"); // InetAddress addr = // InetAddress.getByName("localhost"); System.out.println("addr = " + addr); Socket socket = new Socket(addr, JabberServer.PORT); // Guard everything in a try-finally to make // sure that the socket is closed: try { System.out.println("socket = " + socket); BufferedReader in = new BufferedReader( new InputStreamReader(socket.getInputStream())); // Output is automatically flushed // by PrintWriter: PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter( socket.getOutputStream())),true); for(int i = 0; i < 10; i ++) { out.println("howdy " + i); String str = in.readLine(); System.out.println(str); } out.println("END"); } finally { System.out.println("closing..."); socket.close(); } } } ///:~

Enonc N01 : crire un programme assembelur qui vous affiche la chane de caractres suivante" BONJOUR,c'est mon premier programme" Solution : Title mon premier programme ; Titre DOSSEG ; modle de segmentation du systme d'exploitation DOS .MODEL SMALL ; petit modle mmoire .STACK 50 ; 50 octets pour la pile .DATA ; segment de donnes LIGNE DB "BONJOUR,c'est mon premier programme$" .CODE ; segment de code debut: MOV AX,@DATA ; transfre de l'adresse du segment de donnes mov ds,ax ; dans le registre DS mov ah,09h ; affichage de mov dx,offset ligne ; la chaine de caractres ligne int 21h ; par l'interruption 21h

mov ax,4c00h int 21h end debut

; terminaison du programme ; par l'interruption 21h

Enonc N02 : crire un programme assembelur qui vous affiche la chane de caractres suivante,"tapez votre nom SVP (max 12 caracteres):", et aprs la lectur en clavier de votre nom il affiche "Bon jour " suivi de votre nom juste tap, suivi dans la ligne suivante par la chane de caractre : "c'est votre programme en assembleur qui vous parle". Solution : Title mon deuxieme programme assume cs:code,ds:data,ss:stack ;Titre ; affectation des registres de segments aux diffrents segments du programme. stack segment stack ; debut segment pile db 100h dup(0) ; 256 octets pour la pile initialis zro stack ends ; fin du sagement data segment ; dbut sagement d donne question db 13,10,"tapez votre nom SVP (max 12 caractres):",13,10,"$" ; chane de caractres phrase db "bonjour," ; chane de caractres input db 13,14 dup(32) ; buffer qui reoit le nom tap

db "c'est votre programme en assembleur qui vous parle",13,14,"$" data ends code segment begin proc near mov ax,data mov ds,ax mov ah,09H mov dx,offset question int 21h mov ah,0ch mov al,0ah mov dx,offset input int 21h mov bl,byte ptr[input+1] mov bh,0 mov word ptr[input]," " mov byte ptr [input+2+bx],"," mov cx,12 boucle : mov ah,09h mov dx,offset phrase int 21h loop boucle mov ax,4c00h int 21h begin endp code ends end begin ; fin du sagement ;dbut sagement de code ; dbut d'une procedure ; transfert de l'adresse de ; sagement de donnes en DS ; affichage de la chaine question ; question ;par l'interruption 21h ; lecture en clavier ;dans le buffer ;input ; par l'interruption 21h ;

; repeater 12 fois ; la phrase

; fin du programme

Universit de Skikda Dpartement d'informatique Module : Architecture I

Skikda, le 16/01/2006 l'enseignant : BOUTINE Rachid

Travaux Pratique N04


Enonc N01 Soit le programme suivant qui fait l'addition de deux nombres entiers; lisez et comprenez bien ce dernier. Ensuite, tapez ce programme dans l'diteur de texte EDIT, enregistrez le programme sous le nom addition.asm , assemblez le fichier addition.asm pour obtenir le fichier objet addition.obj, enfin linkez le fichier objet pour obtenir le fin le fichier excutable addition.exe Title mon deuxieme programme ;titre assume cs:code,ds:data,ss:stack ;affectation de registres pour segments de programme ;****************************segment pile************************** stack segment stack ;dbut de segment de la pile db 100h dup(0) ;rservez 256 octets pour la pile stack ends ;fin du sagement pile

;**************************segment de donnes********************* data segment ;dbut du segment de donnes A Dw 0 ;rservez une variable double octets B Dw 0 ;rservez une variable double octets resultat db 10, "valeur1 + valeur2 =",10 ;rservez une variable chane de caractres db " ",13,"$" message db 10,"entrez la valeur1 ?",10 ;rservez une variable chane de caractres db " ",13,"$" message1 db 10,"entrez la valeur2 ?",10 ;rservez une variable chane de caractres db " ",13,"$" data ends ;fin du sagement de donnes ;**************************segment de code************************ code segment ;dbut du segment de code begin : ;point d'entre des programme mov ax,data ;transfrer l'adresse du sagement de donnes en AX mov ds,ax ;transfrer l'adresse du sagement de donnes en AX vers DS ;********************affichage de message 01***************************** mov ah,09h ;utiliser l'interruption 21h pour l'affichage mov dx,offset message ;d'une chane de caractres le code ah = 09h int 21h ; et l'adresse du message 01 dans dx ;*********************************************************************** ;* saisie du valeur numro 01 * ;*********************************************************************** mov ah,01h ;utiliser l'interruption 21h pour la saisie sur int 21h ;clavier d'un caractre le code ah = 01h ;et le retour en al xor ah,ah ;ah=0 sub ax,48 ;transformer le code ascii vers la valeur dcimale mov word ptr[A],ax ;sauver la valeur de AX dans le variable [A] suite2: ; tiquette suite2 mov ah,01h ;utiliser l'interruption 21h pour la saisie sur int 21h ;clavier d'un caractre le code ah = 01h et le retour en al xor ah,ah ;ah=0 cmp al,13 ;comparez la touche tape avec la touche enter je suit1 ;si gale fin de la saisie du valeur 01 xor ah,ah ;ah=0 sub ax,48 ;transformer le code ascii vers la valeur dcimale mov bx,ax ;sauver la valeur de AX dans BX mov ax,word ptr[A] ;multiplier la valeur sauvegarde dans la variable A mov cx,10 ;par 10 mul cx ;AX*CX=AX*10 add ax,bx ;ajouter le rsultat avec la valeur tape mov word ptr[A],ax ;sauver le total dans la variable A jmp suite2 ;allez a pour la saisie du nouveau chiffre suit1: ;********************affichage de message 02***************************** mov ah,09h ;utiliser l'interruption 21h pour l'affichage mov dx,offset message1 ;d'une chane de caractres le code ah = 09h int 21h ;et l'adresse du message 02 dans dx ;*********************************************************************** ;* saisie du valeur numro 02 * ;*********************************************************************** mov ah,01h ;utiliser l'interruption 21h pour la saisie sur int 21h ;clavier d'un caractre le code ah = 01h

;et le retour en al xor ah,ah ;ah=0 sub ax,48 ;transformer le code ascii vers la valeur dcimale mov word ptr[B],ax ;sauver la valeur de AX dans le variable [B] suite3: ; tiquette suite3 mov ah,01h ;utiliser l'interruption 21h pour la saisie sur int 21h clavier d'un caractre le code ah = 01h et le retour en al xor ah,ah ;ah=0 cmp al,13 ;comparez la touche tape avec la touche enter je suit4 ;si gale fin de la saisie du valeur 02 xor ah,ah ;ah=0 sub ax,48 ;transformer le code ascii vers la valeur dcimale mov bx,ax ;sauver la valeur de AX dans BX mov ax,word ptr[B] ;multiplier la valeur sauve dans la variable B mov cx,10 ;par 10 mul cx ;AX*CX=AX*10 add ax,bx ;ajouter le rsultat avec la valeur tape mov word ptr[B],ax ;sauver le total dans la variable B jmp suite3 ;allez a pour la saisie du nouveau chiffre suit4: ;***********************affichage du message 03******************************* mov ah,09h ;utiliser l'interruption 21h pour l'affichage mov dx,offset resultat ;d'une chane de caractres le code ah = 09h int 21h ;et l'adresse du message 02 dans dx mov ax,word ptr[A] ;affecter la variable A dans AX mov bx,word ptr[B] ;affecter la variable B dans BX ;****************************** Addition ************************************* add ax,bx ;AX+BX ;***********************affichage du rsultat de l'addition************************ cmp ax,10000 ;comparer le rsultat avec 10000 jge suit10000 ;si la valeur est suprieure a 10000 cmp ax,1000 ;comparer le rsultat avec 1000 jge suit1000 ;si la valeur est suprieure a 1000 cmp ax,100 ;comparer le rsultat avec 100 jge suit100 ;si la valeur est suprieure a 100 cmp ax,10 ;comparer le rsultat avec 10 jge suit10 ;si la valeur est suprieure a 10 jb suit9 ;si la valeur est infrieure a 10 ;**********************affichage de la position des 10000****************************** suit10000 : mov cx,10000 ;transfrer la valeur 10000 a cx xor dx,dx ;dx=0 push ds ;empiler ds pop es ;dpiler en es push dx ;empiler dx push ax ;empiler ax div cx ;diviser la valeur trouver en AX par CX jc depasse ;s'il y a un overflow push ax ;empiler le quotient mul cx ;multiplier le quotient par 10000 pop dx ;dpiler en DX push ax ;empiler en rsultat de la multiplication ;afficher le quotient add dl,48 ;transformer la valeur dcimale en code ascii

mov ah,06h ;utiliser l'interruption 21h pour l'affichage int 21h ;d'un chiffre par le code ah = 06h pop bx ;restaurer le quotient pop ax ;et la valeur avant division sub ax,bx ;reste=valeur originale - quotient*10000 ;**********************affichage de la position des 1000********************************* suit1000: mov cx,1000 ;transfrer la valeur 1000 a cx xor dx,dx ;dx=0 push ds ;empiler ds; pop es ;dpiler en es push dx ;empiler dx push ax ;empiler ax le reste dans ax div cx ;diviser ax par 1000 jc depasse ;s'il y a un overflow push ax ;empiler le quotient mul cx ;multiplier le quotion par 1000 pop dx ;dpiler en DX push ax ;empiler en rsultat de la multiplication ;afficher le quotient add dl,48 ;transformer la valeur dcimale en code ascii mov ah,06h ;utiliser l'interruption 21h pour l'affichage int 21h ;d'un chiffre par le code ah = 06h pop bx ;restaurer le quotient pop ax ;et la valeur avant division sub ax,bx ;reste=valeur originale - quotient*1000 ;**********************affichage de la position des 100********************************* suit100: mov cl,100 ;transfrer la valeur 100 a cx xor dx,dx ;dx=0 push ds ;empiler ds pop es ;dpiler en es push dx ;empiler dx push ax ;le reste dans ax div cl ;diviser ax par 100 jc depasse ;s'il y a un overflow push ax ;empiler le quotient mul cl ;multiplier le quotient par 100 pop dx push ax ;dpiler en DX ;empiler en rsultat de la multiplication ;afficher le quotient add dl,48 ;transformer la valeur dcimale en code ascii mov ah,06h ;utiliser l'interruption 21h pour l'affichage int 21h ;d'un chiffre par le code ah = 06h pop bx ;restaurer le quotient pop ax ;et la valeur avant division sub ax,bx ;reste=valeur originale - quotient*100 ;**********************affichage de la position des 10********************************* suit10: mov cl,10 ;transfrer la valeur 10 a cx xor dx,dx ;dx=0 push ds ;empiler ds pop es ;dpiler en es push dx ;empiler dx

push ax div cl jc depasse push ax mul cl pop dx push ax

;le reste dans ax ;diviser ax par 10 ;s'il y a un overflow ;empiler le quotient ;multiplier le quotient par 10 ;dpiler en DX ;empiler en rsultat de la multiplication ;afficher le quotient add dl,48 ;transformer la valeur dcimale en code ascii mov ah,06h ;utiliser l'interruption 21h pour l'affichage int 21h ;d'un chiffre par le code ah = 06h pop bx ;restaurer le quotient pop ax ;et la valeur avant division sub ax,bx ;reste=valeur originale - quotient*10 ;**********************affichage de la position des 1********************************* suit9: mov dl,al ;transfrer la valeur de la position des units dans dl add dl,48 ;transformer la valeur dcimale en code ascii mov ah,06h ;utiliser l'interruption 21h pour l'affichage int 21h ;d'un chiffre par le code ah = 06h depasse: mov ax,4c00h ;utilisant l'interruption 21h pour la terminaison int 21h ;le code 4c00h dans ax code ends ; fin du segment code end begin ;fin du programme avec le point d'entre 'begin' Enonc N02 : En se basant sur le listing ci-dessus donn , crivez un programme assembleur qui calcule les solutions d'une quation de deuxime degr . A noter que le travail demand doit tre rendu avant le 28 fvrier 2006 (un fichier assembleur sur une disquette + le manuel technique dcrivant la dmarche suivie pendant le dveloppement du programme partir de l'algorithme jusqu' l'implmentation+une expose durant les sances de TPs) *********Bonne chance*********