Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2013
    Messaggi
    11

    Problema con creazione di un sistema operativo

    Salve ragazzi,
    Allora io ho creato questo sistema operativo in assembly e volevo provarlo.
    Ho compilato il mio kernel e un boot preso da internet poi li ho copiati su una chiavetta, da allora ho avviato il boot da chiavetta ma quando cercava un sistema operativo nella chiavetta non lo trovava.
    Mi scriveva:Nessun sistema operativo trovato, premere un tasto per continuare ed infine mi avvia ubuntu come da norma.
    Qualcuno sa dirmi dove sbaglio?
    Questo è il boot:
    http://blog.ishans.info/2012/01/19/a...om-usb-drives/
    Questo è il mio kernel:
    codice:
    section .code
    
    start:
    
        mov ah, 01h      ;Cursore on
        mov cx, 0607h    ;Modello cursore
        int 10h            ;Richiamo l' interrupt
        mov ah, 02h       ;Seleziono la funzione del bios
        mov dh, 0       ;Posiziono il cursore nella colonna '0'
        mov dl, 0        ;Posiziono il cursore nella riga '0'
        int 10h         ;Richiamo l' interrupt
    
    main:
    
        mov ah, 00h     ;Inserisce il carattere in 'al' sotto codice ASCII
        int 16h         ;Richiamo l' interrupt
        mov ah, 0eh     ;Stampa il carattere ASCII contenuto in 'al'
        int 10h         ;Richiamo l' interrupt
        cmp al, 'O'     ;Condizione ASCII=O
        je sectorO      ;Salta se condizione è vera (ASCII=O)
        cmp al, 'c'     ;Condizione ASCII=c
        je sectorC      ;Salta se condizione è vera (ASCII=c)
        jmp main        ;Ripete l' operazione
        
    sectorA:
    sectorB:
    sectorC:
        
        mov ah, 00h     ;Inserisce il carattere in 'al' sotto codice ASCII
        int 16h         ;Richiamo l' interrupt
        mov ah, 0eh     ;Stampa il carattere ASCII contenuto in 'al'
        int 10h         ;Richiamo l' interrupt
        cmp al, 'f'
        je createfile1
        cmp al, 'l'     ;Condizione ASCII=l
        je clearscreen1        ;Salta se condizione è vera (ASCII=l)
        jmp main
    
    sectorD:
    sectorE:
    sectorF:
    sectorG:
    sectorH:
    sectorI:
    sectorL:
    sectorM:
    sectorN:
    sectorO:
    
        mov ah, 00h     ;Inserisce il carattere in 'al' sotto codice ASCII
        int 16h         ;Richiamo l' interrupt
        mov ah, 0eh     ;Stampa il carattere ASCII contenuto in 'al'
        int 10h         ;Richiamo l' interrupt
        cmp  al, 'S'
        je versO
        jmp main
    
    sectorP:
    sectorQ:
    sectorR:
    sectorS:
    sectorT:
    sectorU:
    sectorV:
    sectorW:
    sectorY:
    sectorZ:
    NumberSector:
    SpecialSector:
    
    createfile1:
        
        mov ah, 00h     ;Inserisce il carattere in 'al' sotto codice ASCII
        int 16h         ;Richiamo l' interrupt
        mov ah, 0eh     ;Stampa il carattere ASCII contenuto in 'al'
        int 10h         ;Richiamo l' interrupt
        cmp al, 'i'
        je createfile2
        jmp main
        
    createfile2:
    
        mov ah, 00h     ;Inserisce il carattere in 'al' sotto codice ASCII
        int 16h         ;Richiamo l' interrupt
        mov ah, 0eh     ;Stampa il carattere ASCII contenuto in 'al'
        int 10h         ;Richiamo l' interrupt
        cmp al, 'l'
        je createfile3
        jmp main
        
    createfile3:
        
        mov ah, 00h     ;Inserisce il carattere in 'al' sotto codice ASCII
        int 16h         ;Richiamo l' interrupt
        mov ah, 0eh     ;Stampa il carattere ASCII contenuto in 'al'
        int 10h         ;Richiamo l' interrupt
        cmp al, 'e'
        je createfile4
        jmp main
        
    createfile4:
    
        mov ah, 02h
        add dh, 1
        int 10h
        
        mov ah, 02h
        add dh, 1
        int 10h
        jmp main
    
    versO:
    
        mov ah, 00h     ;Inserisce il carattere in 'al' sotto codice ASCII
        int 16h         ;Richiamo l' interrupt
        mov ah, 0eh     ;Stampa il carattere ASCII contenuto in 'al'
        int 10h         ;Richiamo l' interrupt
        cmp  al, 'v'
        je versS
        jmp main
    
    versS:
    
        mov ah, 00h     ;Inserisce il carattere in 'al' sotto codice ASCII
        int 16h         ;Richiamo l' interrupt
        mov ah, 0eh     ;Stampa il carattere ASCII contenuto in 'al'
        int 10h         ;Richiamo l' interrupt
        cmp  al, 'e'
        je vers1
        jmp main
    
    vers1:
    
        mov ah, 00h     ;Inserisce il carattere in 'al' sotto codice ASCII
        int 16h         ;Richiamo l' interrupt
        mov ah, 0eh     ;Stampa il carattere ASCII contenuto in 'al'
        int 10h         ;Richiamo l' interrupt
        cmp al, 'r'
        je vers2
        jmp main
    
    vers2:
    
        mov ah, 00h     ;Inserisce il carattere in 'al' sotto codice ASCII
        int 16h         ;Richiamo l' interrupt
        mov ah, 0eh     ;Stampa il carattere ASCII contenuto in 'al'
        int 10h         ;Richiamo l' interrupt
        cmp al, 's'
        je vers3
        jmp main
    
    vers3:
    
        mov ah, 00h     ;Inserisce il carattere in 'al' sotto codice ASCII
        int 16h         ;Richiamo l' interrupt
        mov ah, 0eh     ;Stampa il carattere ASCII contenuto in 'al'
        int 10h         ;Richiamo l' interrupt
        cmp al, 'i'
        je vers4
        jmp main
        
    vers4:
    
        mov ah, 00h     ;Inserisce il carattere in 'al' sotto codice ASCII
        int 16h         ;Richiamo l' interrupt
        mov ah, 0eh     ;Stampa il carattere ASCII contenuto in 'al'
        int 10h         ;Richiamo l' interrupt
        cmp al, 'o'        ;Se al=o
        je vers5        ;Salta a vers5
        jmp main        ;Salta a main
    
    vers5:
    
        mov ah, 00h     ;Inserisce il carattere in 'al' sotto codice ASCII
        int 16h         ;Richiamo l' interrupt
        mov ah, 0eh     ;Stampa il carattere ASCII contenuto in 'al'
        int 10h         ;Richiamo l' interrupt
        cmp al, 'n'        ;Se al=n
        je vers6        ;Salta a vers6
        jmp main        ;Salta a main    
    
    vers6:
    
        mov ah, 02h
        add dh, 1
        int 10h
        mov al, '1'        ;Posiziono '1' in al
        mov ah, 0eh     ;Stampa il carattere ASCII contenuto in 'al'
        int 10h         ;Richiamo l' interrupt
        mov al, '.'
        mov ah, 0eh
        int 10h
        mov al, '0'
        mov ah, 0eh
        int 10h
        mov al, ' '
        mov ah, 0eh
        int 10h
        mov al, 'A'
        mov ah, 0eh
        int 10h
        mov al, 'l'
        mov ah, 0eh
        int 10h
        mov al, 'p'
        mov ah, 0eh
        int 10h
        mov al, 'h'
        mov ah, 0eh
        int 10h
        mov al, 'a'
        mov ah, 0eh
        int 10h
        mov ah, 02h
        add dh, 1
        int 10h
        jmp main
    
    clearscreen1:
    
        mov ah, 00h     ;Inserisce il carattere in 'al' sotto codice ASCII
        int 16h         ;Richiamo l' interrupt
        mov ah, 0eh     ;Stampa il carattere ASCII contenuto in 'al'
        int 10h         ;Richiamo l' interrupt
        cmp al, 's'     ;Condizione ASCII=s
        je clearscreen2 ;Salta se condizione è vera (ASCII=s)
        jmp main
    
    clearscreen2:
    
        mov ah, 00h     ;Richiamo una funzione del bios
        mov al, 02h     ;Setto la funzione richiamata
        int 10h         ;Richiamo l' interrupt
        mov ah, 02h
        mov dh, 0
        mov dl, 0
        int 10h
        mov ah, 00h
        mov al, 02h
        int 10h
        jmp main
    
    section .data
    
    ret

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Questo non può essere il boot di un SO.

    Il boot è il codice scritto nel primo settore del disco che carica il sistema operativo vero e proprio.
    E' il BIOS che si occupa di caricare il contenuto del primo settore a partire dalla locazione 0:07C0, facendo le prime operazioni (come lo switch al modo protetto se necessario o semplicemente leggendo il resto del kernel per i sistemi in modo reale).

    Vedi questo esempio

    http://kos.enix.org/pub/bootwrit.html
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2013
    Messaggi
    11
    ok ma come posso far partire il mio kernel in live da usb ?
    (Se si può fare)

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non hai capito.

    Nel tuo codice manca la parte di boot necessaria per avviare il SO.

    In realtà il codice che hai mostrato non è parte di un SO ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2013
    Messaggi
    11
    Ma se il codice che ho postato (fatto interamente da me) non è un kernel cosa è??

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2013
    Messaggi
    11
    Io ho chiesto di darmi un boot provvisorio (visto che non lo so creare e non ho trovato una guida) per caricare il mio kernel da cd

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quote Originariamente inviata da nuovain Visualizza il messaggio
    Ma se il codice che ho postato (fatto interamente da me) non è un kernel cosa è??
    Bella domanda ... cosa è?

    Tu sai cosa è un kernel?

    Cosa dovrebbe fare quel codice ammesso tu lo possa avviare?

    Il codice di boot che hai indicato con quel link è funzionante ... ma tu come l'hai compilato? Come l'hai usato? Su quale sistema?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2013
    Messaggi
    11
    Io per compilare il boot ed il kernel ho usato nasm, li ho compilati da .asm a .bin poi per primo ho copiato il boot su chiavetta poi il kernel.
    Il kernel l' ho provato su windows come file exe e funzionava(doveva solo printare le lettere he inserivo), io l' ho scritto in assembly intel x86 ed ho usato solo gli intterrupt del bios.
    ps. Un kernel è un insieme di istruzioni che fa funzionare la macchina a livello hardware attraverso input ricevuti dall ' utente

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.