begin process at 2010 03 17 00:05:17
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Systeme

 > LECTURE DE DISQUETTE

LECTURE DE DISQUETTE


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Systeme Niveau :Débutant Date de création :03/10/2004 Vu :5 347

Auteur : djtiboy

Ecrire un message privé
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
vous avez le code ascii a gauche, et ensuite la lettre reel a droite... vous pouvez vous deplacer dans le contenu et meme changer des valeurs.

Source

  • dosseg
  • model small
  • .stack
  • .data
  • public secteur
  • entete1 db 'Disque:',0
  • entete2 db 'Piste:',0
  • entete3 db 'Secteur:',0
  • entete4 db 'Tete:',0
  • entete5 db 'menu2.exe programmer par Eric Gagnon',0
  • disque db 'A',0
  • piste db '5',0
  • sector db '3',0
  • tete db '0',0
  • bs equ 08; backspace
  • escape equ 1b; sortir
  • CR EQU 13; CARRACTERE QUI REVIENT AU DEBUT DE LA LIGNE
  • LF EQU 10; CHANGE DE LIGNE
  • num db 00h,01h,02h,03h,04h,05h,06h,07h,08h,09h,0Ah,0Bh,0Ch,0Dh,0Eh,0Fh
  • toprow db 0c9h, 12 dup(0cdh), 0cbh, 11 dup(0cdh), 0cbh,11 dup(0cdh),0cbh,12 dup(0cdh),0bbh,0c9h,16 dup(0cdh),0bbh
  • secteur db 512 dup (?)
  • buttrow db 0c8h,12 dup(0cdh),0cah,11 dup(0cdh),0cah,11 dup(0cdh),0cah,12 dup(0cdh),0bch,0c8h,16 dup(0cdh),0bch
  • tichiffre db '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
  • curseur_fantome_x db 00
  • curseur_fantome_y db 00
  • vrai_curseur_x db 00
  • vrai_curseur_y db 00
  • dispatch_table db 48h
  • dw offset fantome_haut;dw offset_text: fantome_haut
  • db 50h
  • dw offset fantome_bas
  • db 4bh
  • dw offset fantome_gauche
  • db 77
  • dw offset fantome_droit
  • db 0;fin du dispatch
  • keyboard_input label byte
  • char_num_limit db 0; va etre setter a 2 pour notre programme
  • num_char_read db 0
  • char db 80 dup (0)
  • ;cr equ 13; carriage return CRLR
  • .code
  • main proc
  • xor bx,bx
  • mov dx,0000h
  • call gotoxy
  • call clear
  • mov ax,dgroup; place laddresse du segment de donnee dans ax
  • mov ds,ax; fait pointer ds au datastack
  • mov es,ax
  • call readdisk
  • xor bx,bx; initialise BX a 0
  • lea di,num
  • call clear
  • call afficheligne1
  • call CRLF
  • call CRLF
  • mov cx,16
  • mov dl,' '
  • call ecrire_char
  • call ecrire_char
  • call ecrire_char
  • call ecrire_char
  • numbertop:
  • mov dl,num[bx]
  • call ecrire_hex
  • mov dl,' '
  • call ecrire_char
  • inc bx
  • loop numbertop
  • mov cx,16
  • xor bx,bx
  • mov dl,' '
  • call ecrire_char
  • call ecrire_char
  • chiffre:
  • mov dl,tichiffre[bx]
  • call ecrire_char
  • inc bx
  • loop chiffre
  • call CRLF
  • mov cx,69
  • mov dl,' '
  • call ecrire_char
  • call ecrire_char
  • xor bx,bx
  • toprows:
  • mov dl,toprow[bx]
  • call ecrire_char
  • inc bx
  • loop toprows
  • call CRLF
  • mov cx,16
  • xor bx,bx
  • bouclette1:
  • mov dl,[di]
  • call ecrire_hex
  • inc di
  • mov dl,0bah
  • call ecrire_char
  • call donne
  • mov dl,0bah
  • call ecrire_char
  • call ecrire_char
  • call donne2
  • mov dl,0bah
  • call ecrire_char
  • call CRLF
  • loop bouclette1
  • xor bx,bx
  • mov cx,69
  • mov dl,' '
  • call ecrire_char
  • call ecrire_char
  • buttrows:
  • mov dl,buttrow[bx]
  • call ecrire_char
  • inc bx
  • loop buttrows
  • call affiche_curseur_fantome
  • call dispatcher
  • call writedisk
  • mov ah,4ch
  • int 21h
  • ;------------------------------------------------------------------------------------------------
  • donne proc
  • push cx
  • mov cx,16
  • mov dl,' '
  • call ecrire_char
  • bouclette2:
  • mov dl,secteur[bx]
  • call ecrire_hex
  • mov dl,' '
  • call ecrire_char
  • inc bx
  • loop bouclette2
  • pop cx
  • ret
  • donne endp
  • ;-------------------------------------------------------------------------------------------------
  • donne2 proc
  • push cx
  • push bx
  • mov cx,16
  • bouclette3:
  • mov dl,secteur[bx-16]
  • call ecrire_char
  • inc bx
  • loop bouclette3
  • pop bx
  • pop cx
  • ret
  • donne2 endp
  • ;------------------------------------------------------------------------
  • ;procedure pour ecrire un caractere ou ecrire un hexadecimal
  • ecrire_hex proc
  • push cx
  • push dx
  • mov dh,dl
  • mov cx,4
  • shr dl,cl
  • call ecrire_nombre_hex
  • mov dl,dh
  • and dl,0fh
  • call ecrire_nombre_hex
  • pop dx
  • pop cx
  • ret
  • ecrire_hex endp
  • public ecrire_nombre_hex
  • ecrire_nombre_hex proc
  • push dx
  • cmp dl,10
  • jae lettre_hex
  • add dl,"0"
  • jmp affiche_nombre
  • lettre_hex:
  • add dl,"A"-10
  • affiche_nombre:
  • call ecrire_char
  • pop dx
  • ret
  • ecrire_nombre_hex endp
  • public ecrire_char
  • ecrire_char proc
  • push ax
  • mov ah,02
  • cmp dl,09
  • je point
  • cmp dl,08
  • je point
  • cmp dl,07
  • je point
  • cmp dl,06
  • je point
  • cmp dl,13
  • je point
  • cmp dl,10
  • jne print
  • point:
  • mov dl,2eh
  • print:
  • int 21h
  • pop ax
  • ret
  • ecrire_char endp
  • ;-----------------------------------------------------------------------------------------
  • ;fonction pour passer a la ligne suivante
  • CRLF proc
  • push AX
  • PUSH DX
  • MOV AH,02H
  • MOV DL,CR
  • INT 21H
  • MOV DL,LF
  • INT 21H
  • POP DX
  • POP AX
  • RET
  • CRLF ENDP
  • ;-----------------------------------------------------------------------------------------
  • ;fonction pour lire sur le drive a:
  • readdisk proc
  • mov ah,02h
  • mov al,01; mov al,01
  • lea bx,secteur
  • mov ch,05h; mov ch,05
  • mov cl,03; mov cl,03
  • mov dh,00
  • mov dl,00h ; 00h = drive A 80h = drive c:
  • int 13h
  • ret
  • readdisk endp
  • ;-----------------------------------------------------------------------------------------
  • writedisk proc
  • mov ah,03h
  • mov al,01; mov al,01
  • lea bx,secteur
  • mov ch,05h; mov ch,05
  • mov cl,03; mov cl,03
  • mov dh,00
  • mov dl,00h ; 00h = drive A 80h = drive c:
  • int 13h
  • ret
  • writedisk endp
  • ;-------------------------------------------------------------------------------------------
  • ;fonction pour afficher une chaine de caractere
  • ecrire_chaine proc
  • push ax
  • push bx
  • push si
  • pushF
  • cld ; set direction flag pour compter en augmentant
  • mov si,dx ; place l'adresse de la chaine dans si
  • loop_chaine:
  • lodsb ; load string byte - place le contenu de la byte a l'adresse pointe par si dans al
  • or al,al ; pour savoir si on a trouver le 0
  • jz fin_de_chaine ; oui va a la fin de la chaine
  • mov dl,al ;non, affiche le caractere
  • call ecrire_char
  • jmp loop_chaine
  • fin_de_chaine:
  • popF
  • pop si
  • pop DX
  • pop AX
  • ret
  • ecrire_chaine endp
  • ;-------------------------------------------------------------------------------------------
  • ;fonction qui affiche les entetes
  • afficheligne1 proc
  • lea dx,entete1
  • call ecrire_chaine
  • lea dx,disque
  • call ecrire_chaine
  • mov dx,' '
  • call ecrire_char
  • lea dx,entete2
  • call ecrire_chaine
  • lea dx,piste
  • call ecrire_chaine
  • mov dx,' '
  • call ecrire_char
  • lea dx,entete3
  • call ecrire_chaine
  • lea dx,sector
  • call ecrire_chaine
  • mov dx,' '
  • call ecrire_char
  • lea dx,entete4
  • call ecrire_chaine
  • lea dx,tete
  • call ecrire_chaine
  • mov dx,' '
  • call ecrire_char
  • call ecrire_char
  • call ecrire_char
  • call ecrire_char
  • call ecrire_char
  • lea dx,entete5
  • call ecrire_chaine
  • ret
  • afficheligne1 endp
  • ;------------------------------------------------------------------------------------------------
  • ;cette fonction clear tous ce qu il a a lecran
  • clear proc
  • push ax
  • push bx
  • push cx
  • push dx
  • mov ah,0bh
  • mov bh,05h ; couleur du background + foreground 02 au depart
  • mov cx,0000h
  • mov dx,404fh
  • int 10h
  • pop dx
  • pop cx
  • pop bx
  • pop ax
  • ret
  • clear endp
  • ;-------------------------------------------------------------------------------------------------
  • ;x = dh, y = dl
  • gotoxy proc
  • push ax
  • push bx
  • mov ah,02h
  • mov bh,00
  • int 10h
  • pop bx
  • pop ax
  • ret
  • gotoxy endp
  • ;-------------------------------------------------------------------------------------------------
  • ; cx = nombre de caractere dl = nouvelle attribu
  • ecrire_attribu_n_fois proc
  • push ax
  • push bx
  • push cx ;!
  • push dx
  • mov bl,dl
  • xor bh,bh
  • mov dx,cx ; mov dx,cx
  • boucle_attr:
  • mov cx,1
  • mov ah,08;lire le caractere sous le curseur
  • int 10h
  • mov ah,09;ecrire le caractere avec sa nouvelle attribu
  • int 10h
  • call curseur_droit
  • dec dx
  • jnz boucle_attr
  • pop dx
  • pop cx
  • pop bx
  • pop ax
  • ret
  • ecrire_attribu_n_fois endp
  • ;-----------------------------------------------------------------------------------------
  • curseur_droit proc
  • push ax
  • push bx
  • push cx
  • push dx
  • mov ah,03h
  • mov bh,00
  • int 10h
  • inc dl
  • call gotoxy
  • pop dx
  • pop cx
  • pop bx
  • pop ax
  • ret
  • curseur_droit endp
  • ;------------------------------------------------------------------------------------------
  • move_to_hex_position proc
  • push ax
  • push cx
  • push dx
  • xor ah,ah
  • mov dh,2;ranger au dessus du display
  • add dh,02
  • add dh,curseur_fantome_y
  • mov dl,04;colonne a gauche du display
  • mov cl,03 ; 3 car chaque valeur est compose de 3 caracteur
  • mov al,curseur_fantome_x
  • mul cl
  • add dl,al
  • call gotoxy
  • pop dx
  • pop cx
  • pop ax
  • ret
  • move_to_hex_position endp
  • ;------------------------------------------------------------------------------------------
  • move_to_ascii_position proc
  • push ax
  • push dx
  • mov dh,02;ranger au dessus du display
  • add dh,02
  • add dh,curseur_fantome_y
  • mov dl,54 ; 59 peut varier
  • add dl,curseur_fantome_x
  • call gotoxy
  • pop dx
  • pop ax
  • ret
  • move_to_ascii_position endp
  • ;------------------------------------------------------------------------------------------
  • save_real_cursor proc
  • push ax
  • push bx
  • push cx
  • push dx
  • mov ah,03; read cursor position
  • xor bh,bh
  • int 10h; retourne ydans dl et x dans dh
  • mov vrai_curseur_x,dh
  • mov vrai_curseur_y,dl
  • pop dx
  • pop cx
  • pop bx
  • pop ax
  • ret
  • save_real_cursor endp
  • ;------------------------------------------------------------------------------------------
  • restore_real_cursor proc
  • push dx
  • mov dl,vrai_curseur_y
  • mov dh,vrai_curseur_x
  • call gotoxy
  • pop dx
  • ret
  • restore_real_cursor endp
  • ;------------------------------------------------------------------------------------------
  • affiche_curseur_fantome proc
  • push ax
  • push bx
  • push cx
  • push dx
  • call save_real_cursor
  • call move_to_hex_position
  • mov cx,3; curseur fantome 3 caractere de large
  • mov dl,70h ;video inverse
  • call ecrire_attribu_n_fois
  • call move_to_ascii_position
  • mov cx,1
  • call ecrire_attribu_n_fois
  • call restore_real_cursor
  • pop dx
  • pop cx
  • pop bx
  • pop ax
  • ret
  • affiche_curseur_fantome endp
  • ;------------------------------------------------------------------------------------------
  • efface_curseur_fantome proc
  • push cx
  • push dx
  • call save_real_cursor
  • call move_to_hex_position
  • mov cx,3; curseur fantome 3 caractere de large
  • mov dl,02 ;video normale
  • call ecrire_attribu_n_fois
  • call move_to_ascii_position
  • mov cx,01
  • mov dl,02
  • call ecrire_attribu_n_fois
  • call restore_real_cursor
  • pop dx
  • pop cx
  • ret
  • efface_curseur_fantome endp
  • ;------------------------------------------------------------------------------------------
  • ;==========================================================================================
  • ;control procedure
  • ;input proc
  • ; push ax
  • ; push bx
  • ; push cx
  • ; push dx
  • ;masterboucle:
  • ; mov ah,10h
  • ; int 16h
  • ; cmp ah,48h ;touche haut??
  • ; je fantome_haut
  • ;
  • ; cmp ah,50h; touche bas??
  • ; je fantome_bas
  • ;
  • ; cmp ah,4bh
  • ; je fantome_gauche ; touche gasuche???
  • ;
  • ; cmp ah,4dh
  • ; je fantome_droit ; touche droite ???
  • ;
  • ; cmp ah,1b
  • ; je exit ; touche esc???
  • fantome_haut proc
  • call efface_curseur_fantome
  • dec curseur_fantome_y
  • jns plusgrand
  • mov curseur_fantome_y,15
  • plusgrand:
  • call affiche_curseur_fantome
  • ;jmp masterboucle
  • ret
  • fantome_haut endp
  • fantome_bas proc
  • call efface_curseur_fantome
  • inc curseur_fantome_y
  • cmp curseur_fantome_y,16
  • jl plusgrand2
  • ;mov sector_offset,16
  • call touteafficherbas
  • call efface_curseur_fantome
  • mov curseur_fantome_y,0
  • plusgrand2:
  • call affiche_curseur_fantome
  • ;jmp masterboucle
  • ret
  • fantome_bas endp
  • fantome_gauche proc
  • call efface_curseur_fantome
  • dec curseur_fantome_x
  • jns plusgrand3
  • mov curseur_fantome_x,15
  • plusgrand3:
  • call affiche_curseur_fantome
  • ;jmp masterboucle
  • ret
  • fantome_gauche endp
  • fantome_droit proc
  • call efface_curseur_fantome
  • inc curseur_fantome_x
  • cmp curseur_fantome_x,16
  • jl plusgrand4
  • mov curseur_fantome_x,0
  • plusgrand4:
  • call affiche_curseur_fantome
  • ;jmp masterboucle
  • ret
  • fantome_droit endp
  • ;exit:
  • ; push dx
  • ; push cx
  • ; push bx
  • ; push ax
  • ; ret
  • ;input endp
  • ;==========================================================================================
  • ;cette fonction lit un caractere ascii en retourne dans ALle code du caractere sauf si
  • ;AH est = 1
  • ;AH = 0 si caractere ascii
  • ;AH = 1 si clef etendue
  • readbyte proc
  • xor ah,ah
  • int 16h
  • or al,al; est-ce un caractere etendue?
  • jz caractere_etendue1
  • non_etendu:
  • xor ah,ah;retourne seulement le code ascii
  • findelecture:
  • ret
  • caractere_etendue1:
  • mov al,ah
  • mov ah,01
  • jmp findelecture
  • readbyte endp
  • ;------------------------------------------------------------------------------------------
  • dispatcher proc
  • push ax
  • push bx
  • dispatch_loop:
  • call lire
  • or ah,ah
  • js dispatch_loop
  • jnz clef_etendue
  • ;si caractere ascii pour linstant on fait rien avec
  • ;si le caractere lue n'est pas une clef speciale
  • mov dl,al
  • call edit_byte
  • clef_etendue:
  • cmp al,68; clef de sortie 1b = esc ou 68 = f10
  • je fin
  • lea bx,dispatch_table
  • boucle_recherche:
  • cmp byte ptr[bx],0 ;fin de table
  • je pas_dans_la_table
  • cmp al,[bx] ; est-cette entre de la table?
  • je dispatch ; fait appelle a la fonction
  • add bx,03 ; non? try the other one!!
  • jmp boucle_recherche
  • dispatch:
  • inc bx; pointe a ladresse de la procedure
  • call word ptr[bx]; fait appelle a la bonne proc
  • jmp dispatch_loop
  • pas_dans_la_table:
  • jmp dispatch_loop
  • fin:
  • pop bx
  • pop ax
  • ret
  • dispatcher endp
  • ;=========================================================================
  • ;----------------------------------------------------------------------------------------
  • read_string proc
  • ; extrn ecrire_char proc
  • ;ds:dx addresse du keyboard buffer
  • ;retourne 0 si pas de caractere lu
  • ;retourne -1 si caractere special
  • ;retourne le nombre de caractere lu
  • push ax
  • push bx
  • push si
  • mov si,dx ; utilise "si" comme index
  • start:
  • mov bx,02; bx soit le offset qui pointe le debut du buffer
  • call readbyte ; lire une clef du keyboard
  • or ah,ah ;est-ce un caractere etendu???
  • jnz caractere_etendu
  • chaine_non_etendue:
  • cmp al,cr ; carriage return??
  • je fin_input
  • cmp al,bs
  • jne pas_bs
  • call backspace
  • cmp bl,02 ; est-ce que le buffer est vide?
  • je start
  • jmp lire_caractere_suivant
  • pas_bs:
  • cmp al,escape
  • je efface_buffer
  • cmp bl,[si] ;verifier si le buffer est plein
  • ja bufferplein; jump above
  • mov [si+bx],al ; mov [si+bx]mettre le caractere dans le buffer
  • inc bx ; bx pointe au prochain caractere
  • ;affiche le caractere a lecran
  • push dx
  • mov dl,al
  • call ecrire_char
  • pop dx
  • lire_caractere_suivant:
  • call readbyte
  • or ah,ah;un caractere etendu n'est pas acceptable si le buffer n'est pas vide
  • jz chaine_non_etendue
  • ;signale une erreur en emmetant un beep sonore au display (chr$(7))
  • signale_erreur:
  • push dx
  • mov dl,07
  • mov ah,02
  • int 21h
  • pop dx
  • jmp lire_caractere_suivant
  • efface_buffer:
  • push cx
  • mov cl,[si];recule le nombremax de caractere
  • xor ch,ch
  • boucle_efface:
  • call backspace
  • loop boucle_efface
  • pop cx
  • jmp start
  • bufferplein:
  • jmp signale_erreur
  • caractere_etendu:
  • mov [si+2],al;place le caractere dans le buffer
  • mov bl,0ffh;nombre de caractgere lue = -1(caractere etendue)
  • jmp fin_chaine
  • fin_input:
  • sub bl,02
  • fin_chaine:
  • mov [si+1],bl
  • pop si
  • pop bx
  • pop ax
  • ret
  • read_string endp
  • ;------------------------------------------------------------------------------------------
  • backspace proc
  • push ax
  • push dx
  • cmp bx,02
  • je end_bs
  • dec bx
  • mov dl,bs
  • mov ah,02
  • int 21h
  • mov dl,20h;blank espace
  • int 21h
  • call fantome_gauche
  • end_bs:
  • pop dx
  • pop ax
  • ret
  • backspace endp
  • ;--------------------------------------------------------------------------------------------
  • ;public lire
  • ;lire un caractere ascii ou un nombre hex
  • ;retourne al code du caractere (amoin que ah=0)
  • ;ah=0 si caractere ascii ou nombre hex
  • ;ah=1 si clef special
  • ;ah=-1 si pas rien lu
  • lire proc
  • push dx
  • mov char_num_limit,2 ; mov char_num_limit,3
  • lea dx,keyboard_input
  • call read_string
  • cmp num_char_read,1
  • je ascii_input
  • jb pas_de_caractere ; jump below
  • cmp byte ptr num_char_read,0ffh ; clef special
  • je clef_special
  • ;ajouter code pour traiter nombre hex
  • pas_de_caractere:
  • xor ah,ah
  • not ah
  • jmp fin2
  • ascii_input:
  • mov al,char
  • xor ah,ah
  • jmp fin2
  • clef_special:
  • mov al,char[0]
  • mov ah,1
  • fin2:
  • pop dx
  • ret
  • lire endp
  • ;===============================================================================
  • edit_byte proc
  • push dx
  • call save_real_cursor
  • call move_to_hex_position
  • ;call curseur_droit
  • call ecrire_hex
  • call move_to_ascii_position
  • call ecrire_char
  • call restore_real_cursor
  • call affiche_curseur_fantome
  • call ecrire_en_memoire
  • pop dx
  • ret
  • edit_byte endp
  • ;-----------------------------------------------------------------------------------
  • ecrire_en_memoire proc
  • push ax
  • push bx
  • push cx
  • lea bx,secteur
  • mov al,curseur_fantome_y
  • xor ah,ah
  • mov cl,04
  • shl ax,cl
  • add bx,ax
  • mov al,curseur_fantome_x
  • xor ah,ah
  • add bx,ax
  • mov secteur[bx-161],dl;mov secteur[bx-161]
  • pop cx
  • pop bx
  • pop ax
  • ret
  • ecrire_en_memoire endp
  • ;-------------------------------------------------------------------------------------
  • scrolldown proc
  • push dx
  • call efface_curseur_fantome
  • call save_real_cursor
  • xor dl,dl
  • mov dh,00;lines_before_sector
  • add dh,02
  • call gotoxy
  • mov bx,256
  • call CRLf
  • call touteafficherbas
  • ;mov sector_offset,dx
  • call donne
  • call donne2
  • call restore_real_cursor
  • mov curseur_fantome_y,0
  • call affiche_curseur_fantome
  • pop dx
  • ret
  • scrolldown endp
  • ;---------------------------------------------------------------------------------------
  • touteafficherbas proc
  • mov dx,0000h
  • call gotoxy
  • call clear
  • mov ax,dgroup; place laddresse du segment de donnee dans ax
  • mov ds,ax; fait pointer ds au datastack
  • mov es,ax
  • call readdisk
  • xor bx,bx; initialise BX a 0
  • lea di,num
  • call clear
  • call afficheligne1
  • call CRLF
  • call CRLF
  • mov cx,16
  • mov dl,' '
  • call ecrire_char
  • call ecrire_char
  • call ecrire_char
  • call ecrire_char
  • numbertop2:
  • mov dl,num[bx]
  • call ecrire_hex
  • mov dl,' '
  • call ecrire_char
  • inc bx
  • loop numbertop2
  • mov cx,16
  • xor bx,bx
  • mov dl,' '
  • call ecrire_char
  • call ecrire_char
  • chiffre2:
  • mov dl,tichiffre[bx]
  • call ecrire_char
  • inc bx
  • loop chiffre2
  • call CRLF
  • mov cx,69
  • mov dl,' '
  • call ecrire_char
  • call ecrire_char
  • xor bx,bx
  • toprows2:
  • mov dl,toprow[bx]
  • call ecrire_char
  • inc bx
  • loop toprows2
  • call CRLF
  • mov cx,16
  • mov bx,256;256
  • bouclette12:
  • mov dl,[di]
  • call ecrire_hex
  • inc di
  • mov dl,0bah
  • call ecrire_char
  • call donne
  • mov dl,0bah
  • call ecrire_char
  • call ecrire_char
  • call donne2
  • mov dl,0bah
  • call ecrire_char
  • call CRLF
  • loop bouclette12
  • mov bx,00;xor bx,bx
  • mov cx,69
  • mov dl,' '
  • call ecrire_char
  • call ecrire_char
  • xor bx,bx
  • buttrows2:
  • mov dl,buttrow[bx]
  • call ecrire_char
  • inc bx
  • loop buttrows2
  • call affiche_curseur_fantome
  • ret
  • touteafficherbas endp
  • ;----------------------------------------------------------------------------
  • main endp
  • end
  • ;program by Eric Gagnon
  • ;INFO2003
  • ;02/04
