Kiedy mówimy o językach programowania, pierwszą rzeczą, która przychodzi nam na myśl, są języki takie jak C, C++, Java, Python itp. Ale te języki ukrywają faktyczne działanie, tj. Odciągają wiele rzeczy od użytkowników. Istnieje jednak język, który tak naprawdę opiera się na podstawowych koncepcjach programowania lub interakcji pomiędzy sprzętem komputerowym.
Co to jest język asemblera?
język programowania to język niskiego poziomu, który pomaga bezpośrednio komunikować się ze sprzętem komputerowym. Używa mnemoników do reprezentowania operacji, które musi wykonać procesor. Który jest językiem pośrednim między językami wysokiego poziomu, takimi jak C++ i język binarny. Wykorzystuje wartości szesnastkowe i binarne i jest czytelny dla ludzi.
Ewolucja języka asemblera?
Język asemblera ewoluował równolegle z postępem w sprzęcie komputerowym i zmieniającymi się potrzebami programistów. Oto bliższe spojrzenie na każde pokolenie:
Pierwsza generacja (1940-1950):
python zapisz json do pliku
- Komputery opierały się na lampach próżniowych, a programowanie odbywało się bezpośrednio w języku maszynowym, przy użyciu instrukcji binarnych.
- Język asemblera wyłonił się jako czytelna abstrakcja, wykorzystująca kody mnemoniczne do reprezentowania instrukcji maszynowych.
Druga generacja (1950-1960):
- Komputery oparte na tranzystorach zastąpiły lampy próżniowe, oferując lepszą spójność i wydajność.
- Języki asemblera stały się bardziej skomplikowane, aby obsługiwać złożone zestawy instrukcji tych nowych maszyn. Jednocześnie języki programowania wysokiego poziomu, takie jak FORTRAN I COBOL pod warunkiem Zaawansowana abstrakcja
Trzecia generacja (1960-1970):
- Układy scalone stały się standardem, w wyniku czego komputery zostały zmniejszone, ale potężne.
- Języki asemblera ewoluowały dalej, wprowadzając funkcje takie jak makra i etykiety symboliczne, co zwiększyło produktywność programistów i czytelność kodu.
Czwarta generacja (1970-1980):
- Początek mikroprocesorów odmienił oblicze komputerów, torując drogę systemom mikrokomputerowym, takim jak IBM PC i Apple II.
- Języki asemblera dla mikrokomputerów zostały przeprojektowane, aby zwiększyć dostępność dla użytkownika, obejmując podświetlanie składni i automatyczne wcięcia, zwiększając w ten sposób integrację większej grupy programistów.
Piąta generacja (1980-obecnie):
- Era ta charakteryzuje się jednoczesnym wykonywaniem wielu zadań obliczeniowych. Metoda ta jest znana jako system przetwarzania równoległego oraz rozwój wyrafinowanych systemów oprogramowania
- Język asemblera nadal ewoluował, aby sprostać wymaganiom programistów, wraz z wdrażaniem najnowocześniejszych metod i narzędzi debugowania skupiających się na poprawie wydajności i produktywności kodu w przypadku skomplikowanych systemów.
Jak działa język asemblera?
Języki asemblera zawierają kody mnemoniczne, które określają, co powinien zrobić procesor. Kod mnemoniczny napisany przez programistę został w celu wykonania przekonwertowany na język maszynowy (język binarny). Asembler służy do konwersji kodu asemblera na język maszynowy. Ten kod maszynowy jest przechowywany w pliku wykonywalnym w celu wykonania.
Umożliwia programiście bezpośrednią komunikację ze sprzętem, takim jak rejestry, lokalizacje pamięci, urządzenia wejścia/wyjścia lub jakikolwiek inny sprzęt komputerowy składniki. Może to pomóc programiście w bezpośredniej kontroli komponentów sprzętowych i efektywnym zarządzaniu zasobami.
Jak uruchomić język asemblera?
- Napisz kod asemblera : Otwórz dowolny edytor tekstu w urządzeniu i napisz w nim kody mnemoniczne i zapisz plik z odpowiednim rozszerzeniem, zgodnym z twoim asemblerem. Rozszerzenie może być .jako M , .S , .jako M X.
- Składanie kodu : Konwertuj swój kod na język maszynowy za pomocą pliku monter .
- Generowanie pliku obiektowego : Wygeneruje plik obiektowy odpowiadający Twojemu kodowi. Będzie miał rozszerzenie . obj .
- Łączenie i tworzenie plików wykonywalnych : Nasz język asemblera może zawierać wiele kodów źródłowych. Musimy połączyć je z bibliotekami, aby były wykonywalne. W tym celu możemy użyć linkera takiego jak lk.
- Działający program : Po utworzeniu pliku wykonywalnego możemy go uruchomić w zwykły sposób. Sposób uruchomienia programu będzie zależał od oprogramowania.
Składniki języka asemblera
- Rejestry: Rejestry to szybkie lokalizacje pamięci umieszczone wewnątrz procesora. Co pomaga IŚĆ do wykonywania operacji arytmetycznych i tymczasowego przechowywania danych. Przykład: Ax (akumulator), Bx, Cx.
- Komenda: Instrukcja w kodzie asemblera, znana jako polecenie, informuje asemblera, co ma robić. Instrukcje języka asemblera zazwyczaj wykorzystują samoopisowe skróty, aby uprościć słownictwo, jak ADD do dodawania i MOV do przenoszenia danych.
- Instrukcje: Instrukcje to kody mnemoniczne, które podajemy procesorowi w celu wykonania określonych zadań, takich jak ŁADOWANIE, DODAWANIE, PRZESUWANIE. Przykład: DODAJ
- Etykiety: Jest to symboliczna nazwa/identyfikator nadawany w celu wskazania konkretnej lokalizacji lub adresu w kodzie zespołu. Przykład: FIRST wskazujący rozpoczęcie wykonywania części kodu.
- Mnemoniczny: Mnemonik to akronim instrukcji języka asemblerowego lub nazwy nadawanej funkcji maszyny. Każdy mnemonik w asemblerze odpowiada określonej instrukcji maszynowej. Dodaj jest ilustracją jednego z tych poleceń maszynowych. CMP, Mul i Lea to kolejne przykłady.
- Makro: Makra to kody programu, których można używać w dowolnym miejscu programu, wywołując je po zdefiniowaniu. Często jest osadzony w asemblerach i kompilatorach. Powinniśmy to zdefiniować za pomocą dyrektywy %makro. Przykład: %makro ADD_TWO_NUMBERS 2
dodaj ea,%1
dodaj ea,%2
%endmakro - Operandy: Są to dane lub wartości, które otrzymujemy poprzez instrukcję wykonania na nich jakiejś operacji. Przykład: W DODAJ R1,R2; R1 i R2 są operandami.
- Kod operacji: Są to kody mnemoniczne, które określają procesorowi, jaką operację należy wykonać. Przykład: ADD oznacza dodawanie.
Szesnastkowy system liczbowy to system liczbowy używany do reprezentowania różnych liczb za pomocą 16 symboli, czyli od 0 do 9 cyfr i alfabetu od A do F i to to system liczbowy o podstawie 16. Wartości od 0 do 9 w systemie dziesiętnym i szesnastkowym są takie same.
Tabela dziesiętna do szesnastkowej
Dziesiętny | Klątwa | Dziesiętny | Klątwa | Dziesiętny | Klątwa | Dziesiętny | Klątwa |
---|---|---|---|---|---|---|---|
0 | 0 | 10 | A | 20 | 14 | 30 | 1E |
1 | 1 | jedenaście | B | dwadzieścia jeden | piętnaście | 31 | 1F |
2 | 2 | 12 | C | 22 | 16 | 32 | 20 |
3 | 3 | 13 pełna forma ide | D | 23 | 17 | 33 | dwadzieścia jeden |
4 | 4 | 14 | I | 24 | 18 | 3. 4 | 22 |
5 | 5 | piętnaście | F | 25 | 19 | 35 | 23 |
6 | 6 | 16 | 10 | 26 | 1A | 36 Czyszczenie pamięci podręcznej npm | 24 |
7 | 7 | 17 | jedenaście | 27 | 1B | 37 | 25 |
8 | 8 | 18 | 12 | 28 | 1 C | 38 | 26 |
9 | 9 | 19 javascript po kliknięciu | 13 | 29 | 1D | 39 | 27 |
Liczby szesnastkowe można łatwo przekonwertować na inną formę, taką jak system liczb binarnych, system liczb dziesiętnych, system liczb ósemkowych i odwrotnie. W tym artykule skupimy się wyłącznie na konwersji systemu szesnastkowego na dziesiętny i odwrotnie.
Konwersja systemu dziesiętnego na szesnastkowy:
Krok 1: Wprowadź wartość dziesiętną N.
Krok 2: Podziel N przez 16 i zapisz resztę.
Krok 3: Ponownie podziel iloraz przez 16, uzyskaj w kroku 2 i zapisz resztę.
Krok 3: powtarzaj krok 3, aż iloraz wyniesie 0.
krok 4: Zapisz resztę w odwrotnej kolejności i będzie to wartość szesnastkowa liczby.
Przykład: Konwertuj wartość dziesiętną 450 na wartość szesnastkową.
krok 1: N = 450.
Krok 2: 450/16 daje Q = 28, R = 2.
Krok 3: 28/16 daje Q = 1, R = 12 = C.
Krok 4: 1/16 daje Q = 0, R = 1.
Krok 5: liczba szesnastkowa 450 to 1C2.
Konwersja systemu szesnastkowego na dziesiętny
Aby przekonwertować zapis szesnastkowy na dziesiętny, pomnóż każdą cyfrę przez 16 do potęgi jej pozycji, zaczynając od prawej strony, a pozycja cyfry znajdującej się najbardziej na prawo wynosi 0, a następnie dodaj wynik.
Przykład: Konwertuj (A7B) 16 do dziesiętnego.
(A7B)16= A × 162+7×161+ B × 160
⇒ (A7B)16= 10 × 256 + 7 × 16 + 11 × 1 (przelicz symbole A i B na ich dziesiętne odpowiedniki; A = 10, B = 11)
⇒ (A7B)16= 2560 + 112 + 11
⇒ (A7B)16= 2683
Dlatego dziesiętny odpowiednik (A7B)16jest (2683)10.
Zalety języka asemblera
- Zapewnia precyzyjną kontrolę nad sprzętem, a co za tym idzie zwiększoną optymalizację kodu.
- Umożliwia bezpośredni dostęp do komponentów sprzętowych, takich jak rejestry, dzięki czemu umożliwia indywidualne rozwiązania problemów sprzętowych.
- Efektywne wykorzystanie zasobów dzięki kontroli niskiego poziomu, zoptymalizowanemu kodowi, świadomości zasobów, dostosowywaniu itp.
- Idealnie nadaje się do programowania mikrokontrolery , czujniki i inne elementy sprzętowe.
- Jest stosowany w badaniach bezpieczeństwa w celu znalezienia luk w zabezpieczeniach, oprogramowania do inżynierii wstecznej w celu zapewnienia bezpieczeństwa systemu.
- Jest to bardzo istotne przy tworzeniu system operacyjny , jądro I kontrolery urządzeń który wymaga interakcji sprzętowej dla swojej funkcjonalności.
Wady języka asemblera
- Skomplikowany i bardzo trudny do nauczenia się język, szczególnie dla początkujących.
- Jest to w dużym stopniu zależne od maszyny. Ogranicza to zatem przenośność.
- Utrzymanie kodu jest naprawdę trudne, szczególnie w przypadku projektów na dużą skalę.
- Jest to bardzo czasochłonne, ponieważ kod jest naprawdę trudny do zrozumienia i bardzo długi.
- Debugowanie jest dużym wyzwaniem dla programistów.
Często zadawane pytania dotyczące języka asemblera – często zadawane pytania
Gdzie używany jest język asemblera?
- Rozwój systemu operacyjnego
- Tworzenie sterownika urządzenia
- Programowanie systemów wbudowanych
- Aplikacje w czasie rzeczywistym
- Badania bezpieczeństwa
Różnica między językiem asemblera a językiem wysokiego poziomu?
Język asemblera to kody mnemoniczne i jest ściśle powiązany z zestawem instrukcji procesora. W HLL istnieje abstrakcja.
Jakiej architektury procesora powinienem się nauczyć, aby programować w asemblerze?
Architektury mikroprocesorów 8085 i 8086 znacznie lepiej rozumieją koncepcje.
Czy język asemblera jest nadal przydatny we współczesnej informatyce?
Tak. Język asemblera pozostaje aktualny.