Sistemul numeric Ff 16. Alfabetul hexazecimal

Pentru a scrie programe în Assembly, trebuie să înțelegeți sistemul numeric hexazecimal. Nu este nimic complicat în asta. Folosim sistemul zecimal în viață. Sunt sigur că o știți cu toții, așa că voi încerca să explic sistemul hexazecimal folosind o analogie cu sistemul zecimal.

Deci, în sistemul zecimal, dacă adăugăm un zero la orice număr din dreapta, 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 numere diferite (de fapt, de aceea se numește zecimal).

În sistemul hexazecimal, folosim șaisprezece „cifre”. Am scris în mod special cuvântul „cifre” între ghilimele, pentru că... Nu folosește doar numere. Și într-adevăr, cum poate fi asta? Să 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 nu este dificil 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 un zero la dreapta oricărui număr din sistemul hexazecimal, atunci acest număr va crește cu16 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 numerele hexazecimale de numerele zecimale din Exemplul 1? Și din această serie: 10, 12, 45, 64, 12, 8, 19? Acestea pot fi fie hexazecimale, fie zecimale. Pentru a evita confuzia și computerul să poată distinge clar un număr de altul, în asamblator se obișnuiește să plaseze simbolul h sau H după un număr hexazecimal ( H este o abreviere pentru engleză. hexazecimal (hexazecimal). Pentru concizie, uneori este numit simplu Hex ) . Și nu pune nimic după zecimală. Deoarece numerele de la 0 la 9 în ambele sisteme au aceleași semnificații, atunci numerele scrise ca 5 și 5h sunt aceleași.

Acea. Exemplul 1 (vezi mai sus) ar fi mai corect să scriem astfel: 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.

Vom vedea de ce este necesar sistemul hexazecimal în numerele ulterioare. Deocamdată, 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 un 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 Assembly. Nu este în totalitate convenabil să le prezentați în format HTML, așa că mai întâi va fi codul programului în sine cu linii numerotate, iar imediat după acesta vor fi explicații și note.

Ca asta:

linii Cod program
(1) muta ah,9

Explicatii:

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

Cerere uriașă: NU copiați programe de pe o pagină în clipboard și apoi lipiți-le în Notepad (sau oriunde altundeva)! Retastați-le manual într-un editor de text. Dacă aveți 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. Nu există nicio diferență între literele mici și majuscule în asamblare. Înregistrări ale formularului:

Asamblatorul le percepe la fel. Puteți, desigur, să forțați asamblatorul să facă distincția între caracterele minuscule și MAJUSCULE, dar nu vom face acest lucru deocamdată. Pentru a face programul mai ușor de citit, cel mai bine este să tastați operatorii cu litere mici și să începeți numele subprogramelor și etichetele cu litere mari. Dar depinde cine va fi confortabil.

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 din acest exemplu, vom avea nevoie de mai multe ediții. Prin urmare, vom omite pur și simplu descrierea unor comenzi în această etapă. Doar presupuneți că așa ar trebui să fie. Ne vom uita la acești operatori în detaliu în viitorul foarte apropiat. Deci, liniile numerotate (1), (2) și (13) pur și simplu le ignorați.

Liniile (3), (5), (9) și (11) rămân goale. Acest lucru se face pentru claritate. Asamblatorul le va omite pur și simplu.

Acum să trecem la luarea în considerare a operatorilor rămași. Codul programului începe cu linia (4). Acesta este un semn care îi spune asamblatorului la începutul codului. Linia (14) conține operatorii end Begin (Începe engleza Start; Sfârşit Sfârşit). 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ă încheiem programul Sfârșit Start (14).

Rândurile (6) (8) afișează mesajul Salut, lume!. Aici va trebui 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 special alocată pentru stocarea unui număr.

De exemplu:

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

A, B și C acestea 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 limba engleză move load). Rândul (6) ar trebui citit astfel: Încărcarea în registru AH.numărul 9 (cu alte cuvinte, atribuim AH.numărul 9). Mai jos vom vedea de ce este necesar acest lucru.