dosseg
model small
.stack
.data

       public secteur

       	entete1 db 'Disque:',0
	entete2 db 'Piste:',0
	entete3 db 'Secteur:',0
	entete4 db 'Tete:',0
	entete5 db 'menu2.exe  programmer par Eric Gagnon',0

	disque	db 'A',0
	piste 	db '5',0
	sector db '3',0
	tete 	db '0',0

	bs equ 08; backspace
	escape equ 1b; sortir


	CR EQU 13; CARRACTERE QUI REVIENT AU DEBUT DE LA LIGNE
	LF EQU 10; CHANGE DE LIGNE	
	num db  00h,01h,02h,03h,04h,05h,06h,07h,08h,09h,0Ah,0Bh,0Ch,0Dh,0Eh,0Fh
	toprow db 0c9h, 12 dup(0cdh), 0cbh, 11 dup(0cdh), 0cbh,11 dup(0cdh),0cbh,12 dup(0cdh),0bbh,0c9h,16 dup(0cdh),0bbh
	
	secteur db 512 dup (?)

	buttrow db 0c8h,12 dup(0cdh),0cah,11 dup(0cdh),0cah,11 dup(0cdh),0cah,12 dup(0cdh),0bch,0c8h,16 dup(0cdh),0bch
	tichiffre db '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
	
	curseur_fantome_x db 00
	curseur_fantome_y db 00
	vrai_curseur_x db 00
	vrai_curseur_y db 00
	
	dispatch_table	db 48h
			dw offset fantome_haut;dw offset_text: fantome_haut
			db 50h
			dw offset fantome_bas
			db 4bh
			dw offset fantome_gauche
			db 77
			dw offset fantome_droit
			db 0;fin du dispatch
	
	keyboard_input label byte
		char_num_limit db 0; va etre setter a 2 pour notre programme
		num_char_read db 0
		char db 80 dup (0)
		;cr equ 13; carriage return CRLR
		


	
	
	
