ptrLFB_ proc
       push esi   
       push edi

        mov [physaddr],eax              ; Sauvegarde l'adresse physique
        xor eax,eax                     ; fonction 0000h
        mov cx,1                        ; 1 selecteur
        int 31h                         ; alloue cx LDT descripteur(s)
        mov [lfbsel],ax                 ; sauvegarde le "Base Selector"

        mov bx,ax                       ; et le colle dans bx
        mov ax,9                        ; fonction 0009h
        mov cx,8092h                    ; CL= access right/type byte
        int 31h                         ; CH= 80386 extended rights/type byte

        mov ebx,[physaddr]              ; l'adresse physique doit etre
        mov cx,bx                       ; contenu dans BX:CX
        shr ebx,16      
        mov ax,0800h                    ; fonction 0800h
        mov esi,lfbmemlimit             ; la taille (en byte) doit etre
        mov di,si                       ; contenu dans SI:DI
        shr esi,16
        int 31h                         ; Map l'adresse physique
        mov ax,bx                       ; retour de l'adresse lineaire
        shl eax,16                      ; dans BX:CX
        mov ax,cx
        mov [linaddr],eax               ; que l'on sauvegarde
        mov dx,cx                       ; CX:DX = Linear base address
        mov cx,bx
        mov bx,[lfbsel]                 ; BX=Selecteur
        mov ax,7                        ; fonction 0007h
        int 31h                         ; Set Segment Base Address

        mov bx,[lfbsel]                 ; BX=Selecteur
        mov ecx,lfbmemlimit             ; la longueur doit etre contenu
        mov dx,cx                       ; dans CX:DX
        shr ecx,16
        mov ax,8                        ; fonction 0008h
        int 31h                         ; Set Segment Limit

        xor eax,eax
        mov ax,[lfbsel]                 ; renvoies le selecteur LFB
       pop edi
       pop esi           
        ret
ptrLFB_ endp
