Bonjour a tous,
J'aurais besoin de votre aide pour une fonction qui me parait simple mais que je n'arrive pas a faire fonctionner parfaitement.
En effet je programme un mini OS, et j'ai donc besoin de traiter les entrées clavier pour un peu plus d'interractivité :p Chose plus ou moins faite (un driver qui converti le scan-code de la touche clavier en ascii puis qui l'affiche), mais maintenant j'aurais aimé pouvoir traiter ce qui a été précédement entré.
Alors j'ai déclaré une chaine de 0xff octets de long, et mis en place cela :
En gros cela donne ceci :
Je traite le fait que '\n' ne soit pas le seul caractère de la ligne sinon a l'affichage on sauterait 1 ligne.
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 movzx eax, byte [esi] ; eax contient le caractère maintenant cmp eax, 0x0a je .end_write ; La ligne ; Ici on écrit dans le buffer car la ligne continue mov edi, buff_cmd ; buff_cmd est la chaine a remplir add edi, [buff_cmd_size] ; buff_cmd_size est la taille de la chaine stosb ; J'écris add byte [buff_cmd_size], 1 jmp .end ; procèdure de fin de ligne: .end_write: movzx edx, byte [buff_cmd_size] cmp edx, 0 ; Si c'est le 1er caractère de la ligne je .end ; On finit mov edi, buff_cmd add edi, [buff_cmd_size] ; Sinon j'écris le retour a la ligne dans le buffer stosb add edi, 1 mov eax, 0x00 stosb ; Puis je mets NULL dans le caractère suivant mov esi, buff_cmd call print ; J'affiche la chaine mov byte [buff_cmd_size], 0 ; Et on repart pour une ligne jmp .end
Mes soucis :
-le code semble fonctionner sous Qemu mais pas sous VBox
-Il ne fait que faire semblant de fonctionner, car si je fais bien attention et que je m'amuse a lui parler (en gros si j'écris autre chose que 'aaaaa' pour le tester, je me rends compte que des fois il saute des lignes, m'affiche des caractères a la ligne suivante (donc apres le retour a la ligne alors que je suis
censé écrire NULL après chaque '\n'...) et des erreures de ce genre.
Le fait que le code semble fonctionner puis se mette a planter me frustre, c'est pour cela que je poste ici, car ne croyez pas que j'ai pas cherché, j'ai meme écrit un algo en francais pour chercher l'erreure, mais je ne suis que débutant ça me passe sous le nez, du moins j'espere que c'est un soucis de code et pas d'algo.
Je vous en serait reconnaissant de m'éclairer, si besoin je peux poster mon algo en version francaise. C'est que je suis de mon téléphone pour avoir internet et c'était déja un supplice d'écrire tout cela. Merci de m'avoir lu.
Édit : mince alors... J'ai l'air bête maintenant que je mappercoit que stosb incrémente déjà edi... Histoire que mon topic ne serve pas a rien : toujours dans le cadre de la création d'un mini OS j'ai tout juste réussit a implémenter ma 1ère commande :p Du coups je pense sérieusement a un système de fichier et je me pose la question : est ce une bonne idée d'essayer d'implementer mon propre système de fichier(qui serait simple genre 1 répertoire root et c'est tout au début) ou est ce que cela meloignerait peut être de la réalité et vaut il mieu débuter sur du fat ou ext?
Partager