Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • U kontaktu sa
  • Heksadecimalni sistem brojeva. Binarni oktalni heksadecimalni brojevni sistem

Heksadecimalni sistem brojeva. Binarni oktalni heksadecimalni brojevni sistem

Da biste pisali programe u Assembleru, morate razumjeti heksadecimalni sistem brojeva. Nema tu ništa komplikovano. U svom životu koristimo decimalni sistem. Siguran sam da ga svi znate, pa ću pokušati da objasnim heksadecimalni sistem analogijom sa decimalnim.

Dakle, u decimalnom sistemu, ako dodamo nulu bilo kojem broju na desnoj strani, onda će se ovaj broj povećati 10 puta. Na primjer: 1 x 10 = 10; 10 x 10 = 100; 100 x 10 = 1000, itd. U ovom sistemu koristimo brojeve od 0 do 9, tj. deset različitih cifara (zapravo, zato se i zove decimalni).

U heksadecimalu koristimo šesnaest "cifara" respektivno. Posebno sam napisao riječ "cifre" pod navodnicima, jer koristi više od brojeva. Zaista, kako to? Objašnjavam: brojimo od 0 do 9 na isti način kao u decimali, ali onda će biti ovako: A, B, C, D, E, F. Broj F, koliko god težak bio count, biće jednako 15 u decimalnom sistemu (vidi tabelu 1).

Decimala

Heksadecimalni broj

Tabela 1. Decimalni i heksadecimalni sistemi.

Dakle, ako bilo kojem broju u heksadecimalnom sistemu dodamo nulu desno, onda će se ovaj broj povećati za16 jednom.

Primjer 1: 1 x 16 = 10; 10 x 16 = 100; 100 x 16 = 1000, itd.

Jeste li mogli razlikovati heksadecimalne i decimalne brojeve u primjeru 1? A iz ovog reda: 10, 12, 45, 64, 12, 8, 19? Može biti heksadecimalni ili decimalni. Kako bi se izbjegla zabuna, a kompjuter bi mogao jedinstveno razlikovati neke brojeve od drugih, uobičajeno je u Assembleru staviti znak h ili H iza heksadecimalnog broja ( H je skraćenica za engleski. heksadecimalni (heksadecimalno). Zbog sažetosti, ponekad se naziva jednostavno Hex ) . I nakon decimalnog mjesta ne stavljajte ništa. Jer brojevi od 0 do 9 u oba sistema imaju isto značenje, tada su brojevi zapisani kao 5 i 5h isti.

To. Primjer 1 (vidi gore) bilo bi ispravnije napisati na sljedeći način: 1 x 16 = 10h; 10h x 16 = 100h; 100h x 16 = 1000h. Ili ovako: 1h x 10h = 10h; 10h x 10h = 100h; 100h x 10h = 1000h.

Čemu služi heksadecimalni sistem će se raspravljati u budućim izdanjima. U ovom trenutku, za naš primjer programa, o kojem će biti riječi u nastavku, moramo znati o postojanju heksadecimalnih brojeva.

Pa hajde da sumiramo. Heksadecimalni brojevni sistem se sastoji od 10 cifara (od 0 do 9) i 6 slova latiničnog alfabeta (A, B, C, D, E, F). Ako dodamo nulu bilo kojem broju u heksadecimalnom sistemu na desnoj strani, onda će se ovaj broj povećati za16 jednom. Veoma je važno razumjeti ovu temu., budući da ćemo ga koristiti cijelo vrijeme prilikom pisanja programa.

Sada malo o tome kako ću graditi primjere u Assembleru. Nije baš zgodno donositi ih u HTML-formatu, pa će prvo biti sam programski kod sa numerisanim redovima, a odmah nakon njega objašnjenja i napomene.

Kao to:

žice Programski kod
(1) mov ah, 9

Objašnjenja:

U redu (1) radimo ovo, au redu (15) radimo ovo.

Ogroman zahtjev: NEMOJTE kopirati programe sa stranice u međuspremnik, a zatim ih zalijepiti u Notepad (ili bilo gdje drugdje)! Ponovo ih otkucajte rukom u uređivaču teksta. Ako imate štampač, izaberite program, odštampajte izbor, a zatim ga sa papira prenesite u editor. Sve primjere morate sami upisati! Ovo će ubrzati pamćenje operatora.

I dalje. Mala i VELIKA slova se ne razlikuju u Assembleru. Evidencija obrasca:

Asembler ih percipira na isti način. Možete, naravno, natjerati asemblera da pravi razliku između malih i VELIKIH znakova, ali to za sada nećemo raditi. Za bolju čitljivost programa, najbolje je naredbe kucati malim slovima, a imena potprograma i oznaka započeti velikim slovima. Ali ovako će svakom biti udobno.

Dakle, idemo na naš prvi program:

(1) CSEG segment

(2) org 100h

(4) Početak:

(6) mov ah, 9

(7) mov dx, offset poruka

(8) int 21h

(10) u 20h

(11)

(12) Poruka db "Zdravo, svijete! $"

(13) CSEG se završava

(14) kraj Početak

Trebamo više izdanja da objasnimo sve operatore u ovom primjeru. Stoga ćemo jednostavno izostaviti opis nekih naredbi u ovoj fazi. Samo uzmite u obzir da bi tako trebalo biti. U bliskoj budućnosti ćemo detaljno razmotriti ove operatere. Dakle, jednostavno ignorišete linije sa brojevima (1), (2) i (13).

Redovi (3), (5), (9) i (11) ostaju prazni. Ovo je urađeno radi jasnoće. Asembler će ih jednostavno izostaviti.

Sada pređimo na razmatranje ostalih operatera. Linija (4) pokreće programski kod. Ovo je oznaka koja asemblera upućuje na početak koda. Red (14) sadrži kraj Početak ( Početak eng. Start; kraj kraj). Ovo je kraj programa. Općenito, umjesto riječi Počni mogao koristiti nešto drugo. Na primjer, Početak :. U ovom slučaju, morali bismo završiti program. Kraj Početak (14).

Linije (6) (8) prikazuju poruku Zdravo, svijete!. Ovdje ćemo morati ukratko govoriti o registrima procesora (detaljnije ćemo pogledati ovu temu u sljedećem izdanju).

Registar procesora je posebno određena memorija za pohranjivanje broja.

Na primjer:

Ako želimo da saberemo dva broja, onda u matematici pišemo ovako:

A, B i C to su neka vrsta registara (ako govorimo o kompjuteru) u koje se mogu pohraniti neki podaci. A = 5 može se čitati kao: Dajte A broj 5 .

Da biste dodijelili vrijednost registru, postoji operator mov u Assembleru (od engleskog move to load). Red (6) treba da se čita ovako: Učitaj u registar AHbroj 9 (drugim riječima, dodjeljujemo AHbroj 9). U nastavku ćemo razmotriti zašto je to potrebno.

U redu (7) učitavamo u registar DX adresa poruke za prikaz (u ovom primjeru, to će biti linijaZdravo, svijete! $).

O prekidima će se detaljno raspravljati u narednim izdanjima. Evo reći ću nekoliko riječi.

Prekini MS-DOS to je vrsta potprograma (dio MS-DOS), koji je trajno u memoriji i može se pozvati u bilo kojem trenutku iz bilo kojeg programa.

Razmotrite gore navedeno koristeći primjer (odaberite bilješke malim slovima):

Program za sabiranje dva broja

StartPrograms

A = 5 u varijablu A unosimo vrijednost 5

B = 8 na vrijednost varijable B 8

CallRoutines Addition

sada je C 13

A = 10 isti, samo različiti brojevi

B = 25

CallRoutines Addition

sada C ima 35

Kraj programa

Subrutine Addition

C = A + B

ReturnFromRoutines vraćamo se na mjesto odakle su zvali

EndRoutines

U ovom primjeru smo dva puta pozvali potprogram Dodatak, koji je dodao dva broja koja su mu proslijeđena u varijablama A i B ... Rezultat se stavlja u varijablu C. Kada se podprogram pozove, računar pamti odakle je pozvan, a onda kada potprogram završi sa radom, računar se vraća na mesto odakle je pozvan. To. potprogrami se mogu pozivati ​​neograničeno s bilo kojeg mjesta.

Kada izvršimo liniju (8) asemblerskog programa, pozivamo potprogram (u ovom slučaju koji se zove prekid) koji ispisuje string na ekran. Za to smo, zapravo, stavili potrebne vrijednosti u registre. Sav potreban rad (izlaz linije, kretanje kursora) preuzima potprogram. Ovaj red se može čitati ovako: nazivamo dvadeset prvi prekid ( int sa engleskog. prekinuti prekid). Imajte na umu da iza broja 21 stoji slovo h ... Ovo je, kao što već znamo, heksadecimalni broj (33 u decimali). Naravno, ništa nas ne sprječava da zamijenimo liniju int 21h do int 33. Program će raditi ispravno. Samo što je u Assembleru uobičajeno da se broj prekida označava u heksadecimalnom sistemu.

U redu (10), pogađate, zovemo prekid 20 h ... Da biste pozvali ovaj prekid, ne morate specificirati nikakve vrijednosti u registrima. Radi samo jednu stvar: izlazi iz programa (izlaz u DOS). Kao rezultat izvršavanja prekida 20h, program će se vratiti na mjesto odakle je pokrenut (učitan, pozvan). Na primjer, u Norton Commander ili DOS Navigator.

Red (12) sadrži poruku za prikaz. Prva riječ ( poruka poruka) naziv poruke. To može biti bilo šta (npr. nered ili niz, itd.). O Obratite pažnju na red (7), u koji učitavamo u registar DX adresu naše poruke.

Možemo kreirati drugu liniju, koju ćemo nazvati Nered2. Zatim, počevši od reda (9), umetnite sljedeće naredbe:

(10) mov dx, ofset Mess2

(13) Poruka db "Zdravo, svijete! $"

(14) Mess2 db "To sam ja! $"

i ponovo sastavite naš program. Nadam se da ste pogodili šta će se dogoditi

Obratite pažnju na poslednji znak u redovima Poruka i Mess2 - $. Pokazuje na kraj linije. Ako ga uklonimo, onda 21 h prekid će nastaviti da izlazi sve dok ne naiđe na znak negdje u memoriji $. Na ekranu ćemo vidjeti smeće .

Ako imate debugger, možete vidjeti kako će naš program raditi.

Svrha ovog izdanja nije bila razumijevanje detaljno sa svakim operaterom... Ovo je nemoguće, jer još uvek nemate dovoljno znanja. Vjerujem da ćete nakon 3-4 izdanja razumjeti princip i strukturu asemblerskog programa. Možda vam je asemblerski jezik bio izuzetno težak, ali vjerujte mi, na prvi pogled.

Heksadecimalni zapis ("Hex") je zgodan način za predstavljanje binarnih vrijednosti. Baš kao što je decimalna baza deset, a binarna osnova dva, heksadecimalna je baza šesnaest.

Baza 16 koristi brojeve od 0 do 9 i slova od A do F. Slika prikazuje ekvivalentne decimalne, binarne i heksadecimalne vrijednosti za binarne brojeve od 0000 do 1111. Lakše nam je izraziti vrijednost kao jednu heksadecimalnu cifru nego kao četiri bita.

Razumijevanje bajtova

S obzirom da je 8 bitova (bajtova) standardno binarno grupisanje, binarni brojevi od 00000000 do 11111111 mogu biti predstavljeni u heksadecimalnoj notaciji kao brojevi od 00 do FF. Vodeće nule se uvijek prikazuju kako bi se završila 8-bitna reprezentacija. Na primjer, binarna vrijednost 0000 1010 u heksadecima bi bila 0A.

Predstavljanje heksadecimalnih vrijednosti

Bilješka: Važno je razlikovati heksadecimalne i decimalne vrijednosti za znakove od 0 do 9, kao što je prikazano na ilustraciji.

Heksadecimalne vrijednosti su obično predstavljene u tekstu vrijednošću kojoj prethodi 0x (kao što je 0x73), ili indeksom 16. Rjeđe ih može pratiti H, kao što je 73H. Međutim, budući da se subscript tekst ne prepoznaje na komandnoj liniji ili u programskim okruženjima, u tehničkom prikazu heksadecimalnih brojeva, prethodi mu "0x" (nula X). Stoga bi gornji primjeri bili prikazani kao 0x0A i 0x73, respektivno.

Heksadecimalna notacija se koristi za predstavljanje Ethernet MAC adresa i IP Verzija 6 adresa.

Heksadecimalne konverzije

Pretvorbe brojeva između decimalnih i heksadecimalnih vrijednosti su jednostavne, ali brzo dijeljenje ili množenje sa 16 nije uvijek zgodno. Ako su takve konverzije potrebne, obično je lakše pretvoriti decimalnu ili heksadecimalnu vrijednost u binarnu, a zatim pretvoriti binarnu vrijednost u decimalnu ili heksadecimalnu, ovisno o tome što želite dobiti.

S praksom je moguće prepoznati binarne šablone bitova koji odgovaraju decimalnim i heksadecimalnim vrijednostima. Slika prikazuje ove obrasce za neke 8-bitne vrijednosti.

