Interruption BIOS

Interruption BIOS - ASM - Programmation

Marsh Posté le 25-12-2021 à 14:27:06    

Bonjour,
Ce programme compilé avec nasm et chargé sur usb avec rufus permet en rebootant d'afficher un A en haut et a gauche de l'écran
BITS 16  
ORG 0x07C0
section .text
  mov al,0x41
  mov ah,0x0e
  mov bx,0x07
  int 0x10
boucle:
  jmp boucle
times 510- ($-$$) db 0;
dw        0xaa55
 
Si je repete cela plusieurs fois, c'est a dire
                mov al,0x41
  mov ah,0x0e
  mov bx,0x07
  int 0x10
                mov al,0x42
  mov ah,0x0e
  mov bx,0x07
  int 0x10
                mov al,0x43
  mov ah,0x0e
  mov bx,0x07
  int 0x10
Je devrais afficher ABC, et en fait il me remplit l'écran avec des ABCABCABC, etc ...
Je ne comprends pas ce qui se passe
Si quelqu'un peut m'expliquer car je croyais l'informatique cartésienne
Salutations a tous
Marcel Truffier

Reply

Marsh Posté le 25-12-2021 à 14:27:06   

Reply

Marsh Posté le 25-12-2021 à 14:36:34    

Euh mais si tu boucles sur un truc sensé afficher ABC c'est un peu logique que ça fasse une boucle qui écrit ABCABCABCABCABC non ? :o
Je vois bien le 0x41 à 43, flemme de décoder le reste en détails mais à mon avis le JMP boucle / times 510- ($-$$) db 0; a un rapport avec ton truc qui se répète.

Message cité 2 fois
Message édité par TotalRecall le 25-12-2021 à 14:37:16

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 25-12-2021 à 16:43:49    

TotalRecall a écrit :

Euh mais si tu boucles sur un truc sensé afficher ABC c'est un peu logique que ça fasse une boucle qui écrit ABCABCABCABCABC non ? :o
Je vois bien le 0x41 à 43, flemme de décoder le reste en détails mais à mon avis le JMP boucle / times 510- ($-$$) db 0; a un rapport avec ton truc qui se répète.


Bonjour,
Ben non, je boucle après avoir affiché ABC une seule fois. La boucle, c'est pour ne pas sortir du programme mais elle n affiche plus rien
    BITS 16  
    ORG 0x07C0
section .text
    mov al,0x41
    mov ah,0x0e
    mov bx,0x07
    int 0x10
    mov al,0x41
    mov ah,0x0e
    mov bx,0x07
    int 0x10
    mov al,0x41
    mov ah,0x0e
    mov bx,0x07
    int 0x10
boucle:
    jmp boucle
times 510- ($-$$) db 0;
dw        0xaa55
La boucle a lieu après avoir affiché une seule fois ABC, de plus s'il y a A tout seul, ca marche
s'il y a AB tout seul ca marche, s'il y a ABC ca ne marche plus
Incomprehensible
Merci de m aider a comprendre
Marcel Truffier

Reply

Marsh Posté le 26-12-2021 à 01:36:32    

Sorry !

Reply

Marsh Posté le 27-12-2021 à 09:23:03    

Salut!
En effet c'est bizarre!
Peux tu nous montrer le secteur boot de la clé USB, avec un éditeur hexadécimal par exemple ?

Reply

Marsh Posté le 27-12-2021 à 11:36:06    

TotalRecall a écrit :

Euh mais si tu boucles sur un truc sensé afficher ABC c'est un peu logique que ça fasse une boucle qui écrit ABCABCABCABCABC non ? :o
Je vois bien le 0x41 à 43, flemme de décoder le reste en détails mais à mon avis le JMP boucle / times 510- ($-$$) db 0; a un rapport avec ton truc qui se répète.


Non, c'est juste du padding pour que le bootsector fasse bien 512 octets. Il remplit de "0" les octets après le programme jusqu'au 510ème octet, et les 2 derniers octets (0xaa55) représentent le magic number qui permet au bios de détecter qu'il s'agit d'un boot sector


Message édité par Harkonnen le 27-12-2021 à 11:57:47

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 27-12-2021 à 11:55:12    

Sinon, je pense que tu te compliques un peu la vie avec ton boot sector. Essaie ceci :

 
Code :
  1. mov ah, 0x0e
  2.  
  3. mov al, 'A'
  4. mov bx, 7
  5. int 0x10
  6. mov al, 'B'
  7. mov bx, 7
  8. int 0x10
  9. mov al, 'C'
  10. mov bx, 7
  11. int 0x10
  12. jmp $
  13.  
  14. times 510-($-$$) db 0
  15. db 0xaa55
 

la ligne 9 remplace ta boucle (le caractère "$" représente l'adresse courante au début de la ligne, donc c'est un saut infini)


Message édité par Harkonnen le 27-12-2021 à 22:33:20

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed