Loader problème de code

TRAX44 Messages postés 93 Date d'inscription mercredi 18 septembre 2002 Statut Membre Dernière intervention 20 juillet 2006 - 11 juil. 2003 à 16:12
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 - 13 juil. 2003 à 02:00
salut tout le monde !!
g essayer de faire un loader (petit prog qui charge un autre prog) mais c un desartre je comprend pas très bien ce qui ne marche pas surtout que la première fois (après de démarrage) que je lance le prog chez moi il ne plante qu'à la fin alors que la second fois c plus tôt ?????
bon ben voici le code (g tellement essayer de trucs différtents que il est plus très claire! :-/
[BITS 16]
[ORG 0x0100]
jmp start

gud db "Bravo tout c'est bien d‚roul‚$"

err2 db "Une erreur est survenue lors de la lecture du fichier$"
err3 db "Une erreur est survenue lors de l'apelle de la fermeture$"
err1 db 13 , 10 , "Une erreur est surveue lors de l'apelle de 3D42h" , 13 , 10 ,"$"
bug1 db "Vous avez bugger!!! toute mes condolehance lol?"
fichier db "noyau.com0"
size1 db ""
handle dw 0
save1 dw 0
save2 dw 0
charge times 0110110b db 0

start:

mov dx , fichier
mov ax , 3D42h
int 21h

jnc suiv1
jmp erreur
suiv1:
mov [handle] , ax ; fin de l'ouverture du fichier

mov ax , 4201h ; debut de file size
mov bx , [handle]
mov cx , 0
mov dx , 0
int 21h
jnc pabug
jmp bug
pabug:

mov [save1] , cx
mov [save2] , dx

mov ax , 4202h
mov bx , [handle]
mov cx , 0
mov dx , 0
int 21h
jnc pabug2
jmp bug
pabug2:

push dx
push ax

mov dx , [save2]
mov cx , [save1]
mov ax , 4200h
mov bx , [handle]
int 21h
jnc pabug3
jmp bug
pabug3:

pop ax
pop dx
mov [size1] , ax ; le fichier fait moins de 256 octets!! pa besoin de dx

mov ah , 00h ; 1° point d'arret
int 16h

mov ax , 3F00h ; debut de la lecture du fichier
mov bx , [handle]
mov cx , size1 ; nombres de bytes … lire
mov dx , [charge] ; buffer ou va ˆtre transfererle fichier!!
int 21h

jnc suiv2
jmp erreur2
suiv2:

mov ax , 3E00h ; debut de fermeture du fichier
mov bx , [handle]
int 21h
jnc suiv3
jmp erreur3
suiv3:

mov dx , [gud] ; message kom koi sa c bien pass‚ sauf k'il ne s'affcihe pa
mov ah, 09h
int 21h

mov ah , 00h ; 2° point d'arret
int 16h

mov ax , 0B800h ; message FIN en vert
mov es , ax
mov ah , 010b
mov al , 'F'
mov [es:40] , ax
mov al , 'I'
mov [es:42] , ax
mov al , 'N'
mov [es:44] , ax

mov ah , 00h ; troisième points d'arrets
int 16h

jmp [charge] ; est censé chargé le prog en mémoire

ret

erreur:
mov dx , err1
mov ah , 09h
int 21h

mov ah , 00h
int 16h
ret

erreur2:
mov dx , err2
mov ah , 09h
int 21h
mov ah , 00h
int 16h
ret

erreur3:
mov dx , err3
mov ah , 09h
int 21h
mov ah , 00h
int 16h
ret

bug:
mov dx , bug1
mov ah , 09h
int 21h
mov ah , 00h
int 16h
ret

1 réponse

CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
13 juil. 2003 à 02:00
J'ai pas regardé entièrement tout le code mais il y a déjà une erreur qui peut provoquer un plantage.

Dans la variable fichier doit se terminer par un caractère nul (chaine ASCIIZ) et par le caractère zéro. En effet, c'est ce que requiert la fonction 3Dh de l'interruption 21h. Tu dois définir ta varible ainsi:

fichier db "noyau.com", 0


Essaie et puis on verra si tu as un autre plantage.

Core Breaker :)
0
Rejoignez-nous