Za predstavljanje brojeva u mikroprocesoru se koristi binarni sistem brojeva.
U ovom slučaju, svaki digitalni signal može imati dva stabilna stanja: "visok nivo" i "nizak nivo". U binarnom sistemu, dva broja se koriste za predstavljanje bilo kojeg broja, redom: 0 i 1. proizvoljan broj x = a n a n-1 ..a 1 a 0, a -1 a -2… a -m biće zapisano u binarnom sistemu kao

x = an 2 n + a n-1 2 n-1 +… + a 1 2 1 + a 0 2 0 + a -1 2 -1 + a -2 2 -2 +… + a -m 2 -m

gdje a i- binarne cifre (0 ili 1).

Oktalni sistem brojeva

U oktalnom sistemu, osnovne cifre su cifre od 0 do 7. 8 najmanje značajnih jedinica se kombinuju u najznačajniju.

Heksadecimalni sistem brojeva

U heksadecimalnom zapisu, osnovne cifre su cifre od 0 do 15, uključujući. Za označavanje osnovnih cifara više od 9 u jednom znaku, pored arapskih brojeva 0 ... 9, u heksadecimalnom brojevnom sistemu koriste se i slova latinske abecede:

10 10 = A 16 12 10 = C 16 14 10 = E 16
11 10 = B 16 13 10 = D 16 15 10 = F 16.

Na primjer, broj 175 10 u heksadecimalnom zapisu bit će zapisan kao AF 16. stvarno,

10 16 1 + 15 16 0 = 160 + 15 = 175

U tabeli su prikazani brojevi od 0 do 16 u decimalnim, binarnim, oktalnim i heksadecimalnim sistemima.

Decimala Binarno Octal Heksadecimalni
0 0 0 0
1 1 1 1
2 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F
16 10000 20 10

Binarne u oktalne i binarne u heksadecimalne konverzije

Binarni brojevni sistem je pogodan za izvođenje aritmetičkih operacija pomoću mikroprocesorskog hardvera, ali je nezgodan za ljudsku percepciju, jer zahtijeva veliki broj bitova. Stoga se u računarskoj tehnici, pored binarnog brojevnog sistema, široko koriste oktalni i heksadecimalni sistemi brojeva za kompaktnije predstavljanje brojeva.

Trobitni oktalni brojevni sistem implementira sve moguće kombinacije oktalnih cifara u binarnom brojevnom sistemu: od 0 (000) do 7 (111). Da biste binarni broj pretvorili u oktalni, trebate kombinirati binarne cifre u grupe od 3 znamenke (trijade) u dva smjera, počevši od decimalnog separatora. Ako je potrebno, dodajte ne-značajne nule lijevo od originalnog broja. Ako broj sadrži razlomak, onda se beznačajne nule mogu dodati i desno od njega dok se ne popune svi trozvuci. Zatim se svaki trozvuk zamjenjuje oktalnom znamenkom.

Primjer: Pretvorite 1101110.01 2 u oktalno.

Kombiniramo binarne znamenke u trozvuke s desna na lijevo. Dobijamo

001 101 110,010 2 = 156,2 8 .

Da konvertujete broj iz oktalnog u binarni, trebate svaku oktalnu cifru napisati u binarnom kodu:

156,2 8 = 001 101 110,010 2 .

Četvorobitni heksadecimalni brojevni sistem implementira sve moguće kombinacije heksadecimalnih cifara u binarnom zapisu: od 0 (0000) do F (1111). Da biste binarni broj pretvorili u heksadecimalni, trebate kombinirati binarne cifre u grupe od 4 znamenke (tetrade) u dva smjera, počevši od decimalnog separatora. Ako je potrebno, dodajte ne-značajne nule lijevo od originalnog broja. Ako broj sadrži razlomak, onda desno od njega morate dodati i beznačajne nule dok se ne popune sve bilježnice. Zatim se svaka bilježnica zamjenjuje heksadecimalnom cifrom.

Primjer: Pretvorite 1101110.11 2 u heksadecimalni zapis.

Kombiniramo binarne brojeve u tetrade s desna na lijevo. Dobijamo

0110 1110.1100 2 = 6E, C 16.

Da biste broj pretvorili iz heksadecimalnog u binarni, trebate svaku heksadecimalnu cifru napisati u binarnom kodu.

Heksadecimalni brojevni sistem ima abecedu od 16 cifara:

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