În rândul (7) încărcăm în registru DX adresa de mesaj pentru ieșire (în acest exemplu va fi șirulBună, lume!$).

Întreruperile vor fi tratate în detaliu în numerele ulterioare. Aici voi spune câteva cuvinte.

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

Să luăm în considerare cele de mai sus folosind un exemplu (Note cu litere mici):

Program pentru adăugarea a două numere

AcasăPrograme

A=5 Introducem valoarea 5 în variabila A

B=8 la variabila B valoarea 8

Adăugarea subrutinelor de apelare

acum C este egal cu 13

A=10 același lucru, doar numere diferite

B=25

Adăugarea subrutinelor de apelare

acum C este egal cu 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 apelată, iar apoi, când subprogramul a terminat de rulat, 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, apelăm o subrutină (în acest caz numită întrerupere), care afișează linia pe ecran. În acest scop, plasăm, de fapt, valorile necesare în registre. Toată munca necesară (ieșirea unei linii, mutarea cursorului) este preluată de subrutină. Această linie poate fi citită astfel: apelați 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. Este doar o practică obișnuită în Assembler să indice numărul de întreruperi în hexazecimal.

La rândul (10), noi, după cum probabil 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 executării întreruperii 20h, programul va reveni la locul de 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) titlul mesajului. Poate fi orice (de exemplu, mizerie sau sfoară etc.). DESPRE 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 Mess2. 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 reasamblați programul nostru. Sper că poți ghici 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 va întâlni un personaj 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 unui program de Asamblare. Poate că limbajul adunării vi s-a părut extrem de complicat, dar credeți-mă, asta este la prima vedere.

Tabelul 2.4. Sistem de codare hexazecimală
Sistemul zecimal Sistem hexazecimal Sistemul zecimal Sistem hexazecimal
0 0 (0000) 10 A (1010)
1 1(0001) 11 B (1011)
2 2 (0010) 12 C (1100)
3 3 (0011) 13 D (1101)
4 4 (0100) 14 E (1110)
5 5 (0101) 15 F(1111)
6 6 (0110) 16 10 (00010000)
7 7 (0111) 17 11 (00010001)
8 8 (1000) 18 12 (00010010)
9 9 (1001) 19 13 (00010011)

Pentru a converti un număr hexazecimal într-un număr zecimal, trebuie să înmulțiți valoarea celei mai mici cifre (zero) cu una, valoarea următoarei (primei) cifre cu 16, a doua cifră cu 256 (16 2), etc. , apoi adăugați toate produsele. De exemplu, luați numărul A17F:

A17F=F*16 0 + 7*16 1 + 1*16 2 + A*16 3 = 15*1 + 7*16+1*256+10*4096=41343

Tabelul 2.5. sistem de codificare octal
Sistemul zecimal sistem octal Sistemul zecimal sistem octal
0 0 (000) 10 12 (001010)
1 1(001) 11 13 (001011)
2 2 (010) 12 14 (001100)
3 3 (011) 13 15 (001101)
4 4 (100) 14 16 (001110)
5 5 (101) 15 17 (001111)
6 6 (110) 16 20 (010000)
7 7 (111) 17 21 (010001)
8 10 (001000) 18 22 (010010)
9 11 (001001) 19 23 (010011)

Dar fiecare specialist în echipamente digitale (dezvoltator, operator, reparator, programator etc.) trebuie să învețe să manipuleze sistemele hexazecimale și binare la fel de liber ca în cazul sistemelor zecimale obișnuite, astfel încât să nu fie necesare transferuri de la sistem la sistem.

Mult mai rar decât hexazecimal, se folosește codarea octală, care este construită pe același principiu ca hexazecimal, dar cifrele binare sunt împărțite în grupuri de trei cifre. Fiecare grup (cifră de cod) este apoi desemnată printr-un simbol. Fiecare bit al codului octal poate lua opt valori: 0, 1, 2, 3, 4, 5, 6, 7 (Tabelul 2.5).

