Ştiri:

Vă rugăm să citiţi Regulamentul de utilizare a forumului Scientia în secţiunea intitulată "Regulamentul de utilizare a forumului. CITEŞTE-L!".

Main Menu

Bootloader Tutorial

Creat de thedarkgluon, Ianuarie 26, 2010, 09:34:21 PM

« precedentul - următorul »

0 Membri şi 1 Vizitator vizualizează acest subiect.

thedarkgluon

Ce va face?
Va afisa 'Uuq' pe ecran. (Unul dintre elementele mele preferate, Ununquadium)
Ce programe sunt necesare?
-nasm: http://www.nasm.us/
-editor de texte
-optional virtual pc sau virtualbox
1. Porneste notepad sau ce program folosesti si scrie:

[BITS 16]
[ORG 7C00h]
mov ah,0eh
mov al,'U'
int 10h
mov al,'u'
int 10h
mov al,'q'
int 10h
jmp $
times 510-($-$$) db 0
dw 0xAA55

Sa luam codul linie cu linie:
[BITS 16] => aici zicem pe cati biti va fi programul, in general 16, 32 sau 64.
[ORG 7C00h] => adresa la care se va incarca in memorie, bootloadere se incarca la 7c00, .com la 100h si .exe non PE la 200h...
Ce inseamna "int 10h"?
Interrupt-ul 10h sau 0x10 este unul din int-urile de BIOS. Le puteti vedea deocamdata ca niste functii predefinite. De exemplu daca in registrul "ah" este valoarea 0Eh si in "al" codul ascii, si scriem int 10h, va aparea simbolul din al pe ecran.
Pentru o lista cu int-uri puteti sa va uitati aici: 8086 bios and dos interrupts (IBM PC)
Ce inseamna "jmp $"?
Un loop infinit. Asemanator codului C a while(1==1){} sau for(;{}
Dar "times 510-($-$$) db 0"?
Bootloadere-le TREBUIE sa aiba fix 512 bytes pt ca sa fie boot-abile. Comanda asta adauga 0-uri pana cand ajunge la 510.
Si "dw 0xAA55"?
Asta trebuie sa fie la sfarsit pentru ca BIOS-ul sa ruleze programul.
2. Considerand ca l-ai salvat ca si rst.asm, si este in acelasi director cu nasm.exe, intra in cmd si scrie "nasm rst.asm -o rst.bin"
3. Insereaza un floppy in calculator si fiind in cmd scrie:

C:\>debug
DEBUG rst.bin
- w 100 0 0 1
- q

4. Da restart si booteazade pe floppy sau foloseste virtual pc/ virtualbox/ bochs/ qemu...
In caz ca folosesti linux, ca sa scrii pe floppy scrie: "dd if=rst.bin bs=512 of=/dev/fd0"
sau pt virtualizare poti si "dd if=rst.bin bs=512 of=rst.img".
Sper ca v-a placut... Comentati!

radhoo

de placut mi-ar fi placut...acu 15 ani.

ASM e un limbaj greoi, strans legat de o buna cunoastere a hardware-ului, putin portabil si utilizat doar pentru aplicatii low level.

Dupa cum vezi, tehnologiile actuale pun accentul pe limbaje de programare de nivel inalt, cu clase predefinite pentru tot ce vrei si ce nu vrei incat e destul sa definesti obiectul, sa pui punctul si iti va aparea lista completa cu metode intuitive.

Ultima problema, deloc de neglijat, floppy drive-ul e inexistent de ceva vreme. Poate un articol despre cum sa modifici sectorul de boot la un USBPen/USB Flash Disk etc era utilizabil (la limita).

florin_try

#2

Procesoarele intel si amd au acelasi asm?

thedarkgluon

Imi pare rau, insa nu stiu cum sa-l fac sa booteze de pe cdrom/usb stick.
Si da, intel si amd au acelasi asm. Ambele ruleaza pe platforma x86. Insa exista si alte micropocesoare Intel cu ar fi 8051 care e folosit la semafoare, televizoare, etc.