IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 16-bits Assembleur Discussion :

Aide Kernel Affichage ecran


Sujet :

x86 16-bits Assembleur

  1. #21
    Futur Membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Avril 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Bolivie

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2014
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Bonjour déja merci pour ton site il et très utile , j'ai donc remodifier mon bootloader mais maintenant il m'affiche " appuyer sur une touche pour démarrer sxs " puis il se bloque total il doit y avoir un probleme avec ( search_root ) car il ne trouve plus mon shell ( enfin il ne le démarre plus ) car il me dit pas que le shell n'est pas trouver mai il plante total :Nom : Sans titre.jpg
Affichages : 141
Taille : 29,3 Ko


    voici le nouveau boot qui bug :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
     
    Bits	16   ;on passe en 16Bits
    %define secteur  1   ; la valeur AL et equivalent a 1 ( secteur )
    %define port_clavier_60			60h 
     
     
    jmp	Main   ; on saut a Main 
     
    SectorsPerTrack	dw	18
    Sides	dw	2
     
     
    Print:
    lodsb
    cmp	al, 0
    je	Done
    mov	ah, 0eh
    int	10h
    jmp	Print
     
    Done:
    ret
     
    Main:
    mov [BootDrive], dl      ; recuparation de l'unite de boot
    cli                      ; initialisation des segments
    mov	ax, 0x07C0
    mov	ss, ax
    mov	sp, 0xf000
    sti
    mov	ds, ax
    mov	es, ax	
    mov si, msg_kyb     ;affiche le msg clavier
    call Print          ; saut a print pour afficher le msg
    mov si, msg_vga     ;affiche le msg vide pour sauter un ligne
    call Print          ; saut a print pour afficher le msg
    mov	si, msg1        ;affiche le msg pour appuyer sur un touche pour démarrer le systeme 
    call	Print        ; saut a print pour afficher le msg
    load_root:   
    int	13h
    jnc	loaded_root
    jmp	load_root
    mov	ch, 0
    mov	cl, 2
    mov	dh, 1  
    mov	bx, buffer
    mov	al, secteur
    mov	ah, 2
     
    loaded_root:
    ;hlt
    attend_frappe:
    mov ah,0		
    int 16h
    xor ax,ax
    in al,port_clavier_60
    test al,10000000b		
    jnz attend_frappe	;si on a appuyer sur un touche on continue 
    popa
    mov	di, buffer
    mov	cx, 224
    search_root:       ; ici on recherche le shell 
    push	cx
    pop	dx
    mov	si, filename  ; ici ont cherche le nom du shell
    mov	cx, 11
    rep	cmpsb
    je	found_file    ; si on trouve le shell on continue 
    add	ax, 32
    mov	di, buffer
    add	di, ax
    push	dx
    pop	cx
     
    loop	search_root
    mov	si, msg       ; si on trouve pas le shell Erreur on affiche le msg Non trouvé
    call	Print
    cli
    hlt              ; et la on bloque le boot sur le msg 
     
    msg	db	'Erreur Noyau SxS Non Trouver!',0
    msg1  db 'Appuyez sur une touche pour demarrer SxS',10,13,0
    msg_kyb   db 'Chargement Du Clavier [OK]',10,13,0
    msg_vga   db '',10,13,0
     
    found_file:          ; donc si on trouve le shell on contine
    mov	ax, WORD [di+15]
    mov	[FirstSector], ax
    mov	bx, buffer
    mov	ax, 1
    mov	al, 9
    mov	ah, 2
    pusha
    load_fat:
    int	13h
    jnc	loaded_fat
    jmp	load_fat
     
    loaded_fat:
    mov	ah, 2
    mov	al, 1
    push	ax
     
    load_file_sector:
    mov	ax, WORD [FirstSector]
    add	ax, 31
    mov	ax, 2000h
    mov	es, ax
    mov	bx, WORD [Pointer]
     
    pop	ax
    push	ax
     
    int	13h
    jnc	calculate_next_sector ; si on a aucun souci de secteur on continue 
    jmp	load_file_sector
     
    calculate_next_sector:   ; on calcule les secteur suivant
    mov	ax, [FirstSector]
    mov	dx, 0
    mov	bx, 6
    mul	bx
    mov	bx, 4
    div	bx
    mov	si, buffer
    add	si, ax
    mov	ax, WORD [si]
     
    or	dx, dx
    jz	even
     
    odd:
    shr	ax, 4
    jmp	short next_sector_calculated
     
    even:
    and	ax, 0FFFh
     
    next_sector_calculated:
    mov	WORD [FirstSector], ax
    cmp	ax, 0FF8h
    jae	end
    add	WORD [Pointer], 512
    jmp	load_file_sector
     
    end:
    pop	ax
    mov	dl, BYTE [BootDrive]     ; on charge le shell 
    jmp	2000h:0000h              ; on demarre le shell 
     
    BootDrive	db	0
    filename	db	"KERNEL  XNO"  ; le nom du shell 
    FirstSector	dw	0
    Pointer	dw	0
     
    times 510 - ($-$$)	db	0
     
    buffer:
     
    dw	0xAA55

  2. #22
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Ouaip, je ne sais même pas pourquoi je suis aussi patient avec toi

    à la ligne 40 tu appelles l'INT 13h alors que les paramètres ne sont pas passés, tu dois la déplacer à la ligne 49
    (ça tombe bien, elle est vide)
    il manque encore le mov dl,[BootDrive] avant l'appel à l'INT 13h

    Je vois que tu as viré le contrôle d'erreur de la lecture du secteur root, pourquoi ?
    Il faut juste mettre un compteur pour éviter de tourner en rond.

    les deux définitions en lignes 9 et 10 ne sont pas correctes car correspondent à de la disquette (et toi tu veux booter sur clé USB non ?)

    tu as laissé l'accès au port 60h ainsi que le test à la ligne suivante : à virer

    ligne 59 tu as laissé ce popa qui n'a rien à faire ici, il n'y a pas de valeurs sur la pile à récupérer

    Il faut absolument que tu comprennes ce que tu fais, la programmation surtout en assembleur demande de la rigueur
    il est très probable par exemple que l'accès au port 60h ne provoque pas de plantage chez toi, mais :
    - ce n'est pas comme ça que ça marche
    - là au mieux ça ne sert à rien
    - dans un autre cas cela peut bloquer la machine

    Dans l'état, et à condition de corriger toutes ces boulettes, ton fichier KERNEL.XNO ne sera pas chargé, mais juste
    "localisé" donc encore un peu de taf


    Ton boot loader est presque opérationnel, courage jeune Padawan

    Je pense qu'après ça tu vas devoir nous montrer le code de ton shell aussi

  3. #23
    Futur Membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Avril 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Bolivie

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2014
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup je vais travail encore ASM pour appronfondire Mes connaissance je te remercie pour toute ton aide juste une derniere question je n'est pas compris se que tu voulez dire "
    les deux définitions en lignes 9 et 10 ne sont pas correctes car correspondent à de la disquette (et toi tu veux booter sur clé USB non ?)"

    cela corresponde bien a ma disquette mais je doit modifier quoi pour le faire passer en USB ?

    voila une fois mes connaissance seront plus évoluer je reviendrais avec mon shell un super merci a toi

  4. #24
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Ces valeurs peuvent varier suivant le support.
    Si tu veux pouvoir utiliser ton bootloader sur disquettes ET sur clés ET disques dur, le mieux est de demander ces valeurs au BIOS

    Comme tu as récupéré le numéro du disque de boot dans BootDisk, il te suffit de faire appel à la fonction 8 de l'int 13h
    http://www.gladir.com/LEXIQUE/INTR/int13f08.htm
    et de récupérer ces infos

  5. #25
    Futur Membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Avril 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Bolivie

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2014
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    bonjour merci beaucoup pour ton aide je vois que j'ai encore pas mal de travail pour comprendre mieux ASM donc je vais continué a apprendre avant de continuer mon projet sur le shell-boot je repasserai te voir quand j'en serait plus sur se language je vais continuer a programmer en C/C++ tout en suivant des cour sur ASM un grand merci pour ton aide tu est super

    une fois que mes connaissance seront plus élever je t'enverai mon code source du boot et du shell Merci

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/11/2007, 08h26
  2. Affichage ecran de controle LINUX
    Par toberman008 dans le forum Réseau
    Réponses: 8
    Dernier message: 04/06/2007, 20h04
  3. affichage ecran printf, fprintf_fflush
    Par nicodn02 dans le forum C
    Réponses: 7
    Dernier message: 27/04/2007, 10h30
  4. Aide pour affichage des résultats
    Par vanou dans le forum ASP
    Réponses: 7
    Dernier message: 08/06/2006, 20h53
  5. [MySQL] Aide pour affichage de donné recup dans une BD
    Par mitchb dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 18/05/2006, 11h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo