Język maszynowy
Kod maszynowy to program komputerowy napisany w języku maszynowym. Wykorzystuje on zestaw instrukcji danej architektury komputera. Zazwyczaj jest zapisany w postaci binarnej. Kod maszynowy jest najniższym poziomem oprogramowania. Inne języki programowania są tłumaczone na kod maszynowy, aby komputer mógł je wykonać.
Instrukcja mówi procesowi, jaką operację ma wykonać. Każda instrukcja składa się z opcode (kodu operacji) i operandu (operandów). Operandami są zazwyczaj adresy pamięci lub dane. Zestaw instrukcji to lista kodów operacyjnych dostępnych dla danego komputera. Kod maszynowy jest tym, do czego kod asemblera i inne języki programowania są kompilowane lub interpretowane.
Konstruktorzy programów przekształcają kod w inny język lub kod maszynowy. Kod maszynowy jest czasami nazywany kodem natywnym. Jest to używane, gdy mówimy o rzeczach, które działają tylko na niektórych komputerach.
Pisanie kodu maszynowego
Kod maszynowy może być zapisany w różnych formach:
- Użycie pewnej liczby przełączników. Generuje to sekwencję 1 i 0. Było to używane we wczesnych dniach informatyki. Od lat 70-tych nie jest już używane.
- Użycie edytoraHex. Pozwala to na użycie opcodes zamiast numeru polecenia.
- Używanie asemblera. Języki asemblera są prostsze od kodów operacyjnych. Ich składnia jest łatwiejsza do zrozumienia niż języka maszynowego, ale trudniejsza niż języków wysokiego poziomu. Asembler sam przetłumaczy kod źródłowy na kod maszynowy.
- Użycie języka programowania wysokiego poziomu pozwala programom używać kodu, który jest łatwiejszy do czytania i pisania. Programy te są tłumaczone na kod maszynowy. Tłumaczenie może odbywać się w wielu krokach. Programy w Javie są najpierw optymalizowane do postaci kodu bajtowego. Następnie są one tłumaczone na język maszynowy, gdy są używane.
Panel przedni wczesnego minikomputera, z przełącznikami do wprowadzania kodu maszynowego
Typowe instrukcje kodu maszynowego
Istnieje wiele rodzajów instrukcji, które zazwyczaj znajdują się w zestawie instrukcji:
- Działania arytmetyczne: Dodawanie, odejmowanie, mnożenie, dzielenie.
- Operacje logiczne: Koniunkcja, dysjunkcja, negacja.
- Operacje działające na pojedynczych bitach: Przesunięcie bitów w lewo lub w prawo.
- Operacje działające na pamięci: kopiowanie wartości z jednego rejestru do drugiego.
- Operacje, które porównują dwie wartości: większy niż, mniejszy niż, równy.
- Operacje, które łączą w sobie inne operacje: dodawanie, porównywanie i kopiowanie, jeśli są równe jakiejś wartości (jako jedna operacja), skok do jakiegoś punktu programu, jeśli rejestr jest zerowy.
- Operacje, które działają na przepływ programu: skok pod jakiś adres.
- Operacje, które konwertują typy danych: np. konwersja 32-bitowej liczby całkowitej na 64-bitową liczbę całkowitą, konwersja wartości zmiennoprzecinkowej na liczbę całkowitą (przez obcięcie).
Wiele nowoczesnych procesorów używa mikrokodu dla niektórych poleceń. Bardziej złożone komendy mają tendencję do używania go. Jest to często wykonywane w architekturach CISC.
Instrukcje
Każdy procesor lub rodzina procesorów ma swój własny zestaw instrukcji. Instrukcje są wzorcami bitów, które odpowiadają różnym poleceniom, jakie można wydać maszynie. Tak więc zestaw instrukcji jest specyficzny dla klasy procesorów używających (w większości) tej samej architektury.
Nowsze projekty procesorów często zawierają wszystkie instrukcje poprzednika i mogą dodawać dodatkowe instrukcje. Czasami nowszy projekt przerywa lub zmienia znaczenie kodu instrukcji (zazwyczaj dlatego, że jest on potrzebny do nowych celów), wpływając na kompatybilność kodu; nawet prawie całkowicie kompatybilne procesory mogą wykazywać nieco inne zachowanie dla niektórych instrukcji, ale rzadko jest to problem.
Systemy mogą różnić się także innymi szczegółami, takimi jak rozmieszczenie pamięci, systemy operacyjne lub urządzenia peryferyjne. Ponieważ program zazwyczaj opiera się na takich czynnikach, różne systemy zazwyczaj nie wykonują tego samego kodu maszynowego, nawet jeśli używany jest ten sam typ procesora.
Większość instrukcji posiada jedno lub więcej pól opcode. Określają one podstawowy typ instrukcji. Inne pola mogą podawać typ operandów, tryb adresowania, itd. Mogą też istnieć specjalne instrukcje, które są zawarte w samym opcode. Instrukcje te nazywane są bezpośrednimi.
Projekty procesorów mogą się różnić na inne sposoby. Różne instrukcje mogą mieć różną długość. Mogą też mieć taką samą długość. Posiadanie wszystkich instrukcji o tej samej długości może uprościć projekt.
Przykład
Architektura MIPS posiada instrukcje, które mają długość 32 bitów. Ta sekcja zawiera przykłady kodu. Ogólny typ instrukcji znajduje się w polu op (operation). Jest to najwyższe 6 bitów. Instrukcje typu J (skok) oraz I (natychmiastowe) są w całości podawane przez op. Instrukcje typu R (register) zawierają pole funct. Określa ono dokładne działanie kodu. Pola używane w tych typach to:
6 5 5 5 6 bity [ op | rs | rt | rd |shamt| funct] R-type [ op | rs | rt | adres/immediate] I-type [ op | adres docelowy ] J-typers, rt, i rd wskazują operandy rejestru. shamt podaje wartość przesunięcia. Pola address lub immediate zawierają bezpośrednio operand.
Przykład: dodaj rejestry 1 i 2. Wynik umieść w rejestrze 6. Jest on zakodowany:
[ op | rs | rt | rd |shamt| funct] 0 1 2 6 0 32 decimal 000000 00001 00010 00110 00000 100000 binaryZaładuj wartość do rejestru 8. Weź ją z komórki pamięci 68 komórek po lokalizacji podanej w rejestrze 3:
[ op | rs | rt | address/immediate] 35 3 8 68 dziesiętnie 100011 00011 01000 00000 00001 000100 binarniePrzejdź do adresu 1024:
2 1024 dziesiętnie 000010 00000 00000 00000 00000 10000 000000 binarniePowiązane strony
- System liczb binarnych
- Komputery kwantowe
- Zestaw instrukcji
- Komputer o zredukowanym zestawie instrukcji
Pytania i odpowiedzi
P: Czym jest kod maszynowy?
O: Kod maszynowy to program komputerowy napisany w języku maszynowym, wykorzystujący zestaw instrukcji określonej architektury komputera i zwykle napisany w języku binarnym.
P: Jaki jest najniższy poziom oprogramowania?
O: Kod maszynowy to najniższy poziom oprogramowania.
P: W jaki sposób inne języki programowania są wykonywane przez komputery?
O: Inne języki programowania są tłumaczone na kod maszynowy, który komputer może wykonać.
P: Z czego składa się instrukcja w kodzie maszynowym?
O: Instrukcja w kodzie maszynowym składa się z kodu operacyjnego i operandu (operandów). Operandami są zazwyczaj adresy pamięci lub dane.
P: Co to jest zestaw instrukcji?
O: Zestaw instrukcji to lista kodów operacyjnych dostępnych dla komputera.
P: Co programiści robią z kodem?
O: Twórcy programów przekształcają kod w inny język lub kod maszynowy.
P: Jaka jest inna nazwa kodu maszynowego?
O: Kod maszynowy jest czasami nazywany kodem natywnym, używanym, gdy mówimy o rzeczach, które działają tylko na niektórych komputerach.