1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
;fonction à indexer dans la table d'interruptions IDT.
int80:
;routine systeme int80h, doit contenir tout un paquet de code permettant
;de choisir la sous fonction indiquée par eax
.invalid_command_error_code='ERR.'
.null_code=0
.read_code=1
.printchar_code=2
.fairececi_code=3
.fairecela_code=4
.malloc_code=5
;eax=numero d'appel systeme
;ebx,ecx, edx, esi, edi et ebp en fonction du type d'appel
cmp eax,.null_code
je .null
cmp eax,.read_code
je .read
cmp eax,.printchar_code
je .printchar
cmp eax,.faire_ceci_code
je .faire_ceci
cmp eax,.faire_cela_code
je .faire_cela
cmp eax,.malloc_code
je .malloc
mov eax,.invalid_command_error_code ;la sous fonction n'est pas supportée
.end: ;ici,est le point de sortie, quelle que soit la sous fonction
iret ; et on quitte
.null:
.nullreturn_code=80000000h
mov eax,.nullreturn_code ;return
iret
.read: ;fonction read N chars
.read_OK_code=;read_code
.read_KO_code=-.read_code
;edx=nombre de chars à entrer
;return
;eax=error code? allez, soyons fous
;ebx=buffer où ont été envoyés nos chars
;
mov eax,.malloc_code
int 80h
or ebx,ebx ;si adresse buffer = 0
je .error_malloc
xor eax,eax
mov edi,ebx ;pointer vers la zone fraichement allouée
mov ecx,edx ;nous avons besoin de compter pour cette operation
@@:
call keyb.getchar
stosb ;enregistrer le char dans notre memoire allouée
loop @b ;
mov eax,.read_OK_code
jmp .end ;on quitte
.error_malloc: ;soit on à plus de mémoire, soit il y a un bug, ici, c'est voulu,
;il n'y à meme pas de fonction
mov eax,'merr'
jmp .end
.malloc: ;allocate memory
;return ebx=memory adress
;ici le code pour allouer de la mémoire
xor ebx,ebx ;ici, je veux tester .error_malloc, pour voir si ça genère une erreur
jmp .end
.printchar:
;ici, le code pour afficher un char
jmp .end
.faire_ceci:
;ici le code pour faire_ceci
jmp .end
.faire_cela:
;ici le code pour faire cela
jmp .end |
Partager