Ciao a tutti, non so se ho indovinato la sezione del forum, ma mi sembrava la più adatta.
Da non molto ho intrapreso la via di programmare in Assembly sul pc, e mi sarebbe piaciuto molto fare un semplice programmino che partisse al boot del sistema e che stampasse qualcosa attraverso l'uso delle librerie del BIOS.
Ho seguito una guida per farlo, che mi ha fatto eseguire FASM(Flat Assembler) producendomi un file .img (in realtà sarebbe un .bin con l'estensione modificata -.-").
La guida diceva di caricare il file .img in Qemu(emulatore di processori) e vedere il risultato. Dopo vari tentativi non sono riuscito ad installare questo Qemu e volevo sapere se c'è un modo semplice per fare un boot da USB a questo punto direttamente dal mio pc.
Il codice nella guida è questo:
codice:
use16 ; 16-bit mode
org 0x7C00 ; this is the address of the boot sector
BootStageOne:
;
mov ah,0x00 ; reset disk
mov dl,0 ; drive number
int 0x13 ; call BIOS interrupt routine
;
; load the sector from disk using BIOS interrupt 0x13
mov ah,0x02 ; read sectors into memory
mov al,1 ; number of sectors to read
mov dl,0 ; drive number
mov ch,0 ; cylinder number
mov dh,0 ; head number
mov cl,2 ; starting sector number
mov bx,Main ; memory location to load to
int 0x13 ; call BIOS interrupt routine
;
jmp Main ; now that it's been loaded
;
PadOutSectorOneWithZeroes:
; pad out all but the last two bytes of the sector with zeroes
times ((0x200 - 2) - ($ - $$)) db 0x00
BootSectorSignature:
dw 0xAA55 ; these must be the last two bytes in the boot sector
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 0x7E00 ; the address of the sector after the boot sector
Main:
mov si,TextHelloWorld ; point the si register at the string to display
mov ah,0x0E ; for int 0x10: write chars in teletype mode
ForEachChar: ; begin loop
lodsb ; load al with what si points to, increment si
cmp al,0x00 ; if char is null...
je EndForEachChar ; .. then break out of the loop
int 0x10 ; call interrupt 0x10 (BIOS: print char)
jmp ForEachChar ; jump back to beginning of loop
EndForEachChar: ; end of the loop
ret ; quit the program
; data to display
TextHelloWorld: db 'Hello, world!',0
PadOutSectorTwoWithZeroes:
times ((0x200) - ($ - $$)) db 0x00
Grazie in anticipo!