.code
main proc
	xor bx,bx
	mov dx,0000h
	call gotoxy
	call clear
	mov ax,dgroup; place laddresse du segment de donnee dans ax
	mov ds,ax; fait pointer ds au datastack
	mov es,ax
	call readdisk
	xor bx,bx; initialise BX a 0
	lea di,num
	call clear
	call afficheligne1
	call CRLF
	call CRLF
	mov cx,16
	mov dl,' '
	call ecrire_char
	call ecrire_char
	call ecrire_char
	call ecrire_char

numbertop:
	
	mov dl,num[bx]
	call ecrire_hex
	mov dl,' '
	call ecrire_char
	inc bx
	loop numbertop
	mov cx,16
	xor bx,bx
	mov dl,' '
	call ecrire_char
	call ecrire_char
chiffre:
	mov dl,tichiffre[bx]
	call ecrire_char
	inc bx
	loop chiffre
	
	call CRLF
	mov cx,69
	
	mov dl,' '
	call ecrire_char
	call ecrire_char
	xor bx,bx
toprows:
	
	mov dl,toprow[bx]
	call ecrire_char
	inc bx
	loop toprows
	
	call CRLF
	mov cx,16
	xor bx,bx

bouclette1:
	mov dl,[di]
	call ecrire_hex
	inc di
	mov dl,0bah
	call ecrire_char
	call donne
	mov dl,0bah
	call ecrire_char
	call ecrire_char
	call donne2
	mov dl,0bah
	call ecrire_char
	call CRLF
	loop bouclette1
	
	xor bx,bx
	mov cx,69
	mov dl,' '
	call ecrire_char
	call ecrire_char
