voila la ligne de commandes que je fais pour avoir une image D7, qui n'utilise pas de systeme de fichier
cat boot.bin loader.bin /dev/zero | dd of=floppy.img bs=512 count=2880
voila la ligne de commandes que je fais pour avoir une image D7, qui n'utilise pas de systeme de fichier
cat boot.bin loader.bin /dev/zero | dd of=floppy.img bs=512 count=2880
Un p'tit tuto sur les différents mode vidéo en bas niveau
http://f3.grp.yahoofs.com/v1/wLVkQxRaaaOVqaV38fyqNIz1qSJWjHmsBN4JssVaGjlb6SCGh8c9ewgpvtQGh2vaU15DbxM7o5F6SxRdDS-s2u_Ir1Wm5DES/Sources/affichage.htm
Voilà
Bonjours, ayant un problème s'apparentant à ce sujet, j'ai trouvé inutile de créer un nouveau topic, je continu donc celui-ci..
L'envis m'ayant repris de me faire un petit OS (ça devrait juste être passager il m'ait arriver la même chose il y a quelques mois ) seulement cette fois je n'arrive plus a faire une fonction d'affichage utilisant la mémoire video texte (pourtant je ne me souvient pas avoir eu précédement de problème particulier :/), bref, voici le code:
Déclaration de la chaîne:
Passage de paramètres et appel de la fonction:
Code : Sélectionner tout - Visualiser dans une fenêtre à part boot: db "Bootloader loaded",0x00
Et pour finir la fonction:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 push boot xor ax, ax push ax ;First line call boot_print ;Print the boot string
Bien entendus pas de problème de compilation, seul l'execution n'affiche rien (je précise que je clear l'écran juste avant avec ma fonction clear qui, elle, fonctione..
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 ;Function boot_print boot_print: mov bp, ss push es push ax push bx push si mov bx, [bp+2] ;Offset mov si, [bp+4] ;Caracter mov ax, 0xB800 mov es, ax mov ah, 0x7 ;Attribute printing: mov al, [si] cmp byte al, 0x00 je end_printing mov [es:bx], ax ;Print the caracter add bx, 2 inc si ;To the next caracter end_printing: pop si pop bx pop ax pop es mov ss, bp ret ;End of boot_print function
En même temps j'ai tenté une petite utilisation je l'espère non-frauduleuse de la pile
Merci d'avance
Jeu jai limpréssion que ça boucle pas en fait...
ici :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 printing: mov al, [si] cmp byte al, 0x00 je end_printing mov [es:bx], ax ;Print the caracter add bx, 2 inc si ;To the next caracter jmp printing //Il manque pas ça ?? end_printing:
Lol bien vu Mais ça aurait quand même du afficher le premier caractère alors, or ça n'affiche rien
Le problème c'est que ça n'affiche toujours rien..
Pendant que j'y suis, je me suis toujours posé 3 questions :
-Vaut-il mieu un add bx, 2 ou deux inc bx ?
-Dans le code du prjet SKAN j'ai vu:
pour tester que dl==0 (si quelqu'un pouvait m'expliquer comment ça se fait que ça marche et que ça n'altère pas dl?)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 or dl, dl je .finAffichage
- pourquoi mettre des '.' devant des labels (exemple (plus haut): .finAffichage et pas tout simplement finAffichage, ça change quelquechose?)
Je sais 4 questions c'est un peu exagéré mais c'est comme celà qu'on progresse ^^
Il vaut mieux un ADD, que deux INC...
Merci nico ça fait déjà une question en moins ^^
Après quelques tests il semblerait que l'erreur d'affichage se situe au niveau de al qui a l'air de toujours contenir un caractère null :s
[edit]Pour le code je pense être retourné sur la bonne voie, en effet celà pouvait marcher car ma directive ORG était fausse, ainsi que mes registre de segements qui pointaient vers un faux segment dsl ^^
Par contre les autres questions tiennent toujours [/edtit]
Pour les '.' devant les labels, c'est uniquement une convention de codage, certain mettent des '@' ou une majuscule
afin de mieux se reperer dans le code.
Pourquoi or dl,dl
Et bien si tu fait une or d'une valeur avec elle meme tu vas:
- Preserver celle ci
- Si cette valeur est nulle cela met a '1' le flag 'ZF'
donc apres il te suffit de mettre un 'je' de facon a effectuer un saut des que la valeur est nulle
Interessante méthode merci
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager