Sunteți pe pagina 1din 19

1.

INTRODUCERE N ARHITECTURA X86 I


EMULATORUL EMU8086

1.1 Schema bloc a unui microcalculator


Microcalculatorul, structurat ca o main "VON NEUMANN", este un sistem programabil de
prelucrar ea informaiei care are dou componente inseparabile i definitorii: hardware i
software. Deoarece secvena de instruciuni poate fi schimbat, microcalculatorul poate s
rezolve mai mult de un singur tip de probleme.

Figura 1. Schema bloc a unui microcalculator

n mod convenional, un microcalculator conine cel puin un element de procesare, unitatea


central de procesare (UCP), un tip de memorie i dispozitive de intrare/ieire, toate
interconectate de diferite tipuri de magistrale.

UCP: blocul hardware care controleaz sistemul i proceseaz datele.

memoria: blocul hardware care stocheaz datele i instruciunile ntr-o secven de


locaii de memorie. Locaiile de memorie sunt caracterizate de adrese i coninut.

porturi I/O: blocuri hardware care formeaz interfaa dintre microcalculator i lumea
exterioar.

Page 1 of 19
magistrale: conexiunile dintre cele 3 blocuri hardware.

1.2 Arhitectura x86. Componentele UCP


Pe parcursul laboratorului de Arhitectura Microprocesoarelor vei studia arhitectura Intel x86
n modul real. Aceast seciune prezint registrele i fanioanele din interiorului UCP.

Un registru este ca o singur locaie de memorie disponibil n interiorul UCP. Registrele de uz


general se constituie n blocuri hardware cu funcie de stocare a informaiei; fiind n interiorul
UCP, ele sunt accesate mai rapid decat locaiile de memorie. Scenariul tipic de folosire a
registrelor este urmtorul: a) UCP ncarc informaia dintr-o memorie mai mare n registre, b)
informaia din interiorul registrelor este folosit pentru operaii aritmetico-logice, manipulat
sau testat, c) n final, rezultatul este stocat napoi n memoria de baz, fie prin intermediul
aceleiai instruciuni, fie prin intermediul unei instruciuni ulterioare.

Arhitectura x86 pune la dispoziie mai multe registre de 16 bii. Patru dintre ele (AX, BX, CX, DX)
sunt registre de uz general, ceea ce nseamn c ar putea fi folosite pentru orice operaie. Totui,
exist nite restricii asupra lor: exist unele instruciuni care folosesc implicit unul sau mai
multe registre de uz general. De exemplu:

numai AX i DX pot fi folosite pentru instruciunile de nmulire i mprire,

numai BX poate fi folosit pentru stocarea adreselor efective (pentru adresarea indirect
a memoriei),

numai CX poate fi folosit ca i contor pentru instruciunea loop.

Registrele de uz general, AX, BX, CX, DX, pot fi accesate ca 2 octei separai (de exemplu, octetul
superior al lui BX poate fi accesat ca BH i cel inferior ca BL).

Exist 2 registre speciale cu rol de indicator ("pointer"): SP ("stack pointer") indic spre vrful
stivei i BP ("base pointer") este deseori folosit pentru a indica spre un alt loc din stiv, de
obicei deasupra variabilelor locale. Deoarece aceste registre sunt folosite drept pointeri,
informaiile stocate n ele sunt, de obicei, interpretate drept adrese efective.

Registrele SI ("source index") i DI ("destination index") sunt registre de adrese i pot fi folosite
i pentru indexarea vectorilor. Aceste registre stocheaz adrese efective. Instruciuni speciale,
precum instruciunile de manipulare a vectorilor, folosesc aceste registre pentru a indica ctre
elementul curent din vectorul surs (SI) i ctre elementul curent din vectorul destinaie (DI).

Microprocesoarele x86 n modul real organizeaz memoria n subdiziuni logice numite


segmente. Pentru definirea acestor segmente, se folosesc 4 registre segment: CS - registrul
segment de program ("code segment"), SS - registrul segment de siv ("stack segment"), DS -
registrul segment de date ("data segment"), ES - registrul segment de date suplimentar
("extended data segment"). Ele vor stoca mereu adrese segment. Mai multe informaii despre
adresarea memoriei vor fi furnizate n laboratorul 3.

Registrul de fanioane F ("FLAGS") conine toate fanioanele UCP:

Page 2 of 19
CF (carry flag): semnalizeaz un transport sau un mprumut aritmetic (depire) pentru
numerele fr semn; depirea aritmetic are loc dac rezultatul operaiei este n afara
gamei de reprezentare a numerelor (de exemplu, -12 si 270 sunt n afara gamei 0+255
n care pot fi reprezentate numerele pe 8 bii, fr semn).

PF (parity flag): semnalizeaz c numrul de bii egali cu 1 din cel mai puin semnificativ
octet al rezultatului este par

AF (auxiliary flag): semnalizeaz un transport sau un mprumut aritmetic peste primul


nibble

ZF (zero flag): semnalizeaz c rezultatul este 0

SF (sign flag): semnalizeaz c cel mai semnificativ bit al rezultatului este setat (acesta
este bitul de semn pentru prelucrarea numerelor ntregi cu semn)

DF (direction flag): controleaz parcurgerea n sens cresctor sau descresctor al


adreselor elementelor dintr-un vector

OF (overflow flag): semnalizeaz o depire aritmetic pentru numerele cu semn;


depirea aritmetic cu semn are loc dac rezultatul operaiei este in afara gamei de
reprezentare a numerelor (de exemplu, -130 si +200 sunt in afara gamei -128+127 in
care pot fi reprezentate numerele pe 8 bii, cu semn)

Registrul IP (instruction pointer indicator de instruciuni) stocheaz adresa efectiv a


instruciunii curente. Acest registru nu este un atribut de arhitectur.

1.3 Organizarea memoriei


Pentru x86 n modul real, orice bloc de memorie poate fi considerat o secven de locaii de
memorie. Fiecare locaie de memorie stocheaz un numr pe 8 bii, un octet (byte); aadar,
formatul memoriei este octetul. Acest numr pe 8 bii reprezint coninutul locaiei de memorie.
Fiecare locaie de memorie este identificat printr-un numr unic numit adres, mai exact,
adresa fizic. Dimensiunea hrii memoriei este dependent de adresa fizic prin urmtoarea
formul:

dimensiuneaMemoriei 2DimensiuneAdresaFizic[biti] (1)

Exemplu 1: folosind o adres fizic de 2 bii putem forma 4 adrese fizice diferite: 00, 01, 10 i
11, corespunznd celor 4 locaii diferite de memorie. Aadar, o memorie cu adresa fizic pe 2
bii este format din 4 locaii de memorie (4 octei).
20
Exemplu 2: folosind o adres fizic de 20 bii putem forma 2 adrese fizice diferite,
20
corespunznd celor 2 locaii diferite de memorie. Aadar, o memorie cu adresa fizic pe 20
20
bii este format din 2 locaii de memorie (1 MB).

Page 3 of 19
adrese
fizice coninut
FFFFFh 88h
o adres FFFFEh 73h fiecare
unic locaie de
pentru 00010h 09h memorie
fiecare 0000Fh 1Bh stocheaz o
locaie de 0000Eh ACh valoare pe 16
memorie bii
00001h 17h
00000h 24h
Figura 2. Memoria este o secven de locaii de memorie cu adrese unice

Not: numerele din Figura 2 sunt scrise n hexazecimal. Pentru mai multe informaii cu privire
la bazele de numeraie consultai seciunea 1.7.

1.4 nelegerea unor instruciuni x86


Tipurile de instruciuni pentru procesoarele x86 n modul real sunt urmtoarele:

instruciuni de transfer de date

o copierea unei constante ntr-un registru sau ntr-o locaie de memorie

o copierea datelor dintr-o locaie de memorie ntr-un registru sau viceversa

o copierea datelor de la/ctre dispozitivele I/O

instruciuni de procesare de date

o operaii aritmetice (adunare, scdere, nmulire, mprire etc.)

o operaii logice (i, sau, sau exclusiv, deplasri, rotaii etc.)

o operaii de comparare

instruciuni de control al execuiei

o saltul ctre o alt locaie n program i executarea instruciunilor de acolo

o saltul condiionat ctre o alt locaie dac o anumit condiie este ndeplinit

o saltul ctre o alt locaie salvnd adresa de rentoarcere (un apel)

Mai jos sunt prezentate nite instruciuni tipice x86.

Page 4 of 19
MOV Copiaz Date
Mod de utilizare: MOV d, s
Operanzi:
d registru de uz general, registru de segment (cu excepia CS) sau locaie de memorie
s constant cu adresare imediat, registru de uz general, registru segment sau locaie
de memorie
Efecte: Copiaz sursa la destinaie, suprascriind valoarea destinaiei: (d) (s).
Fanioane: niciunul
Not: Argumentele trebuie s aib aceeai dimensiune (byte, word).

Exemplu
Exemplu

Page 5 of 19
Examplu

Page 6 of 19
ADD Adunare de numere ntregi
Mod de utilizare: ADD d, s
Operanzi:ADD d, s
d registru sau locaie de memorie
s constant cu adresare imediat, registru sau locaie de memorie; nu pot fi folosii 2
operanzi din memorie
Efecte: Adunare; adun sursa la valoarea din destinaie: (d) (d) + (s).
Fanioane: CF, ZF, OF, SF, AF si PF sunt setate conform rezultatului.
Not: CF si OF ne indic depire n cazul valorilor fr semn, respectiv cu semn. SF indic
semnul rezultatului n cazul valorilor cu semn.

Exemplu

Page 7 of 19
Exemplu Exemplu

Page 8 of 19
ADC Adunare cu transport
Mod de utilizare: ADC d, s
Operanzi:
d registru sau locaie de memorie
s constant cu adresare imediat, registru sau locaie de memorie; nu pot fi folosii 2
operanzi din memorie
Efecte: Adunare cu transport; adun fanionul de transport (CF) i sursa la destinaie:
(d) (d) + (s) + (CF).
Fanioane: CF, ZF, OF, SF, AF si PF sunt setate conform rezultatului.
Not: CF i OF ne indic depire n cazul valorilor fr semn, respectiv cu semn. SF indic
semnul rezultatului n cazul valorilor cu semn.

Exemplu

Page 9 of 19
Exemplu Exemplu

Page 10 of 19
DIV mprire fr semn
Mod de folosire: DIV s
Operanzi:
s registru pe 8 sau 16 bii, locaie de memorie;
Efecte:
dac s este o valoare pe 8 bii: se mparte valoarea stocat n registrul AX la src, restul
mpririi este stocat n AH, iar ctul mpririi este stocat in AL:
(AH) (AX) mod (src), (AL) (AX) div (src).
dac s este o valoare pe 16 bii: se mparte valoarea stocat n DX concatenat cu AX la
src, restul mpririi este stocat n DX, iar ctul mpririi este stocat n AX:
(DX) (DX) (AX) mod (src), (AX) (DX) (AX) div (src).
Fanioane: CF, ZF, OF, SF, AF i PF sunt setate conform rezultatului.
Nota: n cazul n care ctul mpririi este mai mare de 8 bii (16 bii) i nu poate fi stocat n AX
(DXAX) atunci va aprea o eroare de depire la mprire.

Exemplu

Page 11 of 19
Exemplu
1.5 Emulatorul emu8086
Emulatorul emu8086, disponibil gratuit pentru descrcare la http://www.emu8086.com, va fi
folosit pe parcursul laboratoarelor de Arhitectura Microprocesoarelor pentru a exemplifica
atributele arhitecturale ale arhitecturii x86. Acest emulator va fi utilizat pentru a scrie programe
n limbaj de asamblare, a le compila i a le executa cu scopul de a nelege cum opereaz
microprocesorul.

Emulatorul emu8086 are numeroase opiuni, dar scenariul de baz pentru laborator va fi
urmtorul:

1. Deschidei emulatorul. Fereastra Source Code (fr a conine nici un cod de asamblare) va fi
afiat.

2. Folosii fereastra Source Code pentru a scrie un program n limbaj de asamblare. Salvai
programul selectnd opiunea File menu -> Save As submenu.

3. Opional, dac programul v este dat de ndrumtorul de laborator, ncrcai fiierul .asm
apsnd butonul Open i selectnd fiierul surs.

4. Compilai programul:

4.1. Dai click pe butonul Compile pentru a compila programul.

4.2. Dac n caseta Assembler Status dialog, afiat dup compilare, apar erori de compilare,
apsai dublu click pe textul de eroare pentru a v ntoarce n Source Code window,
reparai eroarea i compilai din nou programul.

Page 12 of 19
4.3. Dac nu sunt erori de asamblare continuai cu pasul urmtor.

5. ncrcai programul executabil n emulator.

5.1. In fereastra Assembler Status, afiat dup compilare, apsai butonul Run.

6. Executai programul pas cu pas, observai cum se modific valorile registrelor, ale locaiilor
de memorie, ale fanioanelor etc. i notai observaii pe baza lor.

6.1. Apsai butonul de Reload pentru a relua programul.

6.2. Observai registrele n fereastra Emulator.

6.3. Vizualizai fereastra Source fcnd click pe butonul Source.

6.4. Opional, dac este necesar, observai i fereastra fanioanelor fcnd click pe butonul
Flags.

6.5. Opional, dac este necesar, observai i fereastra memoriei fcnd click pe butonul
Memory din submeniul View.

6.6. Opional, dac este necesar, observai i fereastra stivei fcnd click pe butonul Stack.

6.7. Apsai butonul Single Step i observai cum instruciunea curent, evideniat, este
executat. Sesizai modul n care se modific registrele, locaiile de memorie, fanioanele
etc.

6.8. Repetai pasul 6.7 pn cnd apare o fereastr de dialog care afieaz: the program has
returned control to the operating system.

7. Tragei concluzii referitor la efectul pe care diverse instruciuni l au asupra registrelor,


locaiilor de memorie, fanioanelor etc.

1.6 Exerciii
1.6.1 Exerciiul 1
Obiectiv. Scopul acestui exerciiu este de a v familiariza cu emulatorul emu8086 i cu
instruciunile MOV i ADD.

Cerin. Scriei un program care s fac media aritmetic a 3 numere pe 16 bii, fr semn.

Soluie.

1. Pornii emulatorul.

2. Utilizai fereastra Source Code pentru a scrie urmtorul program:

Page 13 of 19
org 100h

mov AX, 0h
mov DX, 0h

mov AX, 1234h


add AX, 8017h
adc DX, 0h
add AX, 9423h
adc DX, 0h

mov BX, 3h
div BX
mov CX, AX

int 20h

3. Explicaia programului

3.1. Prima linie din program (org 100h) nu este o instruciune. Aceasta este o directiv de
asamblare care specific faptul c urmtoarea instruciune (i implicit tot programul)
va fi ncrcat n memorie (n segmentul de cod) ncepnd cu adresa 100h.

3.2. Urmtoarele 2 instruciuni iniializeaz registrele care vor stoca media. Observai c
suma a 3 numere pozitive pe 16 bii rezult ntr-un numr mai mare, care s-ar putea s
nu ncap pe 16 bii. De aceea vom folosi 2 registre pe 16 bii (AX i DX) pentru a stoca
rezultatul. DX va stoca cei mai semnificativi 2 octei si AX pe cei mai puin semnificativi
2 octei.

3.3. Mergnd mai departe, primul numr (1234h) este ncrcat n AX (mov AX, 1234h). Apoi
al doilea numr este adunat la AX (add AX, 8017h).

3.4. Dup instruciunea anterioar, fanionul de transport (CF) ar putea avea valoarea 1
(dac suma nu ncape pe 16 bii). Valoarea acestui bit este adunat la DX (adc DX, 0h).

3.5. n continuare, al treilea numr (9423h) este adunat la AX (add AX, 9423h). Apoi fanionul
de transport este din nou adunat la DX (adc DX, 0h).

3.6. Instruciunea mov BX, 3h ncarc valoarea 3h n BX, iar instruciunea div BX mparte
valoarea pe 32 de bii stocat n DXAX la valoarea pe 16 bii stocat n BX. Dup
diviziune, ctul este stocat n AX i restul n DX.

3.7. n final, rezultatul este copiat din AX n CX.

3.8. Instruciunea int 20h este o ntrerupere software. Aceasta termin programul curent i
returneaz controlul sistemului de operare.

4. Salvai programul (File menu -> Save As submenu) cu numele lab1_prog1.asm.

5. Compilai programul:

5.1. Facei click pe butonul Compile pentru a compila programul.

Page 14 of 19
5.2. Vei fi ndrumai s salvai fiierul executabil. Salvai-l cu numele recomandat
(lab1_prog1.com).

5.3. Vizualizai statusul compilrii n caseta Assembler Status. Dac programul a fost editat
corect, mesajul ar trebui sa fie: lab1_prog1.com is assembled successfully into 24
bytes.

6. ncrcai programul executabil n emulator.

6.1. Facei click pe butonul Run pentru a ncrca programul n emulator i a-l executa.

7. Executai programul pas cu pas, urmarii schimbrile aprute n cadrul registrelor, locaiilor
de memorie, fanioanelor etc. i notai observaii legate de acestea.

7.1. Facei click pe butonul de Reload pentru a rencrca programul executat.

7.2. Observai fereastra Emulator si reinei c:

7.2.1. Instruciunea curent (mov AX, 00000h) este evideniat. Aceasta este prima
instruciune din program i a fost ncrcat la adresa logic 0700:0100 (adresa

Page 15 of 19
segment : adresa efectiv). Adresa efectiv a fost impus de directiva de asamblare
org 100h.

7.2.2. Valoarea din registrul IP (registrul care stocheaz adresa efectiv a instruciunii
curente) este 0100h.

7.3. Facei click pe butonul Single Step pentru a executa prima instruciune. Observai c:

7.3.1. Valoarea din registrul IP s-a schimbat (n 103h) deoarece IP puncteaz acum ctre
a doua instruciune (evideniat), care este stocat n memorie la adresa
0700:0103.

7.3.2. Valoarea stocat n registrul AX nu s-a modificat, ntruct era deja 0000h.

7.4. Facei din nou click pe butonul Single Step pentru a executa a doua instruciune.
Observai c:

7.4.1. Valoarea din registrul IP s-a schimbat (n 0106h) pentru c IP pointeaz acum ctre
a treia instruciune (evideniat), care este stocat n memorie la adresa 0700:0106.

7.4.2. Valoarea stocat n registrul DX nu s-a schimbat, deoarece era deja 0000h.

Page 16 of 19
7.5. Executai instruciunea urmtoare (mov AX, 1234h) i observai c:

7.5.1. Registrul AX a fost ncrcat cu valoarea 1234h. Noua valoare din AX este acum
1234h.

7.5.2. Valoarea din registrul IP s-a schimbat din nou.

7.6. Facei click pe butonul Flags i vizualizai statusul fanioanelor dup aceast operaie
aritmetic. Observai c pentru moment toate fanioanele au valoarea 0.

7.7. Executai urmtoarea instruciune (add AX, 8017h) i reinei c:

7.7.1.Registrul AX a fost ncrcat cu valoarea sumei dintre valoarea


sa anterioar (1234h) i valoarea 8017h. Noua valoare din AX
este acum 924Bh.

7.7.2.Fanionul de transport (CF) este n continuare 0, deoarece suma


dintre cele 2 valori nu a rezultat ntr-un numr mai mare de 16
bii.

7.7.3. Fanionul de zero (ZF) este n continuare 0, deoarece rezultatul


este o valoare nenul.

7.7.4. Fanionul de semn (SF) este 1 i fanionul de overflow (OF) este


0. Acestea vor fi discutate n Laboratorul 2.

7.7.5.Fanionul de paritate (PF) este 1, deoarece suma modulo 2 a


biilor din rezultat este 1.

7.7.6.Valoarea din registrul IP s-a schimbat din.

7.8. Executai urmtoarea instruciune (adc DX, 0h) i observai c:

7.8.1. Valoarea din registrul DX rmne neschimbat, deoarece fanionul de transport


este 0.

7.8.2. Valoarea din registrul IP s-a schimbat din nou.


7.9. Executai urmtoarea instruciune (add AX, 9423h) i sesizai c:
7.9.1.Registrul AX a fost incrcat cu suma dintre valoarea sa
anterioar (924Bh) i valoarea 9423h. Noua valoare din AX este
acum 266Eh, care reprezint doar cei mai puin semnificativi 16
bii din rezultatul de 17 bii. Cel mai semnificativ bit, care este
1, este stocat n fanionul de transport.

7.9.2. Fanionul de transport (CF) este 1, deoarece suma dintre cele 2


valori a rezultat ntr-o depire aritmetic. n acest caz,
fanionul de transport stocheaz cel mai semnificativ bit al
rezultatului.

7.9.3. Fanionul de zero (ZF) este n continuare 0, deoarece rezultatul


este o valoare nenul.

7.9.4. Fanionul de semn (SF) este 0 i cel de overflow (OF) este 1.


Acestea vor fi discutate n Laboratorul 2.

7.9.5. Fanionul de paritate (PF) este 0, deoarece suma modulo 2 a

Page 17 of 19
biilor din rezultat este 0.

7.9.6. Valoarea din registrul IP s-a schimbat din nou.

7.10. Executai urmtoarea instruciune (adc DX, 0h) i observai c:

7.10.1. Valoarea din registrul DX este incrementat cu 1 (valoarea fanionului de


transport a fost adugat la valoarea anterioar a lui DX). n consecin, valoarea
din DX este acum 1h.

7.10.2. Toate fanioanele aritmetice sunt actualizate din nou. Dintre acestea, fanionul de
transport (CF) devine 0, deoarece suma dintre DX, 0h i CF nu a produs o depire
aritmetic.

7.10.3. Valoarea din registrul IP s-a schimbat din nou.

7.11. Executai instruciunea urmtoare (mov BX, 3h) i observai c:

7.11.1. Registrul BX a fost ncrcat cu valoarea 3h.

7.11.2. Valoarea din registrul IP s-a schimbat din nou.

7.12. Executai urmtoarea instruciune (div BX) i observai c:

7.12.1. Valoarea pe 32 de bii stocat n DXAX (1266Eh) este mprit la valoarea pe 16


bii stocat n BX (3h). Dup mprire, ctul (6224h) este stocat n AX i restul (2h)
este stocat n DX.

7.13. Executai urmtoarea instruciune (mov CX, AX) i observai c:

7.13.1. Registrul CX este ncrcat cu valoarea stocat n registrul AX. Valoarea lui AX nu
se modific.

7.14. Instruciunea curent este int 20h. Facei click pe butonul Single Step de dou ori
i observai c o fereastr de mesaj este afiat, spunnd c programul a returnat
controlul sistemului de operare. Facei click pe Ok.

8. Scriei concluzii referitoare la efectul diferitelor instruciuni asupra registrelor i a locaiilor


de memorie.

1.7 Anexa 1. Bazele de numeraie: 2, 10, 16


Orice numr poate fi reprezentat ca:

numr zecimal (numr n baza 10) i poate fi scris ca o secven de cifre (0,1,,9),

numr binar (numr n baza 2) i poate fi scris ca o secven de cifre binare sau bii (0 i
1),

numr hexazecimal (numr n baza 16) i poate fi scris ca o secven de simboluri


hexazecimale (0, 1, , 9, A, B, C, D, E i F). Un numr hexazecimal este identificat folosind
sufixul h (1A44h) sau prefixul 0x (0x1A44).

Page 18 of 19
Gama
Gama
Definiie Gama binar zecimal fr
hexazecimal
semn
00000000
byte (B) secven de 8 bii 0 255 0x00 0xFF
11111111
0x0000
word (w) secven de 16 bii 0 65535
0xFFFF
0x00000000
double word (dw) secven de 32 bii
0xFFFFFFFF

1.7.1 Conversia dintr-o baz n alta pentru numere fr semn


Zecimal -> Binar (Hexazecimal)

se mparte repetat numrul la 2 (16), reinnd resturile

se scriu toate resturile mpririlor n ordine invers

Binar (Hexazecimal) -> Zecimal

se nmulete fiecare cifr binar (hexazecimal) cu 2 (16) la puterea indexului


respectivei cifre i se nsumeaz produsele

exemplu (binar): valoareZecimal(11012) = 1*23 + 1*22 + 0*21 + 1*20 = 1310

exemplu (hexazecimal): valoareZecimal (3A16) = 3*161 + A*160 = 5810

Binar <-> Hexazecimal

se observ c o secven de 4 bii se convertete ntr-un singur simbol hexazecimal i


viceversa:

o 0000 -> 0h, 0001 -> 1h, ..., 1111 ->Fh

o secven mai lung de 4 bii poate fi convertit n hexazecimal prin convertirea


secvenelor de 4 bii n hexazecimal (ncepnd de la dreapta spre stnga:

o 0101101101101011110111 -> 01 0110 1101 1010 1111 0111 -> 1 6 D A F


7 -> 0x16DAF7

o secven de simboluri hexazecimale va fi convertit simbol cu simbol n secvene de 4


bii:

o 0x3F9 -> 0011 1111 1001 -> 11111110001

Pentru mai multe informaii despre bazele de numeraie i conversii accesai website-ul:
http://www.purplemath.com/modules/numbbase.htm.

Page 19 of 19

S-ar putea să vă placă și