Cum se configurează smartphone-uri și PC-uri. Portal informativ

Sistemul numeric hexazecimal. Sistem de numere binar octal hexazecimal

Pentru a scrie programe în asamblator, trebuie să înțelegeți sistemul numeric hexazecimal. Nu este nimic complicat în ea. Folosim sistemul zecimal în viața noastră. Sunt sigur că o știți cu toții, așa că voi încerca să explic sistemul hexazecimal desenând o analogie cu zecimalul.

Deci, în sistemul zecimal, dacă adăugăm zero la dreapta oricărui număr, atunci acest număr va crește de 10 ori. De exemplu: 1 x 10 = 10; 10 x 10 = 100; 100 x 10 = 1000 etc. În acest sistem, folosim numere de la 0 la 9, adică zece cifre diferite (de fapt, de aceea se numește zecimală).

În sistemul hexazecimal, folosim, respectiv, șaisprezece „cifre”. Am scris în mod special cuvântul „numere” între ghilimele, pentru că folosește mai mult decât numere. Și cum e cu adevărat? Vă explic: de la 0 la 9 numărăm la fel ca în zecimală, dar atunci va fi așa: A, B, C, D, E, F. Numărul F, oricât de greu ar fi număr, va fi egal cu 15 în sistemul zecimal (vezi Tabelul 1).

Numar decimal

Număr hexazecimal

Tabelul 1. Sisteme zecimale și hexazecimale.

Astfel, dacă adăugăm zero la dreapta oricărui număr din sistemul hexazecimal, atunci acest număr va crește în16 o singura data.

Exemplul 1: 1 x 16 = 10; 10 x 16 = 100; 100 x 16 = 1000 etc.

Ați reușit să distingeți hexazecimalul de zecimal în Exemplul 1? Și din acest rând: 10, 12, 45, 64, 12, 8, 19? Poate fi fie hexazecimal, fie zecimal. Pentru a evita confuzia, iar computerul ar putea distinge fără ambiguitate un număr de altul, se obișnuiește în Assembler să pună caracterul h sau H după numărul hexazecimal ( H este prescurtarea pentru engleză. hexazecimal (hexazecimal). Pe scurt, uneori este numit simplu hex ) . Și după zecimală, nu pune nimic. pentru că numerele de la 0 la 9 în ambele sisteme au aceeași semnificație, atunci numerele scrise ca 5 și 5h sunt aceleași.

Acea. Exemplul 1 (vezi mai sus) ar fi mai corect să scriem după cum urmează: 1 x 16 = 10h; 10h x 16 = 100h; 100h x 16 = 1000h. Sau cam așa: 1h x 10h = 10h; 10h x 10h = 100h; 100h x 10h = 1000h.

De ce este necesar sistemul hexazecimal, vom lua în considerare în numerele ulterioare. Pentru moment, pentru programul nostru exemplu, care va fi discutat mai jos, trebuie să știm despre existența numerelor hexazecimale.

Deci, să rezumam. Sistemul numeric hexazecimal este format din 10 cifre (de la 0 la 9) și 6 litere ale alfabetului latin (A, B, C, D, E, F). Dacă adăugăm zero la dreapta oricărui număr din sistemul hexazecimal, atunci acest număr va crește cu16 o singura data. Este foarte important să înțelegeți acest subiect., deoarece îl vom folosi constant când scriem programe.

Acum, puțin despre cum voi construi exemple în assembler. Nu este foarte convenabil să le prezinți în format HTML, așa că mai întâi va fi codul programului în sine cu linii numerotate, iar imediat după el vor fi explicații și note.

Mai mult sau mai puțin așa:

linii Cod program
(1) muta ah,9

Explicatii:

În rândul (1) facem ceva, iar în rândul (15) facem ceva.

Cerere uriașă: NU copiați programe din pagină în clipboard și apoi lipiți-le în Notepad (sau oriunde altundeva)! Introduceți-le manual într-un editor de text. Dacă există o imprimantă, selectați programul, imprimați fragmentul selectat și apoi transferați-l în editor de pe hârtie. Toate exemplele trebuie scrise singur! Acest lucru va grăbi memorarea operatorilor.

Și mai departe. Literele mici și majuscule nu se disting în Assembler. Intrări precum:

Asamblatorul este perceput în mod egal. Puteți, desigur, să forțați asamblatorul să facă distincția între caracterele minuscule și MAIUSCULE, dar nu vom face acest lucru deocamdată. Pentru lizibilitatea programului, cel mai bine este să tastați instrucțiunile cu litere mici și să începeți numele subprogramelor și etichetele cu majuscule. Dar așa va fi convenabil pentru cineva.

Deci, să trecem la primul nostru program:

(1) Segment CSEG

(2) org 100h

(4) Începe:

(6) mov ah,9

(7) mov dx,offset Mesaj

(8) int 21h

(10) int 20h

(11)

(12) Mesaj db „Bună, lume!$”

(13) CSEG se încheie

(14) sfârşitul Începe

Pentru a explica toți operatorii acestui exemplu, vom avea nevoie de mai multe episoade. Prin urmare, vom omite pur și simplu descrierea unor comenzi în această etapă. Gândește-te doar că așa ar trebui să fie. În viitorul foarte apropiat vom lua în considerare acești operatori în detaliu. Deci, liniile cu numerele (1), (2) și (13) pur și simplu le ignorați.

Rândurile (3), (5), (9) și (11) sunt lăsate necompletate. Acest lucru se face pentru claritate. Asamblatorul le va omite pur și simplu.

Acum să trecem la restul operatorilor. Din rândul (4) începe codul programului. Aceasta este o etichetă care îi spune asamblatorului să pornească codul. Linia (14) conține instrucțiunile end Begin (Începe engleza Start; Sfârşit sfarsit). Acesta este sfârșitul programului. În general, în loc de cuvântÎNCEPE ar fi putut fi folosit altceva. De exemplu, Start:. În acest caz, ar trebui să finalizam programul Sfârșit Start (14).

Rândurile (6) (8) afișează mesajul Salut, lume!. Aici trebuie să vorbim pe scurt despre registrele procesoarelor (vom analiza acest subiect mai detaliat în numărul următor).

Un registru de procesor este o memorie dedicată pentru stocarea unui număr.

De exemplu:

Dacă vrem să adunăm două numere, atunci în matematică scriem astfel:

A, B și C sunt un fel de registre (dacă vorbim despre un computer) în care pot fi stocate unele date. A=5 poate fi citit ca: Atribuiți lui A numărul 5 .

Pentru a atribui o valoare unui registru, există un operator mov în Assembler (din engleză move load). Rândul (6) ar trebui citit astfel: Încărcarea în registru AHnumărul 9 (cu alte cuvinte, atribuim AHnumărul 9). Mai jos vom analiza de ce este necesar acest lucru.

În rândul (7) încărcăm în registru DX adresa mesajului care urmează să fie scos (în acest exemplu va fi șirulBună, lume!$).

Întreruperile vor fi acoperite în detaliu în versiunile viitoare. Aici voi spune câteva cuvinte.

Întrerupe MS-DOS este un fel de subrutină (parte a MS DOS), care se află permanent în memorie și poate fi apelat oricând din orice program.

Luați în considerare cele de mai sus cu un exemplu (evidențiați notele cu litere mici):

Program pentru adăugarea a două numere

AcasăPrograme

A=5 în variabila A introducem valoarea 5

B=8 la variabila B valoarea 8

Adăugarea apelurilor subrutine

acum C este 13

A=10 la fel, doar numere diferite

B=25

Adăugarea apelurilor subrutine

acum C este 35

Sfârșitul programului

Adăugarea subrutinei

C=A+B

ReturnFrom Subroutine ne întoarcem la locul din care am sunat

Sfârșitul subrutinei

În acest exemplu, am numit subrutina de două ori Plus, care a adăugat două numere transmise în variabile A și B . Rezultatul este plasat în variabila C. Când este apelată o subrutină, computerul își amintește de unde a fost sunat și apoi, când subprogramul s-a terminat, computerul revine la locul de unde a fost apelat. Acea. Puteți apela subrutine de un număr nedefinit de ori de oriunde.

Când executăm linia (8) a unui program de asamblare, numim o subrutină (în acest caz numită întrerupere) care imprimă linia pe ecran. Pentru a face acest lucru, punem, de fapt, valorile necesare în registre. Toate lucrările necesare (ieșire de linie, mișcare a cursorului) sunt efectuate de subrutină. Această linie poate fi citită astfel: numim cea de-a douăzeci și unu de întreruperi ( int din engleză. întrerupe întrerupe). Vă rugăm să rețineți că după numărul 21 există o literă h . Acesta, după cum știm deja, este un număr hexazecimal (33 în zecimală). Desigur, nimic nu ne împiedică să înlocuim linia int 21h la int 33. Programul va funcționa corect. Doar că în Assembler se obișnuiește să se indice numărul de întreruperi în hexazecimal.

La rândul (10), ați ghicit, apelăm întreruperea 20 h . Pentru a apela această întrerupere, nu trebuie să specificați nicio valoare în registre. Îndeplinește o singură sarcină: ieșirea din program (ieșirea în DOS). Ca urmare a întreruperii 20h, programul va reveni la locul unde a fost lansat (încărcat, apelat). De exemplu, în Norton Commander sau DOS Navigator.

Linia (12) conține mesajul care urmează să fie scos. Primul cuvânt ( mesaj mesaj) numele mesajului. Poate fi orice (de exemplu, mizerie sau sfoară etc.). O atenție la rândul (7), în care încărcăm în registru DX adresa noastră de mesaj.

Putem crea o altă linie, pe care o vom numi mizerie 2. Apoi, pornind de la linia (9), introduceți următoarele comenzi:

(10) mov dx, offset Mess2

(13) Mesaj db „Bună, lume!$”

(14) Mess2 db „Sunt eu! $”

și asamblați din nou programul nostru. Sper că ghiciți ce se va întâmpla

Acordați atenție ultimului caracter din rânduri Mesaj și Mess2 - $. Indică sfârșitul liniei. Dacă îl eliminăm, atunci 21 h întreruperea va continua să iasă până când un personaj este întâlnit undeva în memorie $. Pe ecran vom vedea Gunoi .

Dacă aveți un depanator, puteți vedea cum va funcționa programul nostru.

Scopul acestei probleme a fost să nu înțeleagă în detaliu cu fiecare operator. Acest lucru este imposibil, pentru că încă nu ai suficiente cunoștințe. Cred că după 3-4 lansări veți înțelege principiul și structura programului în Assembler. Poate ați crezut că limbajul de asamblare este extrem de complicat, dar credeți-mă, dintr-o privire.

Notație hexazecimală („Hex”) este o modalitate convenabilă de a reprezenta valori binare. Așa cum zecimalul are baza zece și binarul are baza doi, hexazecimalul are baza șaisprezece.

Sistemul numeric în baza 16 folosește numerele de la 0 la 9 și literele de la A la F. Figura arată valorile zecimale, binare și hexazecimale echivalente pentru numerele binare de la 0000 la 1111. Este mai ușor pentru noi să exprimăm o valoare ca o singură cifră hexazecimală decât patru biți.

Înțelegerea octeților

Având în vedere că 8 biți (octeți) este o grupare binară standard, numerele binare de la 00000000 la 11111111 pot fi reprezentate în notație hexazecimală ca numere de la 00 la FF. Zerourile inițiale sunt întotdeauna afișate pentru a finaliza reprezentarea pe 8 biți. De exemplu, valoarea binară 0000 1010 ar fi 0A în hexazecimal.

Reprezentarea valorilor hexazecimale

Notă: Este important să distingem valorile hexazecimale de valorile zecimale pentru caracterele de la 0 la 9, așa cum se arată în figură.

Valorile hexazecimale sunt de obicei reprezentate în text de o valoare precedată de 0x (de exemplu, 0x73) sau de un indice 16. Mai rar, ele pot fi urmate de litera H, cum ar fi 73H. Cu toate acestea, deoarece textul indicelui nu este recunoscut pe linia de comandă sau în mediile de programare, numerele hexazecimale sunt precedate din punct de vedere tehnic de „0x” (zero X). Prin urmare, exemplele de mai sus ar fi afișate ca 0x0A și, respectiv, 0x73.

Notația hexazecimală este folosită pentru a reprezenta adresele MAC Ethernet și adresele IP din versiunea 6.

Conversii hexazecimale

Conversiile numerelor între valori zecimale și hexazecimale sunt ușoare, dar o împărțire sau înmulțire rapidă cu 16 nu este întotdeauna convenabilă. Dacă sunt necesare astfel de conversii, este de obicei mai ușor să convertiți valoarea zecimală sau hexazecimală în binar și apoi să convertiți valoarea binară în zecimală sau hexazecimală, oricare doriți să obțineți.

Cu practică, este posibil să recunoașteți modele de biți binari care corespund valorilor zecimale și hexazecimale. Figura prezintă aceste modele pentru unele valori de 8 biți.

Pentru a reprezenta numere într-un microprocesor, sistem binar.
În acest caz, orice semnal digital poate avea două stări stabile: „nivel înalt” și „nivel scăzut”. În sistemul binar, pentru imaginea oricărui număr se folosesc două cifre, respectiv: 0 și 1. Număr arbitrar x=a n a n-1 ..a 1 a 0 ,a -1 a -2 …a -m scris cu notație binară ca

x = a n 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

Unde un i— cifre binare (0 sau 1).

Sistem de numere octale

În sistemul de numere octale, cifrele de bază sunt numerele de la 0 la 7. Cele 8 unități ale bitului cel mai puțin semnificativ sunt combinate în unitatea cea mai semnificativă.

Sistemul numeric hexazecimal

În sistemul numeric hexazecimal, cifrele de bază sunt numerele de la 0 la 15 inclusiv. Pentru a desemna cifrele de bază mai mari decât 9 cu un singur caracter, în plus față de cifrele arabe 0 ... 9, literele alfabetului latin sunt folosite în sistemul numeric hexazecimal:

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

De exemplu, numărul 175 10 în hexazecimal va fi scris ca AF 16 . Într-adevăr,

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

Tabelul conține numere de la 0 la 16 în sisteme de numere zecimal, binar, octal și hexazecimal.

Zecimal Binar octal hexazecimal
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

Conversii binar-octal și binar-hexazecimal

Sistemul de numere binare este convenabil pentru efectuarea de operații aritmetice de către hardware-ul microprocesorului, dar incomod pentru percepția umană, deoarece necesită un număr mare de cifre. Prin urmare, în tehnologia computerelor, pe lângă sistemul de numere binar, sistemele de numere octale și hexazecimale sunt utilizate pe scară largă pentru o reprezentare mai compactă a numerelor.

Trei biți ai sistemului de numere octale implementează toate combinațiile posibile de cifre octale în sistemul de numere binar: de la 0 (000) la 7 (111). Pentru a converti un număr binar în octal, trebuie să combinați cifrele binare în grupuri de 3 cifre (triade) în două direcții, pornind de la separatorul părților întregi și fracționale. Dacă este necesar, zerouri nesemnificative trebuie adăugate la stânga numărului inițial. Dacă numărul conține o parte fracțională, atunci pot fi adăugate și zerouri nesemnificative în dreapta acestuia până când toate triadele sunt umplute. Apoi fiecare triadă este înlocuită cu o cifră octală.

Exemplu: convertiți numărul 1101110.01 2 în octal.

Combinăm cifre binare în triade de la dreapta la stânga. Primim

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

Pentru a converti un număr din sistemul octal în binar, trebuie să scrieți fiecare cifră octală în codul său binar:

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

Patru biți ai sistemului de numere hexazecimale implementează toate combinațiile posibile de cifre hexazecimale în sistemul de numere binar: de la 0 (0000) la F(1111). Pentru a converti un număr binar în hexazecimal, trebuie să combinați cifrele binare în grupuri de 4 cifre (tetrade) în două direcții, pornind de la separatorul părților întregi și fracționale. Dacă este necesar, zerouri nesemnificative trebuie adăugate la stânga numărului inițial. Dacă numărul conține o parte fracțională, atunci trebuie adăugate și zerouri nesemnificative în dreapta acestuia până când toate tetradele sunt umplute. Fiecare tetradă este apoi înlocuită cu o cifră hexazecimală.

Exemplu: convertiți numărul 1101110.11 2 în hexazecimal.

Combinăm cifre binare în tetrade de la dreapta la stânga. Primim

0110 1110,1100 2 = 6E,C 16 .

Pentru a converti un număr din hexazecimal în binar, trebuie să scrieți fiecare cifră hexazecimală în codul său binar.

Sistemul de numere hexazecimale are un alfabet format din 16 cifre:

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

La scrierea unui număr în sistem hexazecimal, pentru a scrie numerele care denotă numerele 10, 11, 12. 13, 14. 15 se folosesc, respectiv, literele A, B, C, D, E, F.

Conversia numerelor din hexazecimal în zecimal

Puteți converti orice număr hexazecimal în zecimal folosind formula deja cunoscută

Exemple.

    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 \u003d 2 16 1 + 10 16 0 \u003d 42 10.

Conversia unui număr din sistemul zecimal în hexazecimal se realizează în același mod ca în binar.

Conversia numerelor din hexazecimal în binar și invers

Puteți converti orice număr hexazecimal în binar, după cum urmează. Fiecare cifră hexazecimală a unui număr este scrisă ca un număr binar de patru cifre - tetradă. După aceea, zerourile din stânga pot fi aruncate.

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

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

În schimb, puteți converti orice număr binar în hexazecimal în același mod. Fiecare patru cifre binare, numărând de la dreapta la stânga, este scrisă ca o cifră hexazecimală. Aceste figuri sunt, de asemenea, aranjate de la dreapta la stânga.

Exemple.

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

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

Sistem de numere octale

Sistemul de numere octale are un alfabet format din 8 cifre:

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

Conversia unui număr din zecimal în octal și invers se realizează prin analogie cu conversia în / din binar.

Conversia numerelor din octal în binar și invers

Fiecare cifră a notației octale a unui număr este scrisă ca un număr binar de trei cifre - triadă.

Exemple.

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

1001101 2 = 001 001 101 2 = 115 8 .

Materiale metodice pentru lecția de laborator nr.1

Tema lecției de laborator: Sisteme numerice. Măsurarea informațiilor.

Numar de ore: 2.

Exemple cu soluții

    Traducere dinp -ary sistem la 10-ary. Să presupunem că este necesar să convertiți un număr dintr-un anumit sistem numeric în zecimal. Pentru a face acest lucru, trebuie să-l reprezentăm sub formă

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.

    Convertiți din sistem zecimal înp -IC.

2.1 98 10 → X 2 .

Împărțim numărul la 2. Apoi împărțim câtul incomplet la 2. Continuăm până când câtul incomplet devine mai mic decât 2, adică. egal cu 1.

    98: 2 = 49. Rest - 0 .

    49: 2 = 24. Rest - 1 .

    24: 2 = 12. Rest - 0 .

    12: 2 = 6. Rest - 0 .

    6: 2 = 3. Rest - 0 .

    3: 2 = 1 . restul - 1 .

Deoarece ultimul coeficient incomplet este 1, procesul s-a încheiat. Scriem toate resturile de jos în sus, începând cu ultimul coeficient incomplet și obținem numărul 1100010. Deci 98 10 \u003d 1100010 2.

2.2 2391 10 → X 16 .

Împărțiți numărul la 16. Apoi împărțiți câtul parțial la 16. Continuați până când câtul parțial este mai mic de 16.

    2391: 16 = 149. Rest - 7 .

    149: 16 = 9 . restul - 5 .

Deoarece ultimul coeficient incomplet (9) este mai mic de 16, procesul s-a încheiat. Scriem, pornind de la ultimul coeficient incomplet, toate resturile de jos în sus și obținem numărul 957. Deci 2391 10 \u003d 957 16.

2.3 12165 10 → X 2 .

Dacă traduceți diviziunea într-un sistem binar, obțineți un proces greoi și mulțumit. Puteți mai întâi să convertiți numărul în sistemul octal și apoi să înlocuiți cifrele octale de la dreapta la stânga cu triade.

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

    Determinarea bazei sistemului numericp .

Un băiat a scris despre sine în felul acesta: „Am 24 de degete, câte 5 pe fiecare mână și 12 pe picioare”. Cum poate fi aceasta?

Soluţie. Determinați baza sistemului numeric p. Din moment ce știm că există doar 10 10 degete de la picioare, apoi 12 p =1∙p+2 = 10 10 . De aici obținem ecuația p + 2 = 10  p= 8. Deci băiatul a vrut să spună numere în sistemul octal. Într-adevăr, există 24 8 = 2∙8+4 = 20 10 degete în total și 12 8 = 1∙8+2 = 10 10 pe picioare.

Top articole similare