Jaki jest system liczb szesnastkowych w informatyce. Binarny ósemkowy szesnastkowy system liczbowy

W systemie liczb szesnastkowych alfabet składa się z 16 cyfr:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, b, c, d, e, f.

Podczas zapisywania liczby w systemie szesnastkowym do zapisu cyfr oznaczających liczby 10, 11, 12, 13, 14, 15 używa się odpowiednio liter A, B, C, D, E, F.

Zamiana liczb z postaci szesnastkowej na dziesiętną

Możesz przekonwertować dowolną liczbę szesnastkową na dziesiętną, korzystając ze znanego już wzoru

Przykłady.

    AE07 16 =10∙16 3 +14∙16 2 +0∙16 1 +7∙16 0 =44551 10 .

    100 16 =1∙16 2 +0∙16 1 +0∙16 0 =256 10 .

    58 16 =5∙16 1 +8∙16 0 =.88 10 .

    2A 16 =2∙16 1 +10∙16 0 =42 10.

Konwersja liczby z systemu dziesiętnego na szesnastkowy odbywa się w taki sam sposób, jak na binarny.

Konwersja liczb z postaci szesnastkowej na binarną i odwrotnie

Możesz przekonwertować dowolną liczbę szesnastkową na binarną w następujący sposób. Każda cyfra liczby szesnastkowej jest zapisywana jako czterocyfrowa liczba binarna - zeszyt. Następnie zera po lewej stronie można odrzucić.

2) 2A= 0010 1010 2 = 101010 2 .

3) 58 16 = 0101 1000 2 = 1011000 2 .

I odwrotnie, w ten sam sposób możesz przekonwertować dowolną liczbę binarną na szesnastkową. Każde cztery cyfry binarne, licząc od prawej do lewej, są zapisywane jako jedna cyfra szesnastkowa. Liczby te są również umieszczone od prawej do lewej.

Przykłady.

2. 101010 2 = 10 1010 2 = 2A.

3. 1011000 2 = 101 1000 2 = 58 16 .

System liczb ósemkowych

System liczb ósemkowych ma alfabet składający się z 8 cyfr:

0, 1, 2, 3, 4, 5, 6, 7.

Konwersja liczby z systemu dziesiętnego na ósemkowy i odwrotnie odbywa się w taki sam sposób, jak konwersja do/z systemu binarnego.

Konwersja liczb z formatu ósemkowego na binarny i odwrotnie

Każda cyfra liczby ósemkowej jest zapisywana jako trzycyfrowa liczba binarna - triada.

Przykłady.

2563 8 = 010 101 110 011 2 =10101110011 2 .

1001101 2 = 001 001 101 2 = 115 8 .

Materiały metodyczne do lekcji laboratoryjnej nr 1

Temat zajęć laboratoryjnych: Systemy liczbowe. Informacje pomiarowe.

Liczba godzin: 2.

Przykłady z rozwiązaniami

    Tłumaczenie zP system -arny do systemu 10-arowego. Załóżmy, że musimy przekonwertować liczbę w określonym systemie liczbowym na dziesiętny. Aby to zrobić, musisz przedstawić to w formularzu

11100110 2 = 1∙2 7 + 1∙2 6 + 1∙2 5 + 0∙2 4 + 0∙2 3 + 1∙2 2 + 1∙2 1 + 0∙2 0 = 128 + 64 + 32 + 4 + 2 = 230 10 .

2401 5 = 2∙5 3 + 4∙5 2 + 0∙5 1 + 1∙5 0 = 250 + 100 + 0 + 1 = 351.

    Konwersja z systemu 10-cyfrowego naP -ichnaya.

2.1 98 10 → X 2.

Dzielimy liczbę przez 2. Następnie dzielimy niepełny iloraz przez 2. Kontynuujemy, aż niepełny iloraz stanie się mniejszy niż 2, tj. równy 1.

    98: 2 = 49. Reszta - 0 .

    49: 2 = 24. Reszta - 1 .

    24: 2 = 12. Reszta - 0 .

    12: 2 = 6. Reszta - 0 .

    6: 2 = 3. Reszta - 0 .

    3: 2 = 1 . Reszta - 1 .

Ponieważ ostatni iloraz częściowy wynosi 1, proces się kończy. Wszystkie reszty zapisujemy od dołu do góry, zaczynając od ostatniego niepełnego ilorazu i otrzymujemy liczbę 1100010. Zatem 98 10 = 1100010 2.

2.2 2391 10 → X 16.

Podziel liczbę przez 16. Następnie podziel iloraz częściowy przez 16. Kontynuuj, aż iloraz częściowy będzie mniejszy niż 16.

    2391: 16 = 149. Reszta - 7 .

    149: 16 = 9 . Reszta - 5 .

Ponieważ ostatni iloraz częściowy (9) jest mniejszy niż 16, proces się kończy. Zapisujemy, zaczynając od ostatniego niepełnego ilorazu, wszystkie reszty od dołu do góry i otrzymujemy liczbę 957. Zatem 2391 10 = 957 16.

2.3 12165 10 → X 2.

Jeśli dokonasz konwersji przez dzielenie do systemu binarnego, otrzymasz dość uciążliwy proces. Możesz najpierw przekonwertować liczbę na ósemkową, a następnie zastąpić cyfry ósemkowe od prawej do lewej triadami.

12165 10 = 27605 8 = 010 111 110 000 101 = 10111110000101.

    Wyznaczanie podstawy systemu liczbowegoP .

Pewien chłopiec napisał o sobie: „Mam 24 palce, po 5 u każdej ręki i 12 u nóg”. Jak to może być?

Rozwiązanie. Konieczne jest określenie podstawy systemu liczbowego P. Skoro wiemy, że jest tylko 10 palców to 10, to 12 P =1∙P+2 = 10 10 . Stąd otrzymujemy równanie P + 2 = 10  P= 8. A więc chłopiec miał na myśli liczby w systemie ósemkowym. Rzeczywiście, jest 24 8 = 2∙8+4 = 20 10 palców i 12 8 = 1∙8+2 = 10 10 palców.

Szesnastkowy system liczbowy(znany również jako kod szesnastkowy) to pozycyjny system liczbowy z liczbą całkowitą wynoszącą 16. W literaturze czasami używany jest również termin hex (wymawiane hex, skrót od angielskiego hexadecimal). Cyfry tego systemu liczbowego są zwykle używane w postaci cyfr arabskich 0-9, a także pierwszych znaków alfabetu łacińskiego A-F. Litery odpowiadają następującym wartościom dziesiętnym:

  • *A-10;
  • *B-11;
  • *C-12;
  • * D-13;
  • * E - 14;
  • * F - 15.

Zatem dziesięć cyfr arabskich w połączeniu z sześcioma literami łacińskimi tworzy szesnaście cyfr systemu.

Nawiasem mówiąc, na naszej stronie możesz przekonwertować dowolny tekst na kod dziesiętny, szesnastkowy lub binarny za pomocą kalkulatora kodów online.

Aplikacja. Kod szesnastkowy szeroko stosowane w programowaniu niskiego poziomu, a także w różnych dokumentach referencyjnych komputerów. Popularność systemu uzasadniają rozwiązania architektoniczne współczesnych komputerów: minimalną jednostką informacji jest w nich bajt (składający się z ośmiu bitów), a wartość bajtu wygodnie zapisuje się za pomocą dwóch cyfr szesnastkowych. Wartość bajtu może mieścić się w zakresie od #00 do #FF (od 0 do 255 w zapisie dziesiętnym) - innymi słowy, używając kod szesnastkowy, można zapisać dowolny stan bajtu, przy czym nie ma żadnych „dodatkowych” cyfr, które nie zostałyby użyte w nagraniu.

