J'essaye d'écrire le code assembler dans mbr pour employer des ISR de BIOS. Je vous écris le code suivant à la mbr, attendant le caractère « ABCD » à imprimer à l'écran:pourquoi ce code en mode réel fonctionne dans la machine virtuelle mais ne fonctionne pas sur ma machine réelle?
mov ah,0x0e
mov bp,0x8000
mov sp,bp
push 'A'
push 'B'
push 'C'
push 'D'
mov al, [0x7ffe]
int 0x10
mov al, [0x7ffc]
int 0x10
mov al, [0x7ffa]
int 0x10
mov al, [0x7ff8]
int 0x10
; infinite loop
jmp $
; padding 0s and set the magic number to make it bootable
times 510 -($ - $$) db 0
dw 0xaa55
ce code fonctionne bien sur le simulateur de Bochs ou qemu, mais quand j'écris mon vrai disque et de l'utilisation pour démarrer, rien n'est imprimé. J'ai testé pour définir directement le registre% al en caractères, et il s'imprime bien. J'utilise un processeur AMD PhenomII 955, tout ce que j'ai mal fait?
Initialisez les registres de segment avec quelque chose comme 'xor ax, ax'' mov ss, ax' 'mov ds, ax'. L'instruction 'mov al, [...]' utilise 'ds' tandis que' push ... 'utilise' ss'. Assurez-vous qu'ils sont égaux. –
@MargaretBloom Ça marche! Je vous remercie ! s'il vous plaît postez comme une réponse, alors je peux marquer cette question comme une réponse. –