» »

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

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.

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...

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
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 :D

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…



Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

program v zbirniku

Oddelek: Programiranje
71939 (1702) Spura
»

.vbs & .bat

Oddelek: Programiranje
71035 (955) darkolord
»

[Naloge]Problem

Oddelek: Programiranje
161889 (1532) OwcA
»

ideja: koda za razne mikrokontrolerje na enem mestu

Oddelek: Elektrotehnika in elektronika
73702 (3179) neoto
»

Programiranje (strani: 1 2 )

Oddelek: Programiranje
846545 (5143) Thomas

Več podobnih tem