Zakodowane Unikod Do zapisania numeru znaku używane są cztery cyfry szesnastkowe. Notacja kolorów RGB (czerwony, zielony, niebieski) również często wykorzystuje kod szesnastkowy (na przykład #FF0000 to zapis koloru jasnoczerwonego).

Metoda pisania kodu szesnastkowego.

Matematyczny sposób pisania. W notacji matematycznej podstawę systemu zapisuje się w postaci dziesiętnej jako indeks dolny po prawej stronie liczby. Zapis dziesiętny liczby 3032 można zapisać jako 3032 10, w systemie szesnastkowym liczba ta będzie miała zapis BD8 16.

W składni języków programowania. Składnia różnych języków programowania w różny sposób określa format zapisu liczby kod szesnastkowy:

* Składnia niektórych odmian języka asemblera wykorzystuje łacińską literę „h”, która jest umieszczona po prawej stronie liczby, na przykład: 20Dh. Jeśli liczba zaczyna się od litery łacińskiej, przed nią umieszcza się zero, na przykład: 0A0Bh. Odbywa się to w celu odróżnienia wartości za pomocą stałych od stałych. kod szesnastkowy;

* Inne typy asemblerów, jak również Pascal (i jego warianty, takie jak Delphi) i niektóre dialekty Basic, używają przedrostka „$”: $A15;

* W języku znaczników HTML, a także w kaskadowych plikach CSS, przedrostek „#” używany jest do wskazania koloru w formacie RGB z zapisem szesnastkowym: #00DC00.

Jak przekonwertować kod szesnastkowy na inny system?

Konwersja z postaci szesnastkowej na dziesiętną. Aby wykonać operację konwersji z systemu szesnastkowego na system dziesiętny, należy przedstawić pierwotną liczbę jako sumę iloczynów cyfr liczby szesnastkowej i potęgi podstawy.

Binarny SS

sześciokąt SS

Na przykład musisz przetłumaczyć liczbę szesnastkową A14: ma ona trzy cyfry. Korzystając z reguły zapisujemy ją jako sumę potęg o podstawie 16:

A14 16 = 10,16 2 + 1,16 1 + 4,16 0 = 10,256 + 1,16 + 4,1 = 2560 + 16 + 4 = 2580 10

Konwersja liczb z postaci binarnej na szesnastkową i odwrotnie.

Do tłumaczenia służy stół do notatników. Aby przekonwertować liczbę z postaci binarnej na dziesiętną, należy podzielić ją na osobne tetrady od prawej do lewej, a następnie korzystając z tabeli zastąpić każdą tetradę odpowiednią cyfrą szesnastkową. Ponadto, jeśli liczba cyfr nie jest wielokrotnością czterech, należy dodać odpowiednią liczbę zer po prawej stronie liczby, aby całkowita liczba cyfr binarnych stała się wielokrotnością czterech.

Tabela zeszytów do tłumaczenia.

Aby dokonać konwersji z postaci szesnastkowej na binarną, należy wykonać operację odwrotną: zamień każdą cyfrę na tetradę z tabeli.

Binarny SS

Oktal SS

Przykład konwersja z formatu szesnastkowego na binarny: A5E 16 = 1010 0101 1110 = 101001011110 2

Przykład konwersja z postaci binarnej na szesnastkową: 111100111 2 = 0001 1110 0111 = 1E7 16

W tym przykładzie liczba cyfr w oryginalnej liczbie binarnej nie wynosiła cztery (9), więc dodano zera na początku, aby uzyskać łączną liczbę cyfr wynoszącą 12.

Automatyczne tłumaczenie. Szybka konwersja z szesnastkowego systemu liczbowego na jeden z trzech popularnych systemów (binarny, ósemkowy i dziesiętny), a także konwersja odwrotna, można wykonać za pomocą standardowego kalkulatora dołączonego do systemu operacyjnego Windows. Otwórz kalkulator, wybierz z menu Widok -> Programista. W tym trybie możesz ustawić aktualnie używany system liczbowy (patrz menu po lewej stronie: Hex, Dec, Paź, Bin). W takim przypadku zmiana bieżącego systemu liczbowego powoduje automatyczne tłumaczenie.

Aby pisać programy w asemblerze, musisz znać szesnastkowy system liczbowy. Nie ma w tym nic skomplikowanego. W życiu używamy systemu dziesiętnego. Jestem pewien, że wszyscy to wiecie, dlatego spróbuję wyjaśnić system szesnastkowy, posługując się analogią do systemu dziesiętnego.

Zatem w systemie dziesiętnym, jeśli dodamy zero do dowolnej liczby po prawej stronie, liczba ta wzrośnie 10 razy. Na przykład: 1 x 10 = 10; 10 x 10 = 100; 100 x 10 = 1000 itd. W tym systemie używamy liczb od 0 do 9, tj. dziesięć różnych liczb (właściwie dlatego nazywa się to dziesiętnym).

W systemie szesnastkowym używamy szesnastu „cyfr”. Specjalnie napisałem słowo „cyfry” w cudzysłowie, ponieważ… Nie używa tylko liczb. I naprawdę, jak to możliwe? Wyjaśnię: od 0 do 9 liczymy tak samo jak po przecinku, ale wtedy będzie tak: A, B, C, D, E, F. Liczba F nie jest trudna liczyć, będzie ona równa 15 w systemie dziesiętnym (patrz tabela 1).

Liczba dziesiętna

Liczba szesnastkowa

Tabela 1. Systemy dziesiętne i szesnastkowe.

Zatem jeśli dodamy zero po prawej stronie dowolnej liczby w systemie szesnastkowym, to liczba ta wzrośnie o16 raz.

Przykład 1: 1 x 16 = 10; 10 x 16 = 100; 100 x 16 = 1000 itd.

Czy w przykładzie 1 potrafiłeś odróżnić liczby szesnastkowe od liczb dziesiętnych? A z tej serii: 10, 12, 45, 64, 12, 8, 19? Mogą to być liczby szesnastkowe lub dziesiętne. Aby uniknąć nieporozumień i aby komputer mógł wyraźnie odróżnić jedną liczbę od drugiej, w asemblerze zwyczajowo umieszcza się symbol h lub H po liczbie szesnastkowej ( H to skrót od języka angielskiego. szesnastkowy (szesnastkowy). Dla zwięzłości czasami nazywa się to po prostu Klątwa ) . I nie wpisuj niczego po przecinku. Ponieważ liczby od 0 do 9 w obu systemach mają to samo znaczenie, wówczas liczby zapisane jako 5 i 5h są takie same.

To. Przykład 1 (patrz wyżej) byłby bardziej poprawny, gdyby zapisać w ten sposób: 1 x 16 = 10h; 10 godz. x 16 = 100 godz.; 100 godz. x 16 = 1000 godz. Lub tak: 1h x 10h = 10h; 10h x 10h = 100h; 100h x 10h = 1000h.

W kolejnych wydaniach przyjrzymy się, dlaczego system szesnastkowy jest potrzebny. Na razie dla naszego przykładowego programu, który zostanie omówiony poniżej, musimy wiedzieć o istnieniu liczb szesnastkowych.

Podsumujmy więc. Szesnastkowy system liczbowy składa się z 10 cyfr (od 0 do 9) i 6 liter alfabetu łacińskiego (A, B, C, D, E, F). Jeśli dodamy zero po prawej stronie dowolnej liczby w systemie szesnastkowym, to liczba ta wzrośnie o16 raz. Zrozumienie tego tematu jest bardzo ważne, ponieważ będziemy go stale używać podczas pisania programów.

Teraz trochę o tym, jak będę budować przykłady w Asemblerze. Prezentowanie ich w formacie HTML nie jest do końca wygodne, więc najpierw będzie sam kod programu z ponumerowanymi liniami, a zaraz po nim będą wyjaśnienia i notatki.

Tak:

linie Kod programu
(1) ach, 9

Wyjaśnienia:

W linii (1) robimy to, a w linii (15) robimy tamto.

Ogromna prośba: NIE kopiuj programów ze strony do schowka, a następnie wklejaj je do Notatnika (lub gdziekolwiek indziej)! Wpisz je ponownie ręcznie w edytorze tekstu. Jeżeli posiadasz drukarkę to wybierz program, wydrukuj wybrany fragment, a następnie przenieś go z papieru do edytora. Wszystkie przykłady należy wpisać samodzielnie! Przyspieszy to zapamiętywanie operatorów.

I dalej. W asemblerze nie ma różnicy pomiędzy małymi i WIELKIMI literami. Zapisy formularza:

Asembler postrzega je w ten sam sposób. Można oczywiście zmusić asembler do rozróżniania małych i WIELKICH liter, ale na razie tego nie zrobimy. Aby program był bardziej czytelny, operatory najlepiej wpisywać małymi literami, a nazwy podprogramów i etykiet dużymi literami. Ale to zależy dla kogo będzie wygodnie.

Przejdźmy więc do naszego pierwszego programu:

(1) Segment CSEG

(2)org 100h

(4) Rozpocznij:

(6) ruch ah,9

(7) mov dx, przesunięcie Wiadomość

(8) w godz. 21.00

(10) w godz. 20:00

(11)

(12) Wiadomość db „Witaj, świecie!$”

(13) CSEG dobiega końca

(14) koniec początek

Aby wyjaśnić wszystkie operatory w tym przykładzie, będziemy potrzebować kilku wydań. Dlatego na tym etapie po prostu pominiemy opis niektórych poleceń. Po prostu załóżmy, że tak właśnie powinno być. Przyjrzymy się tym operatorom szczegółowo w najbliższej przyszłości. Zatem linie o numerach (1), (2) i (13) po prostu ignorujesz.

Linie (3), (5), (9) i (11) pozostają puste. Odbywa się to dla przejrzystości. Asembler po prostu je pominie.

Przejdźmy teraz do rozważenia pozostałych operatorów. Kod programu zaczyna się od linii (4). Jest to znak, który informuje asembler o początku kodu. Linia (14) zawiera koniec operatorów Begin ( Zacznij od angielskiego Początek; koniec koniec). To koniec programu. Ogólnie rzecz biorąc, zamiast słowa Zaczynać można było zastosować coś innego. Na przykład, Początek:. W takim przypadku musielibyśmy zakończyć program Koniec Początek (14).

Linie (6) (8) wyświetlają komunikat Witaj, świecie!. Tutaj będziemy musieli pokrótce porozmawiać o rejestrach procesorów (szerzej przyjrzymy się temu tematowi w następnym numerze).

Rejestr procesora to specjalnie przydzielona pamięć do przechowywania liczby.

Na przykład:

Jeśli chcemy dodać dwie liczby, to w matematyce zapisujemy to w ten sposób:

A, B i C są to swego rodzaju rejestry (jeśli mówimy o komputerze), w których można przechowywać pewne dane. A=5 można odczytać jako: Przypisz A liczbę 5 .

Aby przypisać wartość do rejestru, w Asemblerze znajduje się operator mov (z angielskiego move loading). Wiersz (6) należy czytać następująco: Wczytanie do rejestru A.H.numer 9 (innymi słowy przypisujemy A.H.numer 9). Poniżej przyjrzymy się, dlaczego jest to konieczne.

W linii (7) ładujemy do rejestru DX adres komunikatu wyjściowego (w tym przykładzie będzie to ciągWitaj, świecie!$).

Przerwania zostaną szczegółowo omówione w kolejnych wydaniach. Tutaj powiem kilka słów.

Przerywać MS-DOS jest to rodzaj podprogramu (część MS-DOS), który znajduje się na stałe w pamięci i można go wywołać w dowolnym momencie z dowolnego programu.

Rozważmy powyższe na przykładzie (Notatki drobnym drukiem):

Program do dodawania dwóch liczb

Strona głównaProgramy

A=5 Do zmiennej A wpisujemy wartość 5

B=8 do zmiennej B wartość 8

Dodawanie podprogramów wywołania

teraz C równa się 13

A=10 to samo, tylko inne liczby

B=25

Dodawanie podprogramów wywołania

teraz C jest równe 35

Koniec programu

Dodanie podprogramu

C=A+B

Powrót z podprogramu wracamy na miejsce, z którego dzwoniliśmy

KoniecPodprogramu

W tym przykładzie dwukrotnie wywołaliśmy podprogram Dodatek, który dodał dwie liczby przekazane mu w zmiennych A i B . Wynik umieszczany jest w zmiennej C. Po wywołaniu podprogramu komputer zapamiętuje, skąd został wywołany, a następnie po zakończeniu działania podprogramu wraca do miejsca, z którego został wywołany. To. Podprogramy można wywoływać nieograniczoną liczbę razy z dowolnego miejsca.

Wykonując linię (8) programu w asemblerze, wywołujemy podprogram (w tym przypadku nazywany przerwaniem), który wyświetla linię na ekranie. W tym celu faktycznie umieszczamy w rejestrach niezbędne wartości. Całą niezbędną pracę (wypisanie linii, przesunięcie kursora) przejmuje podprogram. Linię tę można odczytać w następujący sposób: wywołaj dwudzieste pierwsze przerwanie ( int z angielskiego przerywać przerywać). Należy pamiętać, że po cyfrze 21 znajduje się litera H . To, jak już wiemy, jest liczbą szesnastkową (33 w systemie dziesiętnym). Oczywiście nic nie stoi na przeszkodzie, abyśmy wymienili żyłkę od 21:00 do 33. Program będzie działał poprawnie. Powszechną praktyką w Asemblerze jest podawanie numeru przerwania w postaci szesnastkowej.

W linii (10) jak można się domyślić wywołujemy przerwanie 20 H . Aby wywołać to przerwanie, nie trzeba podawać żadnych wartości w rejestrach. Wykonuje tylko jedno zadanie: wyjście z programu (wyjście do DOS-u). W wyniku przerwania 20h program powróci do miejsca, z którego został uruchomiony (załadowany, wywołany). Na przykład w Norton Commander lub Nawigator DOS.

Linia (12) zawiera komunikat, który ma zostać wysłany. Pierwsze słowo ( wiadomość wiadomość) tytuł wiadomości. Może to być wszystko (np. bałagan lub sznurek itp.). O Zwróć uwagę na linię (7), w której ładujemy do rejestru DX nasz adres wiadomości.

Możemy stworzyć kolejną linię, którą będziemy wywoływać Bałagan2. Następnie zaczynając od linii (9) wstaw następujące polecenia:

(10) mov dx, przesunięcie Mess2

(13) Wiadomość db „Witaj, świecie!$”

(14) Mess2 db „To JA! $”

i ponownie zmontuj nasz program. Mam nadzieję, że domyślacie się, co się stanie

Zwróć uwagę na ostatni znak w wierszu Wiadomość i bałagan2 - $. Wskazuje koniec linii. Jeśli to usuniemy, to 21 H przerwanie będzie kontynuowane, dopóki nie napotka znaku gdzieś w pamięci $. Na ekranie zobaczymyśmieci .

Jeśli posiadasz debugger, możesz zobaczyć jak będzie działał nasz program.

Celem tego problemu nie było zrozumienie szczegółowo z każdym operatorem. To niemożliwe, ponieważ nie masz jeszcze wystarczającej wiedzy. Wierzę, że po 3-4 wydaniach zrozumiecie zasadę i strukturę programu Assembly. Być może język Zgromadzenia wydawał ci się niezwykle skomplikowany, ale uwierz mi, tak jest na pierwszy rzut oka.

Szesnastkowy system liczbowy. nasz pierwszy program.

Aby pisać programy w asemblerze, musisz znać szesnastkowy system liczbowy. Nie ma w tym nic skomplikowanego. W życiu używamy systemu dziesiętnego. Jestem pewien, że wszyscy to wiecie, dlatego spróbuję wyjaśnić system szesnastkowy, posługując się analogią do systemu dziesiętnego.

Zatem w systemie dziesiętnym, jeśli dodamy zero do dowolnej liczby po prawej stronie, liczba ta wzrośnie 10 razy. Na przykład: 1 x 10 = 10; 10 x 10 = 100; 100 x 10 = 1000 itd. W tym systemie używamy liczb od 0 do 9, tj. dziesięć różnych liczb (właściwie dlatego nazywa się to dziesiętnym).

W systemie szesnastkowym używamy szesnastu „cyfr”. Specjalnie napisałem słowo „cyfry” w cudzysłowie, ponieważ… Nie używa tylko liczb. I naprawdę, jak to możliwe? Wyjaśnię: od 0 do 9 liczymy tak samo jak po przecinku, ale wtedy będzie tak: A, B, C, D, E, F. Liczba F nie jest trudna liczyć, będzie ona równa 15 w systemie dziesiętnym (patrz tabela 1).

Liczba dziesiętna

Liczba szesnastkowa

Tabela 1. Systemy dziesiętne i szesnastkowe.

Zatem jeśli dodamy zero po prawej stronie dowolnej liczby w systemie szesnastkowym, to liczba ta wzrośnie o16 raz.

Przykład 1: 1 x 16 = 10; 10 x 16 = 100; 100 x 16 = 1000 itd.

Czy w przykładzie 1 potrafiłeś odróżnić liczby szesnastkowe od liczb dziesiętnych? A z tej serii: 10, 12, 45, 64, 12, 8, 19? Mogą to być liczby szesnastkowe lub dziesiętne. Aby uniknąć nieporozumień i aby komputer mógł wyraźnie odróżnić jedną liczbę od drugiej, w asemblerze zwyczajowo umieszcza się symbol h lub H po liczbie szesnastkowej ( H to skrót od języka angielskiego. szesnastkowy (szesnastkowy). Dla zwięzłości czasami nazywa się to po prostu Klątwa ) . I nie wpisuj niczego po przecinku. Ponieważ liczby od 0 do 9 w obu systemach mają to samo znaczenie, wówczas liczby zapisane jako 5 i 5h są takie same.

To. Przykład 1 (patrz wyżej) byłby bardziej poprawny, gdyby zapisać w ten sposób: 1 x 16 = 10h; 10 godz. x 16 = 100 godz.; 100 godz. x 16 = 1000 godz. Lub tak: 1h x 10h = 10h; 10h x 10h = 100h; 100h x 10h = 1000h.

W kolejnych wydaniach przyjrzymy się, dlaczego system szesnastkowy jest potrzebny. Na razie dla naszego przykładowego programu, który zostanie omówiony poniżej, musimy wiedzieć o istnieniu liczb szesnastkowych.

Podsumujmy więc. Szesnastkowy system liczbowy składa się z 10 cyfr (od 0 do 9) i 6 liter alfabetu łacińskiego (A, B, C, D, E, F). Jeśli dodamy zero po prawej stronie dowolnej liczby w systemie szesnastkowym, to liczba ta wzrośnie o16 raz. Zrozumienie tego tematu jest bardzo ważne, ponieważ będziemy go stale używać podczas pisania programów.

Teraz trochę o tym, jak będę budować przykłady w Asemblerze. Prezentowanie ich w formacie HTML nie jest do końca wygodne, więc najpierw będzie sam kod programu z ponumerowanymi liniami, a zaraz po nim będą wyjaśnienia i notatki.

Tak:

linie Kod programu
(1) ach, 9

Wyjaśnienia:

W linii (1) robimy to, a w linii (15) robimy tamto.

Ogromna prośba: NIE kopiuj programów ze strony do schowka, a następnie wklejaj je do Notatnika (lub gdziekolwiek indziej)! Wpisz je ponownie ręcznie w edytorze tekstu. Jeżeli posiadasz drukarkę to wybierz program, wydrukuj wybrany fragment, a następnie przenieś go z papieru do edytora. Wszystkie przykłady należy wpisać samodzielnie! Przyspieszy to zapamiętywanie operatorów.

I dalej. W asemblerze nie ma różnicy pomiędzy małymi i WIELKIMI literami. Zapisy formularza:

Asembler postrzega je w ten sam sposób. Można oczywiście zmusić asembler do rozróżniania małych i WIELKICH liter, ale na razie tego nie zrobimy. Aby program był bardziej czytelny, operatory najlepiej wpisywać małymi literami, a nazwy podprogramów i etykiet dużymi literami. Ale to zależy dla kogo będzie wygodnie.

Przejdźmy więc do naszego pierwszego programu:

(1) Segment CSEG

(2)org 100h

(4) Rozpocznij:

(6) ruch ah,9

(7) mov dx, przesunięcie Wiadomość

(8) w godz. 21.00

(10) w godz. 20:00

(11)

(12) Wiadomość db „Witaj, świecie!$”

(13) CSEG dobiega końca

(14) koniec początek

Aby wyjaśnić wszystkie operatory w tym przykładzie, będziemy potrzebować kilku wydań. Dlatego na tym etapie po prostu pominiemy opis niektórych poleceń. Po prostu załóżmy, że tak właśnie powinno być. Przyjrzymy się tym operatorom szczegółowo w najbliższej przyszłości. Zatem linie o numerach (1), (2) i (13) po prostu ignorujesz.

Linie (3), (5), (9) i (11) pozostają puste. Odbywa się to dla przejrzystości. Asembler po prostu je pominie.

Przejdźmy teraz do rozważenia pozostałych operatorów. Kod programu zaczyna się od linii (4). Jest to znak, który informuje asembler o początku kodu. Linia (14) zawiera koniec operatorów Begin ( Zacznij od angielskiego Początek; koniec koniec). To koniec programu. Ogólnie rzecz biorąc, zamiast słowa Zaczynać można było zastosować coś innego. Na przykład, Początek:. W takim przypadku musielibyśmy zakończyć program Koniec Początek (14).

Linie (6) (8) wyświetlają komunikat Witaj, świecie!. Tutaj będziemy musieli pokrótce porozmawiać o rejestrach procesorów (szerzej przyjrzymy się temu tematowi w następnym numerze).

Rejestr procesora to specjalnie przydzielona pamięć do przechowywania liczby.

Na przykład:

Jeśli chcemy dodać dwie liczby, to w matematyce zapisujemy to w ten sposób:

A, B i C są to swego rodzaju rejestry (jeśli mówimy o komputerze), w których można przechowywać pewne dane. A=5 można odczytać jako: Przypisz A liczbę 5 .

Aby przypisać wartość do rejestru, w Asemblerze znajduje się operator mov (z angielskiego move loading). Wiersz (6) należy czytać następująco: Wczytanie do rejestru A.H.numer 9 (innymi słowy przypisujemy A.H.numer 9). Poniżej przyjrzymy się, dlaczego jest to konieczne.

W linii (7) ładujemy do rejestru DX adres komunikatu wyjściowego (w tym przykładzie będzie to ciągWitaj, świecie!$).

Przerwania zostaną szczegółowo omówione w kolejnych wydaniach. Tutaj powiem kilka słów.

Przerywać MS-DOS jest to rodzaj podprogramu (część MS-DOS), który znajduje się na stałe w pamięci i można go wywołać w dowolnym momencie z dowolnego programu.

Rozważmy powyższe na przykładzie (Notatki drobnym drukiem):

Program do dodawania dwóch liczb

Strona głównaProgramy

A=5 Do zmiennej A wpisujemy wartość 5

B=8 do zmiennej B wartość 8

Dodawanie podprogramów wywołania

teraz C równa się 13

A=10 to samo, tylko inne liczby

B=25

Dodawanie podprogramów wywołania

teraz C jest równe 35

Koniec programu

Dodanie podprogramu

C=A+B

Powrót z podprogramu wracamy na miejsce, z którego dzwoniliśmy

KoniecPodprogramu

W tym przykładzie dwukrotnie wywołaliśmy podprogram Dodatek, który dodał dwie liczby przekazane mu w zmiennych A i B . Wynik umieszczany jest w zmiennej C. Po wywołaniu podprogramu komputer zapamiętuje, skąd został wywołany, a następnie po zakończeniu działania podprogramu wraca do miejsca, z którego został wywołany. To. Podprogramy można wywoływać nieograniczoną liczbę razy z dowolnego miejsca.

Wykonując linię (8) programu w asemblerze, wywołujemy podprogram (w tym przypadku nazywany przerwaniem), który wyświetla linię na ekranie. W tym celu faktycznie umieszczamy w rejestrach niezbędne wartości. Całą niezbędną pracę (wypisanie linii, przesunięcie kursora) przejmuje podprogram. Linię tę można odczytać w następujący sposób: wywołaj dwudzieste pierwsze przerwanie ( int z angielskiego przerywać przerywać). Należy pamiętać, że po cyfrze 21 znajduje się litera H . To, jak już wiemy, jest liczbą szesnastkową (33 w systemie dziesiętnym). Oczywiście nic nie stoi na przeszkodzie, abyśmy wymienili żyłkę od 21:00 do 33. Program będzie działał poprawnie. Powszechną praktyką w Asemblerze jest podawanie numeru przerwania w postaci szesnastkowej.

W linii (10) jak można się domyślić wywołujemy przerwanie 20 H . Aby wywołać to przerwanie, nie trzeba podawać żadnych wartości w rejestrach. Wykonuje tylko jedno zadanie: wyjście z programu (wyjście do DOS-u). W wyniku przerwania 20h program powróci do miejsca, z którego został uruchomiony (załadowany, wywołany). Na przykład w Norton Commander lub Nawigator DOS.

Linia (12) zawiera komunikat, który ma zostać wysłany. Pierwsze słowo ( wiadomość wiadomość) tytuł wiadomości. Może to być wszystko (np. bałagan lub sznurek itp.). O Zwróć uwagę na linię (7), w której ładujemy do rejestru DX nasz adres wiadomości.

Możemy stworzyć kolejną linię, którą będziemy wywoływać Bałagan2. Następnie zaczynając od linii (9) wstaw następujące polecenia:

(10) mov dx, przesunięcie Mess2

(13) Wiadomość db „Witaj, świecie!$”

(14) Mess2 db „To JA! $”

i ponownie zmontuj nasz program. Mam nadzieję, że domyślacie się, co się stanie

Zwróć uwagę na ostatni znak w wierszu Wiadomość i bałagan2 - $. Wskazuje koniec linii. Jeśli to usuniemy, to 21 H przerwanie będzie kontynuowane, dopóki nie napotka znaku gdzieś w pamięci $. Na ekranie zobaczymyśmieci .

Jeśli posiadasz debugger, możesz zobaczyć jak będzie działał nasz program.

Celem tego problemu nie było zrozumienie szczegółowo z każdym operatorem. To niemożliwe, ponieważ nie masz jeszcze wystarczającej wiedzy. Wierzę, że po 3-4 wydaniach zrozumiecie zasadę i strukturę programu Assembly. Być może język Zgromadzenia wydawał ci się niezwykle skomplikowany, ale uwierz mi, tak jest na pierwszy rzut oka.

Notacja szesnastkowa („Hex”)- wygodny sposób reprezentowania wartości binarnych. Tak jak system dziesiętny ma podstawę 10, a system binarny ma podstawę 2, tak szesnastkowy system liczbowy ma podstawę szesnaście.

Podstawowy system liczbowy 16 wykorzystuje cyfry od 0 do 9 i litery od A do F. Rysunek pokazuje równoważne wartości dziesiętne, binarne i szesnastkowe dla liczb binarnych od 0000 do 1111. Łatwiej jest nam wyrazić wartość jako jeden cyfrę szesnastkową niż cztery bity

Zrozumienie bajtów

Biorąc pod uwagę, że 8 bitów (bajtów) to standardowe grupowanie binarne, liczby binarne od 00000000 do 11111111 można przedstawić w notacji szesnastkowej jako liczby od 00 do FF. Zera wiodące są zawsze wyświetlane w celu uzupełnienia 8-bitowej reprezentacji. Na przykład wartość binarna 0000 1010 w formacie szesnastkowym będzie wynosić 0A.

Reprezentacja wartości szesnastkowych

Proszę zanotować: Ważne jest, aby odróżnić wartości szesnastkowe od wartości dziesiętnych dla znaków od 0 do 9, jak pokazano na rysunku.

Wartości szesnastkowe są zwykle reprezentowane w tekście przez wartość poprzedzoną przez 0x (np. 0x73) lub przy użyciu indeksu dolnego wynoszącego 16. Rzadziej może po nich następować litera H, np. 73H. Ponieważ jednak tekst indeksu dolnego nie jest rozpoznawany w wierszu poleceń ani w środowiskach programistycznych, w technicznej reprezentacji liczb szesnastkowych są one poprzedzone „0x” (zero X). Dlatego powyższe przykłady będą pokazane odpowiednio jako 0x0A i 0x73.

Do reprezentowania adresów MAC sieci Ethernet i adresów IP w wersji 6 używana jest notacja szesnastkowa.

Konwersje szesnastkowe

Konwersja liczb pomiędzy wartościami dziesiętnymi i szesnastkowymi jest prosta, ale szybkie dzielenie lub mnożenie przez 16 nie zawsze jest wygodne. Jeśli takie konwersje są konieczne, zwykle łatwiej jest przekonwertować wartość dziesiętną lub szesnastkową na binarną, a następnie przekonwertować wartość binarną na dziesiętną lub szesnastkową, w zależności od tego, co chcesz uzyskać.

Dzięki praktyce możliwe jest rozpoznanie binarnych wzorów bitowych odpowiadających wartościom dziesiętnym i szesnastkowym. Rysunek pokazuje te wzorce dla niektórych wartości 8-bitowych.