buttrows:
	
	mov dl,buttrow[bx]
	call ecrire_char
	inc bx
	loop buttrows
	
	call affiche_curseur_fantome
	call dispatcher
	call writedisk
	
	mov ah,4ch
	int 21h
	
	
;------------------------------------------------------------------------------------------------	

donne proc
	push cx
	mov cx,16
	mov dl,' '
	call ecrire_char

bouclette2:	
	mov dl,secteur[bx]
	call ecrire_hex
        mov dl,' '
	call ecrire_char
	inc bx
	loop bouclette2
	
	pop cx
	ret
donne endp

;-------------------------------------------------------------------------------------------------
donne2 proc
	push cx
	push bx
	mov cx,16
	
	
bouclette3:
	mov dl,secteur[bx-16]
	call ecrire_char
	inc bx
	loop bouclette3
	
	pop bx
	pop cx
	ret
donne2 endp

	



;------------------------------------------------------------------------
;procedure pour ecrire un caractere ou ecrire un hexadecimal
ecrire_hex proc
	push cx
	push dx
	mov dh,dl
	mov cx,4
	shr dl,cl
	call ecrire_nombre_hex
	mov dl,dh
	and dl,0fh
	call ecrire_nombre_hex
	pop dx
	pop cx
	ret
ecrire_hex endp

	public ecrire_nombre_hex

