Forum » Programiranje » Zagon programa napisanega v asemblerju ob bootanju
Zagon programa napisanega v asemblerju ob bootanju
alexa-lol ::
hej Želim narediti sledečo stvar... na USB bi dal nek program napisan v assemblerju. Ko bi dal ta ključ v PC bi se ta program zagnal ob bootanju in izpisal ta izračun oz. karkoli že naredi. Kako bi to izvedel? Nekaj sem gledal o master boot record in boot loaderjih ampak mi sama fizična izvedba ni jasna. Bi mi kdo znal opisati?
hvala in lep pozdrav
hvala in lep pozdrav
ender ::
Če hočeš na preprost način nekaj zaganjat ob bootu, poglej syslinux - lahko pišeš module, ki jih poganjaš neposredno iz bootloaderja.
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.
cache invalidation, naming things and off-by-one errors.
Brane22 ::
Poišči na netu kaj o bootsectorju.
Lahko tudi pogledaš linux kernel sourceje, da vidiš kako se kernel štarta.
Pa mogoče kaj iz DOS obdobja, da vidiš, kako se piše preko intx kicev...
Mogoče si lahko ogledaš tudi recimo grub/grub2. Tudi on ima te vrste kode kar precej...
Lahko tudi pogledaš linux kernel sourceje, da vidiš kako se kernel štarta.
Pa mogoče kaj iz DOS obdobja, da vidiš, kako se piše preko intx kicev...
Mogoče si lahko ogledaš tudi recimo grub/grub2. Tudi on ima te vrste kode kar precej...
Zgodovina sprememb…
- spremenilo: Brane22 ()
alexa-lol ::
hej jaz iščem oz. sem iskal čim bolj "light weight" rešitev ampak vseeno hvala za trud.
Zadevo sem našel in bom spodaj opisal točen postopek če bo še kdo iskal
0) v BIOS nastavi USB kot 1st boot device
1) stran http://en.wikibooks.org/wiki/X86_Assemb... razloži vse o tem konceptu, logiko v ozadju
2) kodo na prejšni strani sem shranil v C:\Assembler\first.asm
3) downloadal sem NASM iz http://www.nasm.us/pub/nasm/releasebuil... (za win32)
4) kliknil ikono na desktopu NASM in vpisal ukaz
5) datoteka first.bin se je shranil v C:\Users\[User]\AppData\local\nasm\
6) po priporočilu http://stackoverflow.com/questions/1894... sem iz http://www.chrysocome.net/downloads/dd-... downloadal dd
7) v USB režo sem vstavil kljuc, ki je dobil ime G:\ in ga formatiral
8) razpakrial dd.exe v C:\Assembler, zagnal cmd kot Admin in se navigiral do C:\Assembler\
9) nato zagnal
10) restartal PC in deluje
Poleg tega sem našel še veliko uporabnih strani:
http://viralpatel.net/taj/tutorial/hell...
http://thestarman.pcministry.com/asm/mb...
http://fisnikhasani.com/building-your-o...
http://www.paulcilwa.com/writing/techni...
http://stackoverflow.com/questions/1123...
http://www.osdev.org/howtos/1/
Geslo v googlu: load assembler program at boot
lep pozdrav
Zadevo sem našel in bom spodaj opisal točen postopek če bo še kdo iskal
0) v BIOS nastavi USB kot 1st boot device
1) stran http://en.wikibooks.org/wiki/X86_Assemb... razloži vse o tem konceptu, logiko v ozadju
2) kodo na prejšni strani sem shranil v C:\Assembler\first.asm
org 7C00h jmp short Start ;Jump over the data (the 'short' keyword makes the jmp instruction smaller) Msg: db "Hello World! " EndMsg: Start: mov bx, 000Fh ;Page 0, colour attribute 15 (white) for the int 10 calls below mov cx, 1 ;We will want to write 1 character xor dx, dx ;Start at top left corner mov ds, dx ;Ensure ds = 0 (to let us load the message) cld ;Ensure direction flag is cleared (for LODSB) Print: mov si, Msg ;Loads the address of the first byte of the message, 7C02h in this case ;PC BIOS Interrupt 10 Subfunction 2 - Set cursor position ;AH = 2 Char: mov ah, 2 ;BH = page, DH = row, DL = column int 10h lodsb ;Load a byte of the message into AL. ;Remember that DS is 0 and SI holds the ;offset of one of the bytes of the message. ;PC BIOS Interrupt 10 Subfunction 9 - Write character and colour ;AH = 9 mov ah, 9 ;BH = page, AL = character, BL = attribute, CX = character count int 10h inc dl ;Advance cursor cmp dl, 80 ;Wrap around edge of screen if necessary jne Skip xor dl, dl inc dh cmp dh, 25 ;Wrap around bottom of screen if necessary jne Skip xor dh, dh Skip: cmp si, EndMsg ;If we're not at end of message, jne Char ;continue loading characters jmp Print ;otherwise restart from the beginning of the message times 0200h - 2 - ($ - $$) db 0 ;Zerofill up to 510 bytes dw 0AA55h ;Boot Sector signature ;OPTIONAL: ;To zerofill up to the size of a standard 1.44MB, 3.5" floppy disk ;times 1474560 - ($ - $$) db 0
3) downloadal sem NASM iz http://www.nasm.us/pub/nasm/releasebuil... (za win32)
4) kliknil ikono na desktopu NASM in vpisal ukaz
nasm -f bin -o first.bin C:\Assembler\first.asm
5) datoteka first.bin se je shranil v C:\Users\[User]\AppData\local\nasm\
6) po priporočilu http://stackoverflow.com/questions/1894... sem iz http://www.chrysocome.net/downloads/dd-... downloadal dd
7) v USB režo sem vstavil kljuc, ki je dobil ime G:\ in ga formatiral
8) razpakrial dd.exe v C:\Assembler, zagnal cmd kot Admin in se navigiral do C:\Assembler\
9) nato zagnal
dd if=C:\Assembler\first.bin of=\\.\G: bs=512 count=1-> PAZI!!! na črko poogna, da ne zbrišeš bootsectorja particije kjer imaš Windows inštaliran
10) restartal PC in deluje
Poleg tega sem našel še veliko uporabnih strani:
http://viralpatel.net/taj/tutorial/hell...
http://thestarman.pcministry.com/asm/mb...
http://fisnikhasani.com/building-your-o...
http://www.paulcilwa.com/writing/techni...
http://stackoverflow.com/questions/1123...
http://www.osdev.org/howtos/1/
Geslo v googlu: load assembler program at boot
lep pozdrav
Zgodovina sprememb…
- spremenil: alexa-lol ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | program v zbirnikuOddelek: Programiranje | 1927 (1690) | Spura |
» | .vbs & .batOddelek: Programiranje | 1025 (945) | darkolord |
» | [Naloge]ProblemOddelek: Programiranje | 1877 (1520) | OwcA |
» | ideja: koda za razne mikrokontrolerje na enem mestuOddelek: Elektrotehnika in elektronika | 3689 (3166) | neoto |
» | Programiranje (strani: 1 2 )Oddelek: Programiranje | 6519 (5117) | Thomas |