From 0af23ddb3151bf87f033091bb3f30f9386f0820a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Sun, 31 Oct 2004 09:31:20 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20correction=20de=20bogues=20dans=20la=20f?= =?UTF-8?q?onction=20MBCreate=20:=20le=20segment=20reserv=C3=A9=20n'etait?= =?UTF-8?q?=20pas=20correctement=20renvoy=C3=A9=20si=20l'espace=20m=C3=A9m?= =?UTF-8?q?oire=20etait=20pile.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- noyau/mcb.asm | 256 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 246 insertions(+), 10 deletions(-) diff --git a/noyau/mcb.asm b/noyau/mcb.asm index 098ef0a..e1d75a0 100644 --- a/noyau/mcb.asm +++ b/noyau/mcb.asm @@ -59,6 +59,7 @@ tables dw MBinit ;Table qui contient les adresses de toutes les fonctions de VI dw MBCreate dw MBresident dw MBGet + dw MBFind FirstMB dw 0 @@ -93,12 +94,16 @@ notforfree: ;Libère le bloc de mémoire GS MBFree: push bx es + pushad + mov dx,gs + mov cx,16 + mov ah,0ah + int 47h + popad mov bx,gs dec bx dec bx mov es,bx - cmp es:[MB.Check],'NH' - je wasfree cmp es:[MB.Reference],Free je wasfree cmp es:[MB.IsResident],true @@ -145,6 +150,235 @@ foundmcb: pop dx bx ret + + + + + +;==============================Affiche le nombre nb hexa en EDX de taille CX et couleur BL============== +ShowHex: + push ax bx cx edx si di + mov di,cx + sub cx,32 + neg cx + shl edx,cl + shr di,2 + mov ah,09h + and bx,1111b +Hexaize: + rol edx,4 + mov si,dx + and si,1111b + mov al,cs:[si+offset tab] + push cx + mov cx,1 + cmp al,32 + jb control2 + mov ah,09h + int 10h +control2: + mov ah,0Eh + int 10h + pop cx + dec di + jnz Hexaize + pop di si edx cx bx ax + ret +Tab db '0123456789ABCDEF' + +;==============================Affiche une chaine DS:SI de couleur BL============== +showstr: + push ax bx cx si + mov cx,1 +again: + lodsb + or al,al + jz fin + and bx,0111b + cmp al,32 + jb control + mov ah,09h + int 10h +control: + mov ah,0Eh + int 10h + jmp again + fin: + pop si cx bx ax + ret + + +;================================================ +;Routine de débogage +;================================================ +regdata: +eaxr dd 0 +ebxr dd 0 +ecxr dd 0 +edxr dd 0 +esir dd 0 +edir dd 0 +espr dd 0 +ebpr dd 0 +csr dw 0 +dsr dw 0 +esr dw 0 +fsr dw 0 +gsr dw 0 +ssr dw 0 + +reg db 0Dh,0Ah,"eax : ",0 + db 0Dh,0Ah,"ebx : ",0 + db 0Dh,0Ah,"ecx : ",0 + db 0Dh,0Ah,"edx : ",0 + db 0Dh,0Ah,"esi : ",0 + db 0Dh,0Ah,"edi : ",0 + db 0Dh,0Ah,"esp : ",0 + db 0Dh,0Ah,"ebp : ",0 + db 0Dh,0Ah,"cs : ",0 + db 0Dh,0Ah,"ds : ",0 + db 0Dh,0Ah,"es : ",0 + db 0Dh,0Ah,"fs : ",0 + db 0Dh,0Ah,"gs : ",0 + db 0Dh,0Ah,"ss : ",0 + +showreg: +pushad +pushf +push ds +mov cs:[eaxr],eax +mov cs:[ebxr],ebx +mov cs:[ecxr],ecx +mov cs:[edxr],edx +mov cs:[esir],esi +mov cs:[edir],edi +mov cs:[espr],esp +mov cs:[ebpr],ebp +mov cs:[csr],cs +mov cs:[dsr],ds +mov cs:[esr],es +mov cs:[fsr],fs +mov cs:[gsr],gs +mov cs:[ssr],ss +push cs +pop ds +mov si,offset poppp +call Showstr +mov si,offset reg +mov di,offset regdata +mov bx,7 +showregs: +cmp byte ptr cs:[si+6],":" +jne endshowregs +call Showstr +cmp byte ptr cs:[si+4]," " +je segsss +mov edx,cs:[di] +mov cx,32 +call Showhex +add di,4 +jmp showmax +segsss: +mov dx,cs:[di] +mov cx,16 +call Showhex +add di,2 +showmax: +add si,9 +mov bp,dx +push si +mov si,offset beginds +call showstr +mov si,bp +mov cx,8 +mov al,0 +letshow: +mov dl,ds:[si] +inc si +call showhex +inc al +cmp al,10 +jb letshow +mov si,offset ende +call showstr +mov si,offset begines +call showstr +mov si,bp +mov cx,8 +mov al,0 +letshow2: +mov dl,es:[si] +inc si +call showhex +inc al +cmp al,10 +jb letshow2 +mov si,offset ende +call showstr +pop si +jmp showregs +endshowregs: +mov si,offset poppp +call Showstr +xor ax,ax +int 16h +pop ds +popf +popad +ret +begines db ' es[',0 +beginds db ' ds[',0 +ende db '] ',0 + + + + +poppp db '*********',0 + + + + + +;Renvoie en GS le MCB qui correspond a ds:si +MBFind: + push ax bx si di + mov bx,cs:firstmb + dec bx + dec bx + mov di,MB.Names +search: + mov gs,bx + cmp gs:[MB.Check],'NH' + jne itsend2 + inc bx + inc bx + add bx,gs:[MB.Sizes] + cmp word ptr gs:[MB.Sizes],0 + je itsend2 + push si di +cmpnames: + mov al,gs:[di] + cmp al,ds:[si] + jne ok + cmp al,0 + je ok + inc si + inc di + jmp cmpnames +ok: + pop di si + je foundmcb2 + cmp gs:[MB.IsNotLast],true + je search +itsend2: + stc + pop di si bx ax + ret +foundmcb2: + clc + pop di si bx ax + ret + ;Creér un bloc de nom ds:si de taille cx (octets) -> n°segment dans GS MBCreate: @@ -172,7 +406,6 @@ searchfree: mov es:[MB.IsNotLast],True mov es:[MB.Reference],cs mov es:[MB.IsResident],False - mov es:[MB.Sizes],cx mov di,MB.Names push ax cx mov cx,32 @@ -191,15 +424,17 @@ endofloops: mov al,0 rep stosb pop cx ax - sub ax,cx + inc bx + inc bx + sub ax,cx dec ax dec ax - ;js nofree - inc bx - inc bx - mov gs,bx - add bx,cx - mov es,bx + cmp ax,0 + js nofree + je nofree + mov es:[MB.Sizes],cx + add cx,bx + mov es,cx mov es:[MB.IsNotLast],dl mov es:[MB.IsResident],False mov es:[MB.Reference],Free @@ -208,6 +443,7 @@ endofloops: mov dword ptr es:[MB.Names+4],0 mov es:[MB.Check],'NH' nofree: + mov gs,bx clc pop es di si dx cx bx ax ret