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 03) 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 | 2047 (1810) | Spura |
| » | .vbs & .batOddelek: Programiranje | 1143 (1063) | darkolord |
| » | [Naloge]ProblemOddelek: Programiranje | 1990 (1633) | OwcA |
| » | ideja: koda za razne mikrokontrolerje na enem mestuOddelek: Elektrotehnika in elektronika | 3844 (3321) | neoto |
| » | Programiranje (strani: 1 2 )Oddelek: Programiranje | 7153 (5751) | Thomas |