Kada se piše broj u heksadecimalnom sistemu, slova A, B, C, D, E, F se koriste za pisanje brojeva koji označavaju brojeve 10, 11, 12, 13, 14, 15, respektivno.

Pretvaranje brojeva iz heksadecimalne u decimalni

Možete pretvoriti bilo koji heksadecimalni broj u decimalni pomoću već poznate formule

Primjeri.

    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.

Pretvaranje broja iz decimalnog u heksadecimalni vrši se na isti način kao u binarnom.

Pretvaranje brojeva iz heksadecimalne u binarne i obrnuto

Možete pretvoriti bilo koji heksadecimalni broj u binarni na sljedeći način. Svaka cifra heksadecimalne notacije broja zapisana je u četverocifrenim binarnim brojem - notebook... Nakon toga, nule na lijevoj strani se mogu odbaciti.

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

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

Suprotno tome, možete pretvoriti bilo koji binarni broj u heksadecimalni na isti način. Svaka četiri binarne cifre, računajući s desna na lijevo, zapisane su jednom heksadecimalnom cifrom. Ovi brojevi se također nalaze s desna na lijevo.

Primjeri.

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

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

Oktalni sistem brojeva

Oktalni brojevni sistem ima abecedu koja se sastoji od 8 cifara:

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

Pretvaranje broja iz decimalnog u oktalno i obrnuto vrši se po analogiji sa pretvaranjem u binarni / iz binarnog.

Pretvaranje brojeva iz oktalnog u binarni i obrnuto

Svaka cifra oktalnog prikaza broja zapisana je trocifrenim binarnim brojem - trijada.

Primjeri.

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

1001101 2 = 001 001 101 2 = 115 8 .

Metodički materijali za laboratorijsku nastavu br

Laboratorijska tema: Sistemi brojeva. Informacija o mjerenju.

Broj sati: 2.

Primjeri sa rješenjima

    Prijevod sastr -arnog sistema u 10-arni. Neka je potrebno prevesti broj u određenom brojevnom sistemu u decimalni. Da biste to učinili, trebate ga predstaviti u obrascu

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.

    Prijenos sa 10-arnog sistema nastr -ichny.

2.1 98 10 → X 2.

Podijelite broj sa 2. Zatim podijelite nepotpuni količnik sa 2. Nastavite sve dok nepotpuni količnik ne postane manji od 2, tj. jednako 1.

    98: 2 = 49. Ostatak - 0 .

    49: 2 = 24. Ostatak - 1 .

    24: 2 = 12. Ostatak - 0 .

    12: 2 = 6. Ostatak - 0 .

    6: 2 = 3. Ostatak - 0 .

    3: 2 = 1 ... Ostatak - 1 .

Pošto je posljednji nepotpuni količnik 1, proces je završen. Sve ostatke pišemo odozdo prema gore, počevši od posljednjeg nepotpunog količnika i dobijemo broj 1100010. Dakle 98 10 = 1100010 2.

2.2 2391 10 → X 16.

Podijelite broj sa 16. Zatim podijelite nepotpuni količnik sa 16. Nastavite sve dok nepotpuni količnik ne bude manji od 16.

    2391: 16 = 149. Ostatak je 7 .

    149: 16 = 9 ... Ostatak - 5 .

Pošto je posljednji nepotpuni količnik (9) manji od 16, proces je završen. Zapisujemo, počevši od posljednjeg nepotpunog količnika, sve ostatke odozdo prema gore i dobijemo broj 957. Dakle 2391 10 = 957 16.

2.3 12165 10 → X 2.

Ako se prevede podjelom u binarni sistem, onda ćete dobiti prilično težak proces. Možete prvo pretvoriti broj u oktalni sistem, a zatim zamijeniti oktalne cifre s desna na lijevo trozvucima.

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

    Određivanje baze brojevnog sistemastr .

Jedan dječak je o sebi napisao: “Imam 24 prsta, po 5 na svakoj ruci i 12 na nogama”. Kako ovo može biti?

Rješenje. Potrebno je odrediti bazu brojevnog sistema str... Pošto znamo da ima samo 10 10 prstiju, onda 12 str =1∙str+2 = 10 10. Iz ovoga dobijamo jednačinu str + 2 = 10  str= 8. Dakle, dječak je mislio na brojeve u oktalnom sistemu. Zaista, ima ukupno 24 8 prstiju = 2 ∙ 8 + 4 = 20 10, a na nogama - 12 8 = 1 ∙ 8 + 2 = 10 10.

Top srodni članci