Kako podesiti pametne telefone i računare. Informativni portal

Sistemi brojeva. Pozicioni brojevni sistem, heksadecimalni

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 sistem brojeva. Naš prvi program.

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.

Tabela 2.4. Heksadecimalni sistem kodiranja
Decimalni sistem Hex sistem Decimalni sistem Hex sistem
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 Ž (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)

Da biste heksadecimalni broj pretvorili u decimalni, trebate pomnožiti vrijednost najmanje značajne (nule) cifre sa jedan, vrijednost sljedeće (prve) cifre sa 16, druge cifre sa 256 (16 2), itd., a zatim dodajte sve proizvode. Na primjer, uzmimo broj A17F:

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

Tabela 2.5. 8-cifreni sistem kodiranja
Decimalni sistem Oktalni sistem Decimalni sistem Oktalni sistem
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)

Ali svaki specijalista za digitalnu opremu (programer, operater, serviser, programer, itd.) treba da nauči kako da slobodno rukuje heksadecimalnim i binarnim sistemima, kao i običnim decimalnim, tako da nije potrebno prebacivanje sa sistema na sistem.

Oktalno kodiranje se koristi mnogo rjeđe od heksadecimalnog kodiranja, koje je izgrađeno na istom principu kao i heksadecimalno, ali su binarne cifre podijeljene u grupe od tri znamenke. Svaka grupa (cifra koda) je tada označena jednim simbolom. Svaka cifra 8-arnog koda može imati osam vrijednosti: 0, 1, 2, 3, 4, 5, 6, 7 (Tabela 2.5).

Pored razmatranih kodova, postoji i takozvani binarno-decimalni prikaz brojeva. Kao iu heksadecimalnom kodu, u binarno-decimalnom kodu svaki bit koda odgovara četiri binarne znamenke, međutim, svaka grupa od četiri binarne znamenke može uzeti ne šesnaest, već samo deset vrijednosti kodiranih simbolima 0, 1, 2 , 3, 4, 5, 6, 7, 8, 9. To jest, jedno decimalno mjesto odgovara četiri binarne. Kao rezultat toga, ispada da se pisanje brojeva u binarno-decimalnom kodu ne razlikuje od pisanja u običnom decimalnom kodu (tabela 2.6), ali u stvarnosti je to samo poseban binarni kod, čija svaka znamenka može imati samo dvije vrijednosti: 0 i 1. BCD je ponekad vrlo zgodan za organizovanje decimalnih numeričkih indikatora i tabli za rezultate.

Tabela 2.6. BCD sistem kodiranja
Decimalni sistem Binarni decimalni sistem Decimalni sistem Binarni decimalni sistem
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)

U binarnom kodu možete izvoditi bilo koje aritmetičke operacije nad brojevima: sabiranje, oduzimanje, množenje, dijeljenje.

Razmotrimo, na primjer, dodavanje dva 4-bitna binarna broja. Dodajmo broj 0111 (decimala 7) i 1011 (decimala 11). Zbrajanje ovih brojeva nije teže od decimalnog:

Sabiranjem 0 i 0 dobijamo 0, sabiranjem 1 i 0 dobijamo 1, sabiranjem 1 i 1 dobijamo 0 i prenosimo na sledeću cifru 1. Rezultat je 10010 (decimala 18). Dodavanje bilo koja dva n-bitna binarna broja može rezultirati n-bitnim ili (n + 1)-bitnim brojem.

Oduzimanje se vrši na isti način. Neka se broj 0111 (7) oduzme od broja 10010 (18). Zapisujemo brojeve poravnate sa najmanjom značajnom cifrom i oduzimamo na isti način kao u slučaju decimalnog sistema:

Oduzimanjem 0 od 0 dobijamo 0, oduzimanjem 0 od 1 dobijamo 1, oduzimanjem 1 od 1 dobijamo 0, oduzimanjem 1 od 0 dobijamo 1 i pozajmljujemo 1 u sledećem bitu. Rezultat je 1011 (decimala 11).

Prilikom oduzimanja moguće je dobiti negativne brojeve, tako da je potrebno koristiti binarno predstavljanje negativni brojevi.

Za simultano predstavljanje i binarnih pozitivnih i binarnih negativnih brojeva koristi se tzv. dodatni kod... Negativni brojevi u ovom kodu su izraženi kao broj koji, kada se doda pozitivnom broju iste veličine, rezultira nulom. Da biste dobili negativan broj, trebate promijeniti sve bitove istog pozitivnog broja u njihovu suprotnost (0 sa 1, 1 sa 0) i dodati 1. Na primjer, zapišite broj –5. Broj 5 u binarnom kodu izgleda kao 0101. Zamijenite bitove suprotnim: 1010 i dodajte jedan: 1011. Rezultat dodajemo originalnim brojem: 1011 + 0101 = 0000 (zanemarujemo prijenos na petu cifru).

modulo 2 dva binarna broja 0111 i 1011:

Ostale bitne operacije na binarnim brojevima uključuju funkciju AND i funkciju OR. Funkcija AND rezultira jednim samo ako odgovarajući bitovi dva originalna broja sadrže oba, inače je rezultat -0. Funkcija OR rezultira jednom kada je barem jedan od odgovarajućih bitova originalnih brojeva 1, u suprotnom rezultat je 0.

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.

Top srodni članci