Program w PC bez systemu.

0

Assembler jest językiem konwertującym kod źródłowy na maszynowy podobnie jak inne, z tym że ten wykonuje się na procesorze.
A co gdyby do PC'cie bez systemu, wyświetlający jedynie ekran startowy PG (Płyty Głównej) wpiąć USB lub włożyć CD do jego napędu (z oprogramowaniem napisanym właśnie w assemblerze)?
Skoro programy w nim napisane wykonywane są bezpośrednio na procesorze, to po co takiemu system?
Nie wiem jak wygląda taka sprawa dlatego pytam.
Może program z takiego nośnika da się odpalić za pomocą Bootloader'a?

2

po co takiemu system?

https://pl.wikipedia.org/wiki/System_operacyjny

Może program z takiego nośnika da się odpalić za pomocą Bootloader'a?

Da, ale to jest skill level 1000. Jak wczytasz pliki z nośnika? Jak one są na nim ułożone? Nawet dość prosty system plików FAT nie jest trywialny.
Chcesz coś wyświetlić? OK, grafika VGA czy VESA jest jeszcze do obsłużenia. Ale jak chcesz grafikę akcelerowaną, to będzie problem.
Chcesz klawiaturę? PS/2 czy USB? Jak USB to dochodzi najpierw obsługa magistrali USB..
..która i tak może być potrzebna, jeśli bootujemy z pena.

I tak dalej, i tak dalej.

Szybko zrobi ci się z tego naprawdę sporo do ogarnięcia i kodu do napisania. A do użytecznego systemu jeszcze baaardzo daleka droga.

0

Są systemy open source - możesz podejrzeć źródła i zobaczyć jak działają. I raczej nie Linuxa w którym są tryliony linii kodu, tylko coś małego jakiś DOS

0

Chcę zrobić tak by zaraz po starcie PC (Bez systemu) uruchamiał się określony program. Zainteresowałem się assemblerem bo wykonuje się na procku.
Programy wyświetlały by prostą grafikę VGA i działały by w określony sposób i były częściowo kontrolowane przez urządzenia wejścia. Coś jak BGI w Pascal'u dla DOS.
W internecie są informacje jak takie programy pisać w assemblerze. Dość sporo informacji ale chyba nie niemożliwe do nauczenia się.
poza tym czy taki program odpalał by mi się bezpośrednio z płyty przykładowo po uruchomieniu kompa? Wydaje mi się że tak bo wszystko idzie najpierw do procka.
No i ostatnio na zajęciach pracowaliśmy przy kompach bez systemu i te systemy wgrywaliśmy i chyba był taki przypadek że coś tam poszło od razu z płyty.

0

@Azarien Bez przesadyyy. Loader FAT12 w asemblerze da się upchać w mniej niż 512 bajtach. Jeśli chcesz taki program w trybie rzeczywistym (czyli defacto OS) to nie będzie to takie znowu trudne (bynajmniej z początku : P). Obsługa ekranu tak jak @Azarien mówi w prostych przypadkach jest łatwa do napisania, cały myk polega na pisaniu pod odpowiednie adresy gdzie znajduje się przykładowo pamięć VGA (0xb8000). Od siebie polecam kompilator Watcom bo ładnie idzie nim programy real-mode kompilować.
//edit ad jak komputer startuje
Przy klasycznym BIOSie (Ładuje z bootowalnego nośnika 512 bajtów) i skacze pod adres 0x7c00, gdzie znajduje się bootloader, który to z kolei zwykle ładuje większy bootloader położony gdzieś dalej na nośniku bootującym, i tym sposobem bootowanie dzielone jest na 2 fazy. 2 Faza to już właściwy kod czyli twój os.
I jeśli nie przełączasz sie do trybu chronionego to obsługę klawiatury/dysku masz w gratisie od BIOSu, za pomocą przerwań, czyli troche mniej pisania.

0

Więc napisanie tego programu jest możliwe ale skomplikowane.
W końcu jakoś musi być wczytany.
Załóżmy że pisze program w assembler wyświetlający grafikę VGA lub VESA dla bez OS'owego PC'ta i zgrywam na CD lub USB. Ewentualnie na SATA.
i po uruchomieniu pc'ta coś takiego by normalnie poszło?

0

No poszło by, bo czemu nie?
tutaj link masz, miłej zabawy :-)

0

Dużo czytania...
A najprostszy program wyświetlający na ekranie tekst Hello World zgrany na nośnik uruchomił by się?

0

Oto Hello world, zgraj sobie na pendrive (jako surowe dane), ustaw bootowanie z penka, i sam zobacz.

start:
; set segments
mov ax, 0x07c0
mov ds, ax
mov es, ax
; set stack (30 KB @ 0x500)
mov ax, 0x0050
mov ss, ax
mov sp, 0x7bff

jmp main_loop

; SI = string addr
print_string:
    push ax
    push si
        .loop_char:
            lodsb
            cmp al, 0x0
            je .done
            mov ah, 0xe
            int 0x10
            jmp .loop_char
    .done:
        pop si
        pop ax
        ret

main_loop:
    mov si, hello_hello
    call print_string

    cli
    hlt


hello_hello db "Hello World!", 13, 10, 0

; Boot signature
times 510 - ($ - start) db 0
db 0x55
0

Ok :)
Ale ten kod muszę skompilować w czymś czy mogę go wrzucić jako plik tekstowy w określonym formacie i pójdzie przez bootowanie ustawione na pendrive?
a nie odpali się bez przechodzenie w bootowanie?

0

NASM i odpali zarówno bin jak i asm?

0

Pobrałem Nasm i odpala się konsola.
Nie wiem o chodzi

2

Radzę poczytać najpierw o systemach operacyjnych bo to będzie niekończący się łańcuch postów tego typu. Tu http://wiki.osdev.org/Main_Page masz aż za dużo informacji potrzebnych do zrobienia tego co chcesz.

0

Dziękuję. Dam znać potem jak wygląda u mnie sprawa.

0

Hmmm, kiedyś coś podobnego pisałem: http://gynvael.coldwind.pl/?id=184

user image

Poza tym, jeśli przez przypadek kupowałeś magazyn Programista kilka lat temu, to była tam taka "seria" błędnie nazwana 'Bliżej Silikonu' (ofc miało być 'Bliżej Krzemu', ale jakoś sobie ubzdurałem, że w j. polskim to synonimy; człowiek uczy się całe życie i głupi umiera ;>) - tam generalnie było opisane (przeze mnie oraz j00ru) + wytłumaczone jak zrobić coś takiego o co pytasz (razem z pokazaniem jak zrobić grafikę w trybie tekstowym ;>). Wyślij mi wiadomość prywatną jeśli byś nie mógł tego znaleźć.
user image

Ah, i krok pierwszy: nauczyć się korzystać z konsoli - po to jest ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1