ecrire_nombre_hex proc

	push dx
	cmp dl,10
	jae lettre_hex
	add dl,"0"
	jmp affiche_nombre
lettre_hex:
	add dl,"A"-10
affiche_nombre:
	call ecrire_char
	pop dx
	ret
ecrire_nombre_hex endp


	public ecrire_char

ecrire_char proc

	push ax
	mov ah,02
	cmp dl,09
	je point
	cmp dl,08
	je point
	cmp dl,07
	je point
	cmp dl,06
	je point
	cmp dl,13
	je point
	cmp dl,10
	jne print
point:
	mov dl,2eh
print:	
	int 21h
	pop ax
	ret
ecrire_char endp

;-----------------------------------------------------------------------------------------
;fonction pour passer a la ligne suivante
CRLF proc
	push AX
	PUSH DX
	MOV AH,02H
	MOV DL,CR
	INT 21H
	MOV DL,LF
	INT 21H
	POP DX
	POP AX
	RET
CRLF ENDP
;-----------------------------------------------------------------------------------------
;fonction pour lire sur le drive a:
readdisk proc

	mov ah,02h
	mov al,01;	mov al,01
	lea bx,secteur
	mov ch,05h; 	mov ch,05
	mov cl,03;	mov cl,03
	mov dh,00
	mov dl,00h ; 00h = drive A      80h = drive c:
	int 13h
	ret

readdisk endp	
	
;-----------------------------------------------------------------------------------------
writedisk proc

	mov ah,03h
	mov al,01;	mov al,01
	lea bx,secteur
	mov ch,05h; 	mov ch,05
	mov cl,03;	mov cl,03
	mov dh,00
	mov dl,00h ; 00h = drive A      80h = drive c:
	int 13h
	ret

writedisk endp	
;-------------------------------------------------------------------------------------------
;fonction pour afficher une chaine de caractere
ecrire_chaine proc
	push ax
	push bx
	push si
	pushF
	cld  ; set direction flag pour compter en augmentant
	mov si,dx ; place l'adresse de la chaine dans si
loop_chaine:
	lodsb ; load string byte - place le contenu de la byte a l'adresse pointe par si dans al
	or al,al ; pour savoir si on a trouver le 0
	jz fin_de_chaine ; oui va a  la fin de la chaine
	mov dl,al	;non, affiche le caractere
	call ecrire_char
	jmp loop_chaine
fin_de_chaine:
	popF
	pop si
	pop DX
	pop AX
	ret
ecrire_chaine endp
;-------------------------------------------------------------------------------------------
;fonction qui affiche les entetes
afficheligne1 proc
	lea dx,entete1
	call ecrire_chaine
	lea dx,disque
	call ecrire_chaine
	mov dx,' '
	call ecrire_char
	lea dx,entete2
	call ecrire_chaine
	lea dx,piste
	call ecrire_chaine
	mov dx,' '
	call ecrire_char
	lea dx,entete3
	call ecrire_chaine
	lea dx,sector
	call ecrire_chaine
	mov dx,' '
	call ecrire_char
	lea dx,entete4
	call ecrire_chaine
	lea dx,tete
	call ecrire_chaine
	mov dx,' '
	call ecrire_char
	call ecrire_char
	call ecrire_char
	call ecrire_char
	call ecrire_char
	lea dx,entete5
	call ecrire_chaine
	ret
afficheligne1 endp
;------------------------------------------------------------------------------------------------
;cette fonction clear tous ce qu il a a lecran
clear proc
	push ax
	push bx
	push cx
	push dx
	mov ah,0bh
	mov bh,05h  ;  couleur du background + foreground   02 au depart
	mov cx,0000h
	mov dx,404fh
	int 10h
	pop dx
	pop cx
	pop bx
	pop ax
	ret
clear endp

;-------------------------------------------------------------------------------------------------
;x = dh,   y = dl

gotoxy proc
	push ax
	push bx
	mov ah,02h
	mov bh,00
	int 10h
	pop bx
	pop ax
	ret
gotoxy endp
;-------------------------------------------------------------------------------------------------
; cx = nombre de caractere   dl = nouvelle attribu

ecrire_attribu_n_fois proc
	push ax
	push bx
	push cx ;!
	push dx
	mov bl,dl
	xor  bh,bh
	mov dx,cx ; mov dx,cx
	
boucle_attr:
	mov cx,1
	mov ah,08;lire le caractere sous le curseur
	int 10h
	mov ah,09;ecrire le caractere avec sa nouvelle attribu
	int 10h
	call curseur_droit
	dec dx
	jnz boucle_attr
	pop dx
	pop cx
	pop bx
	pop ax
	ret
ecrire_attribu_n_fois endp
;-----------------------------------------------------------------------------------------
curseur_droit proc
	push ax
	push bx
	push cx
	push dx
	mov ah,03h
	mov bh,00
	int 10h
	inc dl
	call gotoxy
	pop dx
	pop cx
	pop bx
	pop ax
	ret
	
curseur_droit endp
;------------------------------------------------------------------------------------------	
move_to_hex_position proc
	push ax
	push cx
	push dx
	xor ah,ah
	mov dh,2;ranger au dessus du display
	add dh,02
	add dh,curseur_fantome_y
	mov dl,04;colonne  a gauche du display
	mov cl,03 ; 3 car chaque valeur est compose de 3 caracteur
	mov al,curseur_fantome_x
	mul cl
	add dl,al
	call gotoxy
	pop dx
	pop cx
	pop ax
	ret
move_to_hex_position endp
;------------------------------------------------------------------------------------------	
move_to_ascii_position proc
	push ax
	push dx
	mov dh,02;ranger au dessus du display
	add dh,02
	add dh,curseur_fantome_y
	mov dl,54 ; 59 peut varier
	add dl,curseur_fantome_x
	call gotoxy
	pop dx
	pop ax
	ret
move_to_ascii_position endp
;------------------------------------------------------------------------------------------
save_real_cursor proc
	push ax
	push bx
	push cx
	push dx
	mov ah,03; read cursor position
	xor bh,bh
	int 10h; retourne ydans dl et x dans dh
	mov vrai_curseur_x,dh
	mov vrai_curseur_y,dl
	pop dx
	pop cx
	pop bx
	pop ax
	ret
save_real_cursor endp
;------------------------------------------------------------------------------------------
restore_real_cursor proc
	push dx
	mov dl,vrai_curseur_y
	mov dh,vrai_curseur_x
	call gotoxy
	pop dx
	ret
restore_real_cursor endp
;------------------------------------------------------------------------------------------


affiche_curseur_fantome proc
	push ax
	push bx	
	push cx
	push dx
	call save_real_cursor
	call move_to_hex_position
	mov cx,3; curseur fantome 3 caractere de large
	mov dl,70h	;video inverse
	call ecrire_attribu_n_fois
	call move_to_ascii_position
	mov cx,1
	call ecrire_attribu_n_fois
	call restore_real_cursor
	pop dx
	pop cx
	pop bx
	pop ax
	ret
affiche_curseur_fantome endp



;------------------------------------------------------------------------------------------
efface_curseur_fantome proc
	
	push cx
	push dx
	call save_real_cursor
	call move_to_hex_position
	mov cx,3; curseur fantome 3 caractere de large
	mov dl,02	;video normale
	call ecrire_attribu_n_fois
	call move_to_ascii_position
	mov cx,01
	mov dl,02
	call ecrire_attribu_n_fois
	call restore_real_cursor
	pop dx
	pop cx
	ret
efface_curseur_fantome endp
;------------------------------------------------------------------------------------------
;==========================================================================================
;control procedure

;input proc
;	push ax
;	push bx
;	push cx
;	push dx
;masterboucle:
;	mov ah,10h
;	int 16h
;	cmp ah,48h ;touche haut??
;	je fantome_haut 
;
;	cmp ah,50h; touche bas??
;	je fantome_bas
;
;	cmp ah,4bh
;	je fantome_gauche ; touche gasuche???
;
;	cmp ah,4dh
;	je fantome_droit ; touche droite ???
;
;	cmp ah,1b
;	je exit ; touche esc???


fantome_haut	proc
	call efface_curseur_fantome
	dec curseur_fantome_y
	jns plusgrand
	mov curseur_fantome_y,15
plusgrand:
	call affiche_curseur_fantome
	;jmp masterboucle
	ret
fantome_haut endp

fantome_bas	proc
	call efface_curseur_fantome
	inc curseur_fantome_y
	cmp curseur_fantome_y,16
	jl plusgrand2
	;mov sector_offset,16
	call touteafficherbas
	call efface_curseur_fantome
	mov curseur_fantome_y,0
plusgrand2:
	call affiche_curseur_fantome
	;jmp masterboucle
	ret
fantome_bas endp

fantome_gauche proc
	call efface_curseur_fantome
	dec curseur_fantome_x
	jns plusgrand3
	mov curseur_fantome_x,15
plusgrand3:
	call affiche_curseur_fantome
	;jmp masterboucle
	ret
fantome_gauche endp

fantome_droit	proc
	call efface_curseur_fantome
	inc curseur_fantome_x
	cmp curseur_fantome_x,16
	jl plusgrand4
	mov curseur_fantome_x,0
plusgrand4:
	call affiche_curseur_fantome
	;jmp masterboucle
	ret
fantome_droit endp
;exit:	
;	push dx
;	push cx
;	push bx
;	push ax
;	ret
;input endp

;==========================================================================================	
;cette fonction lit un caractere ascii en retourne dans ALle code du caractere sauf si
;AH est = 1
;AH = 0 si caractere ascii
;AH = 1 si clef etendue
readbyte proc
	xor ah,ah
	int 16h
	or al,al; est-ce un caractere etendue?
	jz caractere_etendue1
non_etendu:
	xor ah,ah;retourne seulement le code ascii

findelecture:
	ret
caractere_etendue1:
	mov al,ah
	mov ah,01
	jmp findelecture
readbyte endp
;------------------------------------------------------------------------------------------
dispatcher proc
	push ax
	push bx
dispatch_loop:
	
	call lire
	or ah,ah
	js dispatch_loop
	jnz clef_etendue
	;si caractere ascii pour linstant on fait rien avec
	;si le caractere lue n'est pas une clef speciale
	mov dl,al
	call edit_byte
clef_etendue:
	cmp al,68; clef de sortie  1b = esc   ou 68 = f10
	je fin
	lea bx,dispatch_table
boucle_recherche:
	cmp byte ptr[bx],0 ;fin de table
	je pas_dans_la_table
	cmp al,[bx] ; est-cette entre de la table?
	je dispatch ; fait appelle a la fonction
	add bx,03 ; non? try the other one!!
	jmp boucle_recherche
dispatch:
	inc bx; pointe a ladresse de la procedure
	call word ptr[bx]; fait appelle a la bonne proc
	jmp dispatch_loop
pas_dans_la_table:
	jmp dispatch_loop
fin:
	pop bx
	pop ax
	ret

dispatcher endp


;=========================================================================


;----------------------------------------------------------------------------------------
read_string proc
	;	extrn ecrire_char proc
	;ds:dx addresse du keyboard buffer
	;retourne 0  si pas de caractere lu
	;retourne -1 si caractere special
	;retourne le nombre de caractere lu
	push ax
	push bx
	push si
	mov si,dx ; utilise "si" comme index

 start:
	mov bx,02; bx soit le offset qui pointe le debut du buffer
	call readbyte	; lire une clef du keyboard
	or ah,ah ;est-ce un caractere etendu???  
	jnz caractere_etendu

chaine_non_etendue:
	cmp al,cr	; carriage return??
	je fin_input
	cmp al,bs
	jne pas_bs
	call backspace
	cmp bl,02 ; est-ce que le buffer est vide?
	je start
	jmp lire_caractere_suivant

pas_bs:
	cmp al,escape
	je efface_buffer
	cmp bl,[si] ;verifier si le buffer est plein
	ja bufferplein; jump above
	mov [si+bx],al ; mov [si+bx]mettre le caractere dans le buffer
	inc bx ; bx pointe au prochain caractere

;affiche le caractere a lecran
	push dx
	mov dl,al
	call ecrire_char
	pop dx
	
lire_caractere_suivant:
	call readbyte
	or ah,ah;un caractere etendu n'est pas acceptable si le buffer n'est pas vide
	jz chaine_non_etendue
	;signale une erreur en emmetant un beep sonore au display (chr$(7))

signale_erreur:
	push dx
	mov dl,07
	mov ah,02
	int 21h
	pop dx
	jmp lire_caractere_suivant

efface_buffer:
	push cx
	mov cl,[si];recule le nombremax de caractere
	xor ch,ch

boucle_efface:
	call backspace
	loop boucle_efface
	
	pop cx
	jmp start

bufferplein:
	jmp signale_erreur

caractere_etendu:
	mov [si+2],al;place le caractere dans le buffer
	mov bl,0ffh;nombre de caractgere lue = -1(caractere etendue)
	jmp fin_chaine

fin_input:
	sub bl,02
fin_chaine:
	mov [si+1],bl
	pop si
	pop bx
	pop ax
	ret
read_string endp

;------------------------------------------------------------------------------------------
backspace proc
	push ax
	push dx
	cmp bx,02
	je end_bs
	dec bx
	mov dl,bs
	mov ah,02
	int 21h
	mov dl,20h;blank espace
	int 21h
	call fantome_gauche
end_bs:
	pop dx
	pop ax
	ret
backspace endp
;--------------------------------------------------------------------------------------------
;public lire
;lire un caractere ascii ou un nombre hex
;retourne al code du caractere (amoin que ah=0)
;ah=0 si caractere ascii ou nombre hex
;ah=1 si clef special
;ah=-1 si pas rien lu


lire proc 
	push dx
	mov char_num_limit,2 ; mov char_num_limit,3
	lea dx,keyboard_input
	call read_string
	cmp num_char_read,1
	je ascii_input
	jb pas_de_caractere ; jump below
	cmp byte ptr num_char_read,0ffh ; clef special
	je clef_special
	;ajouter code pour traiter nombre hex
pas_de_caractere:
	xor ah,ah
	not ah
	jmp fin2