Pe lângă codurile discutate, mai există și așa-numita reprezentare binară-zecimală a numerelor. Ca și în codul hexazecimal, în codul BCD fiecare cifră a codului corespunde la patru cifre binare, totuși, fiecare grup de patru cifre binare poate lua nu șaisprezece, ci doar zece valori, codificate prin caracterele 0, 1, 2, 3, 4 , 5, 6, 7, 8, 9. Adică, o zecimală corespunde la patru binare. Ca urmare, se dovedește că scrierea numerelor în cod zecimal binar nu este diferită de scrierea în cod zecimal obișnuit (Tabelul 2.6), dar în realitate este doar un cod binar special, fiecare cifră poate lua doar două valori: 0 și 1. Codul BCD este uneori foarte convenabil pentru organizarea indicatorilor și tablourilor de bord digitale zecimale.

Tabelul 2.6. Sistem de codare zecimală binar
Sistemul zecimal Sistem zecimal binar Sistemul zecimal Sistem zecimal binar
0 0 (0000) 10 10 (00010000)
1 1(0001) 11 11 (00010001)
2 2 (0010) 12 12 (00010010)
3 3 (0011) 13 13 (00010011)
4 4 (0100) 14 14 (00010100)
5 5 (0101) 15 15 (00010101)
6 6 (0110) 16 16 (00010110)
7 7 (0111) 17 17 (00010111)
8 8 (1000) 18 18 (00011000)
9 9 (1001) 19 19 (00011001)

În codul binar, puteți efectua orice operații aritmetice asupra numerelor: adunare, scădere, înmulțire, împărțire.

Luați în considerare, de exemplu, adăugarea a două numere binare pe 4 biți. Să adăugăm numărul 0111 (zecimal 7) și 1011 (zecimal 11). Adunarea acestor numere nu este mai dificilă decât în ​​notație zecimală:

Când adunăm 0 și 0 obținem 0, când adunăm 1 și 0 obținem 1, când adunăm 1 și 1 obținem 0 și ducem la următoarea cifră 1. Rezultatul este 10010 (zecimală 18). La adăugarea oricăror două numere binare de n biți, rezultatul poate fi un număr de n biți sau (n+1) biți.

Scăderea se face în același mod. Să se scadă numărul 0111 (7) din numărul 10010 (18). Scriem numerele aliniate la cifra cea mai puțin semnificativă și scădem în același mod ca în cazul sistemului zecimal:

La scăderea 0 din 0 obținem 0, la scăderea 0 din 1 obținem 1, la scăderea 1 din 1 obținem 0, la scăderea 1 din 0 obținem 1 și împrumutăm 1 în următoarea cifră. Rezultatul este 1011 (zecimal 11).

Când scădeți, este posibil să obțineți numere negative, așa că trebuie să utilizați reprezentare binară numere negative.

Pentru a reprezenta simultan atât numere binare pozitive, cât și binare negative, așa-numitele cod suplimentar. Numerele negative din acest cod sunt exprimate printr-un număr care, atunci când este adăugat la un număr pozitiv de aceeași valoare, va avea ca rezultat zero. Pentru a obține un număr negativ, trebuie să schimbați toți biții aceluiași număr pozitiv cu cei opuși (0 la 1, 1 la 0) și adăugați 1 la rezultat, de exemplu, scrieți numărul –5. Numărul 5 din codul binar arată ca 0101. Înlocuim biții cu cei opuși: 1010 și adăugăm unul: 1011. Însumăm rezultatul cu numărul inițial: 1011 + 0101 = 0000 (ignorăm transferul la a cincea cifră) .

modulo 2 două numere binare 0111 și 1011:

Alte operații pe biți asupra numerelor binare includ funcția AND și funcția SAU. Funcția AND are ca rezultat unul numai dacă biții corespunzători celor două numere originale sunt ambii uni, altfel rezultatul este -0. Funcția SAU are ca rezultat unul când cel puțin unul dintre biții corespunzători numerelor originale este 1, în caz contrar rezultatul este 0.

0123456789ABCDEF. Luând ca bază numărul 16, obținem sistemul numeric hexazecimal. Aici putem folosi 10 cifre ale sistemului zecimal, adăugând încă 6 cifre - litere ale alfabetului latin (A, B, C, D, E, F): 0, 1, 2, 3, 4, 5, 6, 7 , 8, 9 , A, B, C, D, E, F 10 11 12 13 14 15 Un total de 16 caractere diferite alcătuiesc alfabetul sistemului numeric hexazecimal. Puteți scrie orice număr incluzând toate aceste semne: A37, 1B45, F302, 1A3C5... - vă rugăm să rețineți: folosim semne de la 0 la F. Pentru sistemul numeric hexazecimal q=16. Conţinut.

Slide 32 din prezentare „Istoria sistemelor de numărare și numărare”. Dimensiunea arhivei cu prezentarea este de 2292 KB.

Informatica clasa a IX-a

rezumatul altor prezentări

„Modeling” clasa a IX-a - Modelarea ca metodă de cunoaștere. sistem de fișiere pentru PC. Testul este finalizat. Ptolemeu a construit un model al lumii. Modelul unei persoane sub forma unei păpuși pentru copii. Cel mai convenabil este să folosiți un model informațional atunci când descrieți traiectoria unui obiect. Caracteristicile existente ale obiectului. Descrierea arborelui. Cel mai convenabil este să utilizați un model informațional. Lista deputaților Dumei de Stat. Lista elevilor școlii; amenajarea sălii de clasă.

„Istoria numărării și sistemelor de numere” - Baza sistemului de numere. Zeci. Numar decimal. Numerotare chirilică slavă. Numerotare. Floare de lotus. Poziția unei cifre într-un număr se numește cifra sa. Poziția numărului. În antichitate, oamenii mergeau desculți. Un sistem numeric pozițional este caracterizat de baza sa. Împărțire pe bază. Scrierea numerelor de tip nou. Înmulțirea numerelor binare. Conversie numere zecimale. Operatii aritmetice.

„Sorting in Spreadsheets” - Sortarea și căutarea datelor în foi de calcul. Căutare de date în ET. Ordinea sortării imbricate. Departament. Condiții de căutare pentru înregistrări. Notează numele. Munca practica. Sortare ascendentă. Ordinea liniilor. Sortarea și căutarea datelor. Salariul și vârsta. Ecran reflectorizant. Sortarea datelor. Selectați exemple de baze de date. Sortarea înregistrărilor. Diferența dintre înregistrare și câmp. Cum se utilizează filtrul automat.

„Programe ciclice” - Creați un program. Găsiți suma. Introduceți un număr întreg. Aflați numărul de numere naturale din trei cifre. Aflați suma numerelor naturale. Calculati. Bucla cu postcondiție. Imprimați tabelul pe ecran. O taxă inițială. Buclă cu precondiție. Divizoare. Programe ciclice. Informatică. Tabularea funcțiilor. Conceptul de ciclu. Buclă cu un parametru. Introducerea datelor inițiale. Tabel de conversie a dolarului. Aflați numărul de numere.

„Modelarea ca metodă de cunoaștere științifică” - Tabel de tip „obiecte-obiecte-unul”. Descrieri ale obiectului. Metodă de înțelegere a lumii înconjurătoare. Rezolvarea problemelor. Resurse educaționale. Cinci tipi. Formalizarea. Etape de modelare. Băiat. Model ierarhic. Descrierea obiectului de modelare. Yura. Liliac. Denumiri de server. Modele tehnice. Diagrame de niveluri. Diagramă. Tip. Modelarea ca metodă de cunoaștere. Modele pe grafice. Probleme rezolvate cu ajutorul graficelor.

„Ce este e-mailul” - Adresă de e-mail. Dirijarea corespondenței. Scrisoare. Cum funcționează e-mailul. X-mailer. Întrebarea apariției e-mailului. Data de. Copie. E-mail. Structura literei. Istoricul e-mailurilor. Expeditor. E-mail.

Sistem de numere hexazecimale. primul nostru program.

Pentru a scrie programe în Assembly, trebuie să înțelegeți sistemul numeric hexazecimal. Nu este nimic complicat în asta. Folosim sistemul zecimal în viață. Sunt sigur că o știți cu toții, așa că voi încerca să explic sistemul hexazecimal folosind o analogie cu sistemul zecimal.

Deci, în sistemul zecimal, dacă adăugăm un zero la orice număr din dreapta, 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 numere diferite (de fapt, de aceea se numește zecimal).

În sistemul hexazecimal, folosim șaisprezece „cifre”. Am scris în mod special cuvântul „cifre” între ghilimele, pentru că... Nu folosește doar numere. Și într-adevăr, cum poate fi asta? Să 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 nu este dificil 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 un zero la dreapta oricărui număr din sistemul hexazecimal, atunci acest număr va crește cu16 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 numerele hexazecimale de numerele zecimale din Exemplul 1? Și din această serie: 10, 12, 45, 64, 12, 8, 19? Acestea pot fi fie hexazecimale, fie zecimale. Pentru a evita confuzia și computerul să poată distinge clar un număr de altul, în asamblator se obișnuiește să plaseze simbolul h sau H după un număr hexazecimal ( H este o abreviere pentru engleză. hexazecimal (hexazecimal). Pentru concizie, uneori este numit simplu Hex ) . Și nu pune nimic după zecimală. Deoarece numerele de la 0 la 9 în ambele sisteme au aceleași semnificații, atunci numerele scrise ca 5 și 5h sunt aceleași.

Acea. Exemplul 1 (vezi mai sus) ar fi mai corect să scriem astfel: 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.

Vom vedea de ce este necesar sistemul hexazecimal în numerele ulterioare. Deocamdată, 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 un 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 Assembly. Nu este în totalitate convenabil să le prezentați în format HTML, așa că mai întâi va fi codul programului în sine cu linii numerotate, iar imediat după acesta vor fi explicații și note.

Ca asta:

linii Cod program
(1) muta ah,9

Explicatii:

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

Cerere uriașă: NU copiați programe de pe o pagină în clipboard și apoi lipiți-le în Notepad (sau oriunde altundeva)! Retastați-le manual într-un editor de text. Dacă aveți 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. Nu există nicio diferență între literele mici și majuscule în asamblare. Înregistrări ale formularului:

Asamblatorul le percepe la fel. Puteți, desigur, să forțați asamblatorul să facă distincția între caracterele minuscule și MAJUSCULE, dar nu vom face acest lucru deocamdată. Pentru a face programul mai ușor de citit, cel mai bine este să tastați operatorii cu litere mici și să începeți numele subprogramelor și etichetele cu litere mari. Dar depinde cine va fi confortabil.

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 din acest exemplu, vom avea nevoie de mai multe ediții. Prin urmare, vom omite pur și simplu descrierea unor comenzi în această etapă. Doar presupuneți că așa ar trebui să fie. Ne vom uita la acești operatori în detaliu în viitorul foarte apropiat. Deci, liniile numerotate (1), (2) și (13) pur și simplu le ignorați.

Liniile (3), (5), (9) și (11) rămân goale. Acest lucru se face pentru claritate. Asamblatorul le va omite pur și simplu.

Acum să trecem la luarea în considerare a operatorilor rămași. Codul programului începe cu linia (4). Acesta este un semn care îi spune asamblatorului la începutul codului. Linia (14) conține operatorii end Begin (Începe engleza Start; Sfârşit Sfârşit). 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ă încheiem programul Sfârșit Start (14).

