Thread View: pl.comp.lang.asm
18 messages
18 total messages
Started by AdamW
Fri, 20 Apr 2007 19:08
Własny program startowy
Author: AdamW
Date: Fri, 20 Apr 2007 19:08
Date: Fri, 20 Apr 2007 19:08
49 lines
2310 bytes
2310 bytes
Witam, chciałem napisać w assemblerze własny program startowy do komputera. Jedynym jego zadaniem jest wypisanie pewnego tekstu na ekranie i pozostawienie komputera w stanie wlaczonym. Przejrzalem zrodla linuxowego kernela oraz lilo i wyskrobalem (wykopiowalem ;) ) cos takiego: ## CUT ###. code16 .text .global _start _start: movb $0xe,%ah movw $0x7,%bx movw $msg,%si msg_loop: lodsb cmpb $0,%al je loop int $0x10 jmp msg_loop loop: jmp loop msg: .ascii "\n" .ascii "\n" .ascii "\n" .ascii "Tutaj moj tekst\n" .ascii "\n" .ascii "\n" .ascii "\n" .byte 0 ## CUT ### Tutaj jak sie z nim obchodze: adam@localhost $ as -o bootsect.o bootsect.S adam@localhost $ ld bootsect.o -o bootsect.bin --oformat binary -Ttext 1000 root@localhost # dd if=bootsect.bin of=/dev/hda bs=512 count=1 I potem reset, żeby przetestować. Jak widac korzystam z 32-bitowego Intel-compatybile'nego procesora. Jak to odpale to nic się nie dzieje, po prostu nic. Zachowany zostaje stan sprzed uruchomienia (na ekranie), tak dlugo az go nie Ctrl-Alt- Del albo nie zresetuje z guzika. Oprócz tego jeszcze pytanko jak wyczyścić ekran wywołaniem do biosa? Czy moze latwiej bedzie nadpisac go Newline'ami? Pozdrawiam
Re: Własny program startowy
Author: Bernard
Date: Fri, 20 Apr 2007 19:44
Date: Fri, 20 Apr 2007 19:44
23 lines
1739 bytes
1739 bytes
AdamW wrote: > Witam, chciałem napisać w assemblerze własny program startowy do > komputera. Jedynym jego zadaniem jest wypisanie pewnego tekstu na > ekranie i pozostawienie komputera w stanie wlaczonym. Przejrzalem > zrodla linuxowego kernela oraz lilo i wyskrobalem (wykopiowalem ;) ) > cos takiego: > Tutaj jak sie z nim obchodze: > adam@localhost $ as -o bootsect.o bootsect.S > adam@localhost $ ld bootsect.o -o bootsect.bin --oformat binary -Ttext > 1000 BIOS ładuje bootloader pod adres 0:7c00, a więc spod takiego adresu wystartuje Twój program. O ile pamiętam, DS i ES są wtedy nieokreślone, więc wypadałoby je zainicjować. > Oprócz tego jeszcze pytanko jak wyczyścić ekran wywołaniem do biosa? Ustaw tryb 3, zrób scroll o 25 wierszy albo wypisz 2000 spacji. > Czy moze latwiej bedzie nadpisac go Newline'ami? Hmmmm, a można po polsku?
Re: Własny program startowy
Author: AdamW
Date: Fri, 20 Apr 2007 22:55
Date: Fri, 20 Apr 2007 22:55
46 lines
2072 bytes
2072 bytes
### CUT ###
from sys import argv, exit
def printc(c):
print " movw $0x%x,%%ax" % (0x0e00+c)
print " movw $0x7,%bx"
print " int $0x10"
if len(argv) < 2:
exit()
f=open(argv[1])
print ".code16"
print ".text"
print ".global _start"
print "_start:"
print "sti"
print " cld"
print " movw $0x1202,%ax"
print " movb $0x30,%bl"
print " int $0x10"
for c in f.read():
c = ord(c)
if c == 0xa:
printc(0x20)
if c == ord('\n'):
printc(13)
printc(10)
printc(0)
else:
printc(c)
print "loop:"
print " jmp loop"
### CUT ###
Więc doszedłem sam do czego chciałem.
Jak z powyższego kodu korzystać pozostawiam już Wam do obmyślenia ;).
Dzięki za odpowiedź. Są może jakieś ciekawe materiały na temat
programowania "surowego" kompa?
Pozdrawiam
Re: Własny program startowy
Author: AdamW
Date: Fri, 20 Apr 2007 22:56
Date: Fri, 20 Apr 2007 22:56
46 lines
2180 bytes
2180 bytes
### CUT ###
from sys import argv, exit
def printc(c):
print " movw $0x%x,%%ax" % (0x0e00+c)
print " movw $0x7,%bx"
print " int $0x10"
if len(argv) < 2:
exit()
f=open(argv[1])
print ".code16"
print ".text"
print ".global _start"
print "_start:"
print "sti"
print " cld"
print " movw $0x1202,%ax"
print " movb $0x30,%bl"
print " int $0x10"
for c in f.read():
c = ord(c)
if c == 0xa:
printc(0x20)
if c == ord('\n'):
printc(13)
printc(10)
printc(0)
else:
printc(c)
print "loop:"
print " jmp loop"
### CUT ###
Więc doszedłem sam do czego chciałem.
Jak z powyższego kodu korzystać pozostawiam już Wam do obmyślenia ;).
Dzięki za odpowiedź. Są może jakieś ciekawe materiały na temat
programowania "surowego" kompa?
Pozdrawiam
Re: Własny program startowy
Author: Matuzalem
Date: Sat, 21 Apr 2007 13:11
Date: Sat, 21 Apr 2007 13:11
60 lines
2608 bytes
2608 bytes
On 21 Kwi, 00:56, AdamW <adam.wieckow...@gmail.com> wrote:
> ### CUT ###
> from sys import argv, exit
>
> def printc(c):
> print " movw $0x%x,%%ax" % (0x0e00+c)
> print " movw $0x7,%bx"
> print " int $0x10"
>
> if len(argv) < 2:
> exit()
>
> f=open(argv[1])
>
> print ".code16"
> print ".text"
>
> print ".global _start"
>
> print "_start:"
> print "sti"
> print " cld"
> print " movw $0x1202,%ax"
> print " movb $0x30,%bl"
> print " int $0x10"
> for c in f.read():
> c = ord(c)
> if c == 0xa:
> printc(0x20)
> if c == ord('\n'):
> printc(13)
> printc(10)
> printc(0)
> else:
> printc(c)
>
> print "loop:"
> print " jmp loop"
> ### CUT ###
>
> Więc doszedłem sam do czego chciałem.
> Jak z powyższego kodu korzystać pozostawiam już Wam do obmyślenia ;).
> Dzięki za odpowiedź. Są może jakieś ciekawe materiały na temat
> programowania "surowego" kompa?
>
> Pozdrawiam
Witam
Ogólnie: www.google.com i takie słowa kluczowe jak np. 'my own
operating system', 'operating system programming', 'open source
operating system' itp.
np.:
http://my.execpc.com/~geezer/osd/index.htm
no i oczywiście wiele wiele książek jak np.:
http://helion.pl/ksiazki/anatp7.htm
Pozdrawiam
Re: Własny program startowy
Author: Wiktor S.
Date: Sat, 21 Apr 2007 23:35
Date: Sat, 21 Apr 2007 23:35
31 lines
2409 bytes
2409 bytes
> Więc doszedłem sam do czego chciałem. > Jak z powyższego kodu korzystać pozostawiam już Wam do obmyślenia ;). > Dzięki za odpowiedź. Są może jakieś ciekawe materiały na temat > programowania "surowego" kompa? Coś tam jest, ale jeśli chcesz pisać własny system operacyjny, to nie od bootloadera zaczynaj - narobisz się na sam początek, a efektów widać będzie mało. Ja zacząłem od jądra - ustawianie trybu chronionego, obsługa przerwań sprzętowych (klawiatura, mysz), wyjątki, obsługa ekranu, prymitywna wielozadaniowość :-) Wszystko kompilowane jako DOS-owy exek - dla ułatwienia pracy, własnego bootloadera mogę zrobić w swoim czasie. Kod oczywiście 32-bitowy, zero korzystania z przerwań DOS-u i BIOS-u -- wszystko bezpośrednio na sprzęcie. "System" jest w stanie zakończyć swoją pracę, tj. przywrócić przerwania i środowisko DOS-u sprzed uruchomienia i "wyjść" -- znacznie to ułatwiało pisanie: odpalam, coś nie tak ["bluescreen" ;-)], to wychodzę do DOS-a, poprawiam, kompiluję i odpalam jeszcze raz. W przypadku bootloadera nie mamy nic w zapasie, więc każde uruchomienie to kolejny reset - tak się pisze ZNACZNIE wolniej, i kosztuje to dużo więcej nerwów. Oczywiście wszystkie tego typu zabawy proponuję robić pod Virtual PC albo podobnym emulatorze ;-) -- Azarien
Re: Własny program startowy
Author: Michal Schulz
Date: Sun, 22 Apr 2007 08:14
Date: Sun, 22 Apr 2007 08:14
26 lines
1794 bytes
1794 bytes
Wiktor S. wrote: > Coś tam jest, ale jeśli chcesz pisać własny system operacyjny, to nie od > bootloadera zaczynaj - narobisz się na sam początek, a efektów widać > będzie mało. Prawda :) > Ja zacząłem od jądra - ustawianie trybu chronionego, obsługa przerwań > sprzętowych (klawiatura, mysz), wyjątki, obsługa ekranu, prymitywna > wielozadaniowość :-) > > Wszystko kompilowane jako DOS-owy exek - dla ułatwienia pracy, własnego > bootloadera mogę zrobić w swoim czasie. A po co robic w ogole wlasnego bootloadera, skoro mozna skorzystac z gotowego? GRUB spelnia swoje zadanie znakomicie. > W przypadku bootloadera nie mamy nic w zapasie, więc każde uruchomienie to > kolejny reset - tak się pisze ZNACZNIE wolniej, i kosztuje to dużo więcej > nerwów. qemu, VirtualPC, VMWare, Bochs.... -- Michal Schulz
Re: Własny program startowy
Author: Wiktor S.
Date: Sun, 22 Apr 2007 09:49
Date: Sun, 22 Apr 2007 09:49
11 lines
1435 bytes
1435 bytes
>> W przypadku bootloadera nie mamy nic w zapasie, więc każde >> uruchomienie to kolejny reset - tak się pisze ZNACZNIE wolniej, i >> kosztuje to dużo więcej nerwów. > > qemu, VirtualPC, VMWare, Bochs.... Z vpc korzystam, ale mimo wszystko odpalanie własnego systemu spod dosa (i pod wirtualem!) jest znacznie wygodniejsze :-) -- Azarien
Re: Własny program startowy
Author: Matuzalem
Date: Sun, 22 Apr 2007 11:34
Date: Sun, 22 Apr 2007 11:34
8 lines
1606 bytes
1606 bytes
On 22 Kwi, 10:14, Michal Schulz <michal.sch...@onet.eu> wrote: > > A po co robic w ogole wlasnego bootloadera, skoro mozna skorzystac z > gotowego? GRUB spelnia swoje zadanie znakomicie. Dla własnej satysfakcji, nie sztuką jest zrobić "copy-paste" :] Pozdrawiam
Re: Własny program startowy
Author: AdamW
Date: Sun, 22 Apr 2007 17:47
Date: Sun, 22 Apr 2007 17:47
19 lines
2206 bytes
2206 bytes
On Apr 22, 1:34 pm, Matuzalem <codemast...@op.pl> wrote: > On 22 Kwi, 10:14, Michal Schulz <michal.sch...@onet.eu> wrote: > > > > > A po co robic w ogole wlasnego bootloadera, skoro mozna skorzystac z > > gotowego? GRUB spelnia swoje zadanie znakomicie. > > Dla własnej satysfakcji, nie sztuką jest zrobić "copy-paste" :] > > Pozdrawiam Bo chodzi o to, że potrzebuje płytkę, którą gdy zbootuje wypisuje mi się na ekranie pewien tekst. Nie chodzi jak na razie o pisanie własnego OS'a. W tym zakresie moja znajomość ASM'a jest z pewnością zbyt mała, a poza tym nie mam jak na razie takich ambicji. Jak już wspominałem próba zakończyła się powodzeniem i mam co chciałem (troszkę poprawiona wersja tego pythonowego skryptu wyżej). Dzięki za odpowiedzi. Pozdrawiam
Re: Własny program startowy
Author: Michal Schulz
Date: Sun, 22 Apr 2007 20:11
Date: Sun, 22 Apr 2007 20:11
12 lines
1313 bytes
1313 bytes
Matuzalem wrote: >> A po co robic w ogole wlasnego bootloadera, skoro mozna skorzystac z >> gotowego? GRUB spelnia swoje zadanie znakomicie. > > Dla własnej satysfakcji, nie sztuką jest zrobić "copy-paste" :] Napisanie bootloadera tez nie jest sztuka, raczej tylko nudnym "rzemioslem" ;) -- Michal Schulz
Re: Własny program startowy
Author: Matuzalem
Date: Sun, 22 Apr 2007 21:29
Date: Sun, 22 Apr 2007 21:29
16 lines
1858 bytes
1858 bytes
On 22 Kwi, 22:11, Michal Schulz <michal.sch...@onet.eu> wrote: > Matuzalem wrote: > >> A po co robic w ogole wlasnego bootloadera, skoro mozna skorzystac z > >> gotowego? GRUB spelnia swoje zadanie znakomicie. > > > Dla własnej satysfakcji, nie sztuką jest zrobić "copy-paste" :] > > Napisanie bootloadera tez nie jest sztuka, raczej tylko > nudnym "rzemioslem" ;) > > -- > Michal Schulz Tak jaaassnnee :] Pozdrawiam
Re: Własny program startowy
Author: Michal Schulz
Date: Sun, 22 Apr 2007 22:47
Date: Sun, 22 Apr 2007 22:47
16 lines
1452 bytes
1452 bytes
Matuzalem wrote: >> >> A po co robic w ogole wlasnego bootloadera, skoro mozna skorzystac z >> >> gotowego? GRUB spelnia swoje zadanie znakomicie. >> >> > Dla własnej satysfakcji, nie sztuką jest zrobić "copy-paste" :] >> >> Napisanie bootloadera tez nie jest sztuka, raczej tylko >> nudnym "rzemioslem" ;) > > Tak jaaassnnee :] Cos nie tak? -- Michal Schulz
Re: Własny program startowy
Author: Matuzalem
Date: Mon, 23 Apr 2007 00:15
Date: Mon, 23 Apr 2007 00:15
17 lines
1976 bytes
1976 bytes
On 23 Kwi, 00:47, Michal Schulz <michal.sch...@onet.eu> wrote: > Matuzalem wrote: > >> >> A po co robic w ogole wlasnego bootloadera, skoro mozna skorzystac z > >> >> gotowego? GRUB spelnia swoje zadanie znakomicie. > > >> > Dla własnej satysfakcji, nie sztuką jest zrobić "copy-paste" :] > > >> Napisanie bootloadera tez nie jest sztuka, raczej tylko > >> nudnym "rzemioslem" ;) > > > Tak jaaassnnee :] > > Cos nie tak? Nie nie, wszystko jest ok :] Pozdrawiam
Re: Własny program startowy
Author: Q
Date: Mon, 23 Apr 2007 00:38
Date: Mon, 23 Apr 2007 00:38
9 lines
1366 bytes
1366 bytes
> chciałem napisać w assemblerze własny program startowy do komputera 'startowy' tzn. taki 'system loader' co siedzi w #1 fizycznie sektorze (boot sector) na dysku ? jak tak, to kiedys na stronie pc kuriera znalazlem zrodlo przykladowego (prostego) ladowacza systemu; do nowych (>8 GB) dyskow trza bylo je troche przerobic, dodac ladniejsze menu i jazda :)
Re: Własny program startowy
Author: Q
Date: Mon, 23 Apr 2007 00:46
Date: Mon, 23 Apr 2007 00:46
15 lines
1718 bytes
1718 bytes
> bootloadera mogę zrobić w swoim czasie. Kod oczywiście 32-bitowy, zero > korzystania z przerwań DOS-u i BIOS-u -- wszystko bezpośrednio na > sprzęcie. nie korzystales z 'przerwan' czy z 'uslug' ? :) /bo mnie wkurza jak ludzie pisza 'przerwania biosu' - - bios Ci daje jakies tam uslugi ulatwiajace programowanie a przerwania (interrputs) to cos co sprzet wywuluje; > Oczywiście wszystkie tego typu zabawy proponuję robić pod Virtual PC albo > podobnym emulatorze ;-) VMware lepszy ! polecam go, mimo, ze ma nie do konca sprawna obsluge sieci - - przeklamuje mi jakis bajt w udp :(
Re: Własny program startowy
Author: Q
Date: Mon, 23 Apr 2007 00:52
Date: Mon, 23 Apr 2007 00:52
12 lines
1654 bytes
1654 bytes
> Napisanie bootloadera tez nie jest sztuka, raczej tylko > nudnym "rzemioslem" ;) trza wiedziec co robi bios, tzn. gdzie (adres) wgrywa sector; potem co zrobic po tym biosowym jump'ie i to w sumie wszystko :). a - i assemblera trza znac, ale podstawy podstaw starcza (jakie rejestry, kilka rozkazow - mov,jmp,add,shl,...). tyle, ze na 100 ludzi posiadajacych taka wiedze, to pewnie max 5 da rade napisac :P
Re: Własny program startowy
Author: Wiktor S.
Date: Tue, 24 Apr 2007 06:24
Date: Tue, 24 Apr 2007 06:24
15 lines
1617 bytes
1617 bytes
> nie korzystales z 'przerwan' czy z 'uslug' ? :) > /bo mnie wkurza jak ludzie pisza 'przerwania biosu' - > - bios Ci daje jakies tam uslugi ulatwiajace programowanie > a przerwania (interrputs) to cos co sprzet wywuluje; W dokumentacji jedno i drugie nazywane jest "interrupt" (odpowiednio: "software interrupt" i "hardware interrupt"), więc nie obrażając: bredzisz ;-) ale niech ci będzie: ani razu nie wykonywałem instrukcji INT, choć oczywiście przejmowałem przerwania sprzętowe (mysz, klawiatura, timer) -- Azarien
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads