Je suis en train de jouer avec asm et des trucs de bas niveau comme imprimer des caractères sur l'écran sans OS, juste via des appels d'interruption bios.Sortie lodsb sur 2 machines différentes avec 2 résultats différents
mon code fonctionne avec qemu (seabios), mais quand j'écris mon bootsector à l'USB, je reçois deux résultats différents sur deux machines différentes
Le code suivant appelle simplement l'interruption du bios (0x10) pour imprimer un chaîne (resp. caractères dans une boucle) avec la fonction tty-output (0x0e).
Fonctionne sur qemu et sur mon ordinateur portable (sortie sur l'écran: "12341234567"). Cependant, quand j'utilise mon ordinateur de bureau, la sortie sur l'écran est ... rien. Je reçois juste un écran noir avec un clignotant _ (on dirait qu'il vient de la fonction TTY, et seulement n'a pas imprimer des caractères)
Quelques informations sur mes systèmes:
Emulation avec « qemu- système x86_64/dev/sdb » sur mon ordinateur portable
portable: Intel Atom N270 (32 bits, Phoenix Bios)
Desktop-PC: AMD Phenom II x6 1090T (64 bits, AMI Bios v1. 17)
[org 0x7c00]
mov bp, 0xffff ; set stack location
mov sp, bp
mov ax, cs ; store cs in ds
mov ds, as
cld
mov si, MSG_TEST
call prnt
jmp $ ; prevent cpu from executing arbitrary bytes after this stuff aka hang
prnt:
push ax
push bx
push si
mov bh, 0
_test_loop:
lodsb
cmp al, 0
je _test_end
mov ah, 0x0e
int 0x10
jmp _test_loop
_test_end:
pop si
pop bx
pop ax
ret
MSG_TEST db "12341234567", 0
times 510 - ($-$$) db 0 ; pad out (512 bytes)
dw 0xaa55 ; magic number bootable
Je ne pense pas que ce problème a quelque chose à voir avec la compatibilité 32/64 bits puisque dans cette étape, je suis toujours en mode réel 16 bits.
'mov ds, as' une faute de frappe? "mov ds, ax" –
[link] (http://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface) "Une implémentation de microprogramme UEFI 64 bits ne peut charger qu'un chargeur de démarrage ou un noyau de système d'exploitation UEFI 64 bits. Pour des raisons de compatibilité ascendante, la plupart des implémentations du microprogramme UEFI sur les machines de classe PC prennent également en charge le démarrage en mode BIOS hérité des disques partitionnés par MBR, via le module CSM (Compatibility Support Module) qui assure la compatibilité BIOS héritée. de la même manière que sur les systèmes basés sur le BIOS hérités, en ignorant la table de partition et en s'appuyant sur le contenu d'un secteur de démarrage. " –