Rândurile (6) (8) afișează mesajul Salut, lume!. Aici va trebui 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 special alocată pentru stocarea unui număr.

De exemplu:

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

A, B și C acestea 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 limba engleză move load). Rândul (6) ar trebui citit astfel: Încărcarea în registru AH.numărul 9 (cu alte cuvinte, atribuim AH.numărul 9). Mai jos vom vedea de ce este necesar acest lucru.

În rândul (7) încărcăm în registru DX adresa de mesaj pentru ieșire (în acest exemplu va fi șirulBună, lume!$).

Întreruperile vor fi tratate în detaliu în numerele ulterioare. Aici voi spune câteva cuvinte.

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

Să luăm în considerare cele de mai sus folosind un exemplu (Note cu litere mici):

Program pentru adăugarea a două numere

AcasăPrograme

A=5 Introducem valoarea 5 în variabila A

B=8 la variabila B valoarea 8

Adăugarea subrutinelor de apelare

acum C este egal cu 13

A=10 același lucru, doar numere diferite

B=25

Adăugarea subrutinelor de apelare

acum C este egal cu 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 apelată, iar apoi, când subprogramul a terminat de rulat, 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, apelăm o subrutină (în acest caz numită întrerupere), care afișează linia pe ecran. În acest scop, plasăm, de fapt, valorile necesare în registre. Toată munca necesară (ieșirea unei linii, mutarea cursorului) este preluată de subrutină. Această linie poate fi citită astfel: apelați 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. Este doar o practică obișnuită în Assembler să indice numărul de întreruperi în hexazecimal.

La rândul (10), noi, după cum probabil 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 executării întreruperii 20h, programul va reveni la locul de 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) titlul mesajului. Poate fi orice (de exemplu, mizerie sau sfoară etc.). DESPRE 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 Mess2. 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 reasamblați programul nostru. Sper că poți ghici 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 va întâlni un personaj 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 unui program de Asamblare. Poate că limbajul adunării vi s-a părut extrem de complicat, dar credeți-mă, asta este la prima vedere.

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 sistemul hexazecimal, literele A, B, C, D, E, F sunt folosite, respectiv, pentru a scrie cifrele care denotă numerele 10, 11, 12. 13, 14. 15.

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

Convertirea 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ă a unui număr hexazecimal este scrisă ca un număr binar de patru cifre - caiet. După aceasta, 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, sunt scrise ca o cifră hexazecimală. Aceste numere sunt, de asemenea, situate 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 sistemul zecimal în octal și înapoi se realizează în același mod ca și conversia în/din binar.

Conversia numerelor din octal în binar și înapoi

Fiecare cifră a unui număr octal 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 metodologice 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 sistem -ary la sistem 10-ary. Să presupunem că trebuie să convertim un număr dintr-un anumit sistem numeric în zecimal. Pentru a face acest lucru, trebuie să îl reprezentați în 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.

    Conversia de la sistemul de 10 cifre lap -ichnaya.

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 cot parțial este 1, procesul s-a încheiat. Scriem toate resturile de jos în sus, începând cu ultimul cot incomplet și obținem numărul 1100010. Deci 98 10 = 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 parțial (9) este mai mic de 16, procesul s-a încheiat. Notăm, pornind de la ultimul coeficient incomplet, toate resturile de jos în sus și obținem numărul 957. Deci 2391 10 = 957 16.

2.3 12165 10 → X 2.

Dacă convertiți prin diviziune în sistemul binar, obțineți un proces destul de greoi. Puteți mai întâi să convertiți numărul în 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 unui sistem numericp .

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

Soluţie. Este necesar să se determine baza sistemului de numere p. Din moment ce știm că există doar 10 degete de la picioare 10, 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 și 12 8 = 1∙8+2 = 10 10 degete.

  • Serghei Savenkov

    un fel de recenzie „scurtă”... de parcă s-ar grăbi undeva