Język maszynowy

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, wyszukiwania

Język maszynowy (kod maszynowy) – język programowania, w którym zapis programu wymaga instrukcji bezpośrednio jako liczb, które są rozkazami i danymi bezpośrednio pobieranymi przez procesor wykonujący ten program.

Był to jedyny język programowania komputerów zerowej generacji z wyjątkiem komputera Z4, a powszechnym w początkowym okresie rozwoju komputerów pierwszej generacji.

Kod maszynowy może być generowany w procesie kompilacji (w przypadku języków wysokiego poziomu) lub asemblacji (w przypadku asemblera). W trakcie procesu tworzenia kodu maszynowego tworzony jest często kod pośredni, który może być zapisywany w pliku o odpowiednim formacie. Kod pośredni poddawany jest linkowaniu, które wygeneruje ostateczny obraz programu w taki sposób, że system operacyjny będzie mógł go wczytać, z ewentualnym dostosowaniem argumentów będących adresami do adresów odpowiednich bloków programu w pamięci, i wykonać zawarte w nim instrukcje.

Ponieważ każdy typ procesora ma swój własny język maszynowy, jest to najmniej przenośny język programowania.

Kod maszynowy [edytuj]

Kod maszynowy to postać programu komputerowego (zwana postacią wykonywalną lub binarną) przeznaczona do bezpośredniego lub prawie bezpośredniego wykonania przez procesor. Jest ona dopasowana do konkretnego typu procesora i wyrażona w postaci rozumianych przez niego kodów rozkazów i ich argumentów. Jest to postać trudna do analizy przez człowieka.

W systemach z rodziny DOS/Windows w kodzie maszynowym zapisane są programy umieszczone w plikach typu com. Pliki typu exe zawierają ponadto dodatkowe informacje, np. adresy skoków, które są ustawiane w momencie wczytywania programu do pamięci komputera (wersja 16-bitowa), a także informacje potrzebne do łączenia programu z bibliotekami dynamicznymi (DLL).

Kod maszynowy nie może być wykonywany przez procesory innego typu, niż ten, dla którego zostały napisane. Niesie to za sobą wiele problemów związanych z przenośnością programów. Aby ich uniknąć rozpowszechnia się programy w formie kodu źródłowego (np. oprogramowanie FLOSS) lub w formie kodu pośredniego (np. Java, .NET).

Postać i treść kodu maszynowego zależy nie tylko od kodu źródłowego programu, ale też od translatora, systemu operacyjnego, wersji bibliotek, typu procesora i jego języka maszynowego. Języki wysokiego poziomu wraz z odpowiednimi bibliotekami i kompilatorami umożliwiającą użycie tego samego programu źródłowego do budowy programu pracującego na różnych systemach operacyjnych, różnych procesorach, itd. Niepoprawnie napisany kod źródłowy może powodować problemy podczas procesu tłumaczenia go na niektóre postacie kodu maszynowego.

Kod źródłowy w asemblerze jest silnie związany z konkretną architekturą procesora i zazwyczaj nie można go uruchomić na innej bez wprowadzania zmian.

Kod maszynowy jest generowany za pomocą translatora, który przekształca czytelny dla programisty zapis w języku programowania w odpowiadające mu kody instrukcji maszynowych.