ascii_input:
	mov al,char
	xor ah,ah
	jmp fin2
	clef_special:
	mov al,char[0]	
	mov ah,1
fin2:
	pop dx
	ret


lire endp
;===============================================================================
edit_byte proc
	push dx
	call save_real_cursor
	call move_to_hex_position
	;call curseur_droit
	call ecrire_hex
        call move_to_ascii_position
	call ecrire_char
	call restore_real_cursor
        call affiche_curseur_fantome
	call ecrire_en_memoire
	pop dx
	ret
edit_byte endp
;-----------------------------------------------------------------------------------
ecrire_en_memoire proc
	push ax
	push bx
	push cx
	lea bx,secteur
	mov al,curseur_fantome_y
	xor ah,ah
	mov cl,04
	shl ax,cl
	add bx,ax
	mov al,curseur_fantome_x
	xor ah,ah
	add bx,ax
	mov secteur[bx-161],dl;mov secteur[bx-161]
	pop cx
	pop bx
	pop ax
	ret
ecrire_en_memoire endp
;-------------------------------------------------------------------------------------
scrolldown proc
	push dx
	call efface_curseur_fantome
	call save_real_cursor
	xor dl,dl
	mov dh,00;lines_before_sector
	add dh,02
	call gotoxy
	mov bx,256
	call CRLf
	call touteafficherbas
	;mov sector_offset,dx
	call donne
	call donne2
	call restore_real_cursor
	mov curseur_fantome_y,0
	call affiche_curseur_fantome
	pop dx
	ret
scrolldown endp	

;---------------------------------------------------------------------------------------
touteafficherbas proc
	
	mov dx,0000h
	call gotoxy
	call clear
	mov ax,dgroup; place laddresse du segment de donnee dans ax
	mov ds,ax; fait pointer ds au datastack
	mov es,ax

	call readdisk
	xor bx,bx; initialise BX a 0
	lea di,num
	call clear
	call afficheligne1
	call CRLF
	call CRLF
	mov cx,16
	mov dl,' '
	call ecrire_char
	call ecrire_char
	call ecrire_char
	call ecrire_char

numbertop2:
	
	mov dl,num[bx]
	call ecrire_hex
	mov dl,' '
	call ecrire_char
	inc bx
	loop numbertop2
	mov cx,16
	xor bx,bx
	mov dl,' '
	call ecrire_char
	call ecrire_char
chiffre2:
	mov dl,tichiffre[bx]
	call ecrire_char
	inc bx
	loop chiffre2
	
	call CRLF
	mov cx,69
	
	mov dl,' '
	call ecrire_char
	call ecrire_char
	xor bx,bx
toprows2:
	
	mov dl,toprow[bx]
	call ecrire_char
	inc bx
	loop toprows2
	
	call CRLF
	mov cx,16
	mov bx,256;256

bouclette12:
	mov dl,[di]
	call ecrire_hex
	inc di
	mov dl,0bah
	call ecrire_char
	call donne
	mov dl,0bah
	call ecrire_char
	call ecrire_char
	call donne2
	mov dl,0bah
	call ecrire_char
	call CRLF
	loop bouclette12
	
	mov bx,00;xor bx,bx
	mov cx,69
	mov dl,' '
	call ecrire_char
	call ecrire_char
	xor bx,bx
buttrows2:
	
	mov dl,buttrow[bx]
	call ecrire_char
	inc bx
	loop buttrows2
	
	call affiche_curseur_fantome
	ret

touteafficherbas endp
;----------------------------------------------------------------------------

main endp
end


;program by Eric Gagnon
;INFO2003
;02/04



 Sources de la même categorie

DÉPLACEMENT D'UN RÉCTANGLE ROUGE A L'AIDE DE LA SOURIS par KIMI1632
Source avec Zip SCHEDULEUR TEST par patatalo
Source avec Zip Source avec une capture LIVE CD OMF par patatalo
Source avec Zip "MORTIMER": UN HOBBY OS par bofur
Source avec Zip Source avec une capture LE SYSTÈME D'EXPLOITATION LOGRAM par steckdenis

Commentaires et avis

Commentaire de essawendedi le 08/10/2004 21:36:26

salut djtiboy,
chapeau bas pour ton programme, car d'après la capture, c'est exactement le programme que j'aurais aimé pouvoir réaliser. mais à chaque fois que j'invoque INT 13, windows m'envoie un message me signalant que je ne peux accéder directement au disque.
Etant débutant en assembleur, j'aimerais que tu me donnes la procédure pour exécuter ton programme (compilateur à utiliser, Système d'exploitation, directives de compilation, etc.)
En espérant ne t'embeter avec ma question, j'attend avec impatience ta réponse qui sera la solution à beucoup de mes angoisses.
Merci!

Commentaire de BruNews le 08/10/2004 21:46:32 administrateur CS

essawendedi> tout emploi des interruptions est a bannir en mode protege, c'est la garantie d'une certaine stablilite pour le systeme. A moins que tu ne veuilles ecrire un systeme, aucun interet a perdre du temps avec les interruptions.

Commentaire de DeAtHCrAsH le 13/10/2004 09:53:10

Yep BruNews,
Je suis bien d'accord avec toi sur le fait qu'il ne faut pas utiliser les interruptions, mais pour ce genre de code comment faire autrement ?
Comment acceder à un disque et a sa table d'allocation sans une interruption ?

Shell

Commentaire de BruNews le 13/10/2004 09:56:24 administrateur CS

CreateFile(), ReadFile(), CloseHandle() comme d'hab sous Win.
Exemple ici:
FAIRE FICHIER ISO (MASM32)
http://www.asmfr.com/code.aspx?id=22635

Commentaire de GuruMeditation le 15/10/2004 16:03:14

pas mal mais j'aurai bien voulu une version utilisant les ports de la disquette qui pourrais s'executer en ring 0 plutot que de l'int 13h

Commentaire de RM50Man le 22/06/2005 13:33:08

kestion debile pkoi tout est en commentaire!!!!

Commentaire de lolo7575 le 07/09/2005 17:43:20

Heu j'ai lu les commentaires et j'ai cru comprendre que pour faire un système il faut utiliser les interuptions. Alor j'aimerai savoir ce qu'il faut utiliser pour faire marcher un programme sans un système ( en gros comme pour faire un système mais comme je n'ai pas le niveau je préfère en rester à un bète petit programme pour débuter).

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,530 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales