Administratie | Alimentatie | Arta cultura | Asistenta sociala | Astronomie |
Biologie | Chimie | Comunicare | Constructii | Cosmetica |
Desen | Diverse | Drept | Economie | Engleza |
Filozofie | Fizica | Franceza | Geografie | Germana |
Informatica | Istorie | Latina | Management | Marketing |
Matematica | Mecanica | Medicina | Pedagogie | Psihologie |
Romana | Stiinte politice | Transporturi | Turism |
Necesitatea reprezentarii caracterelor numerice s-a materializat in aparitia si existenta simultana a unor diferite sisteme de numeratie.
Un sistem de numeratie este format din totalitatea regulilor de reprezentare a numerelor cu ajutorul unor simboluri numite cifre. Sistemele de numeratie sunt de doua feluri: pozitionale si nepozitionale.
In sistemele de calcul se folosesc in special sisteme de numeratie pozitionale, datorita simplitatii de reprezentare si de efectuare a calculelor aritmetice. Acestea se definesc ca sisteme de numeratie, in valoarea unei cifre din cadrul unui numar este determinata de pozitia ei in cadrul numarului. Fiecare sistem de numeratie pozitional contine un alfabet format din cifre si litere al caror numar este egal cu baza sistemului respectiv.
Sistemul de numeratie pozitional poate fi:
- binar - este format numai din doua cifre, 0 si 1.
- octal - format din opt cifre:0,1,2,3,4,5,6,7.
- zecimal - format din zece cifre: 0,1,2,3,4,5,6,7,8,9.
- hexazecimal - sunt utilizate simbolurile 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F.
Conversia numerelor din sistemul de numeratie zecimal intr-un alt sistem se realizeaza prin efectuarea unui sir de impartiri succesive la valoarea bazei sistemului in care se doreste transformarea.
Realizarea a 4 siruri de transformari a unui numar dintr-un sistem de numeratie in celelalte sisteme de numeratie
Transformarea din sistemul de numeratie zecimal in sistemul de numeratie binar:
29 : 2 = 14, rest 1
7, rest 0
7 : 2 = 3, rest 1
3 : 2 = 1, rest 1
Se preia rezultatul ultimei impartiri (3 : 2 = 1 ) si restul sirului de impartiri in ordine inversa (rest 1, rest 1, rest 0, rest 1).
29(10) = 11101(2)
Transformarea din sistemul de numeratie zecimal in sistemul de numeratie octal:
29(10) = ?(8)
29 : 8 = 3, rest 5
Se preia rezultatul ultimei impartiri (29 : 8 = 3 ) si restul sirului de impartiri in ordine inversa (rest 5).
29(10) = 35(8)
Sistemul hexazecimal foloseste cifrele de la 0 la 9 si literele de la A la F (16 caractere), A fiind echivalentul numarului 10 (in sistem zecimal), B = 11, C=12 samd. Valoarea se poate calcula folosind puterile lui 16.
FB2C
Sistemul hexazecimal este utilizat deoarece reprezentarea numerelor poate fi facuta cel mai restrans (FB2C ocupa mai putin spatiu decat 64300).
Transformarea din sistemul de numeratie zecimal in sistemul de numeratie hexazecimal:
29(10) = ?(16)
29 : 16 = 1, rest 13
Baza 10 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Baza 16 |
|
|
|
|
|
|
|
|
|
|
A |
B |
C |
D |
E |
F |
Se preia rezultatul ultimei impartiri (29 : 16 = 1 ) si se urmareste unde se gaseste nr. 13 in sistemul de numeratie hexazecimal.
29(10) = 1D(16)
Intelegerea limbajului assembler se bazeaza pe intelegerea sistemelor numerice. Daca in general oamenii utilizeaza sistemul decimal, calculatorul utilizeaza sistemul binar (cu 2 cifre - 0 si 1) iar in anumite cazuri este mai utila folosirea sistemului hexazecimal (16 caractere, de la 0 la 9 si de la A la F).
Note:
Numerele ilustrate in baza 10 pot fi scrise fara indicele 10.
Numerele in baza 16 pot fi scrise cu litera h dupa ele. - FB2C = FB2Ch
Desi este evident ca FB2C este un nr. hexazecimal, nu intotdeauna se intampla asa. 64 poate fi in baza 8, in baza 10 sau in baza 16; 10 poate fi in baza 2, baza 8, baza 10 sau baza 16 s.am.d.
1.2 CODURI DE REPREZENTARE A DATELOR
Necesitatea reprezentarii in calculator a unui numar mare de caractere (cifre, litere, caractere speciale) a condus la aparitia si utilizarea unor coduri. Deoarece in calculatorul electronic orice informatie este reprezentata in sistemul binar, apare necesitatea translatarii informatiei externe, accesibila omului, in informatie interna, accesibila calculatorului, si invers. Aceasta translatare se realizeaza prin operatia de codificare.
Codurile in care sunt reprezentate numai numere se numesc coduri numerice. Codurile in care sunt reprezentate numere, litere si alte semne speciale se numesc coduri alfanumerice.
Dintre codurile alfanumerice, cele mai reprezentative sunt codurile ASCII si EBCDIC. In ambele cazuri se foloseste octetul (opt pozitii binare) pentru reprezentarea unui caracter.
ASCII (American Standard Cod for Information Interchange) este un cod ce utilizeaza 7 cifre binare cu care se pot realiza 27=128 de combinatii. Pentru a asigura protectia informatiei in procesul de transmitere a acesteia, se adauga structurii codului din 7 biti o pozitie pentru controlul de imparitate.
EBCDIC (Extended Binary Coded Decimal Interchange Code) este un cod ce utilizeaza 8 cifre binare cu care se pot realiza 28=256 de combinatii. O parte din combinatii sunt utilizate pentru codificarea anumitor comenzi. Fiecare caracter se reprezinta prin doua simboluri din sistemul de numeratie hexazecimal.
Cea mai mica unitate a memoriei este bitul. Un bit stocheaza in memoria calculatorului un caracter (1 sau 0).
Unitatea de baza este insa un set de 8 biti ce formeaza un octet (byte). Aceasta este cea mai mica unitate adresabila a memoriei. Bitii dintr-un byte se numeroteaza de la dreapta spre stanga, de la 0 la 7, 0 fiind cel mai putin semnificativ.
Alte grupari comune a octetilor sunt:
word - cuvant: 2 bytes (16 octeti)
double word : 4 bytes, 32 biti
quad word: 8 bytes, 64 biti
paragraph: 16 bytes, 128 biti
Segmentarea memoriei
Procesoarele 8086 divid memoria in segmente. Standardul in DOS este de 64 KB. Segmentele sunt numerotate, numerele lor fiind stocate in registrii de segment (vezi mai jos). Segmentele se pot suprapune, iar pentru a accesa un anumit byte din segmentul respectiv se foloste offset.
Deci adresa 0000:0010 inseamna segmentul 0000h, offset 10h. Adresa reala se calculeaza inmultind segmentul cu 16 si adunand offsetul: 0 * 16 + 16 = 16 (adresa liniara).
Instructiunile cerute de programatorul sau utilizatorul unui calculator sunt executate in unitatea centrala de procesare (CPU). Pentru a asigura viteza de procesare, datele necesare instructiunilor sunt stocate in zone de stocare speciale, numite registrii. Desi viteza de acces la datele din registrii este mai mare decat la datele din memorie, numarul de registrii dintr-un CPU este limitat, astfel ca in registrii se regasesc doar datele utilizate la momentul respectiv.
Procesoarele 8086 au 14 registrii pe 16 biti, dupa cum observati mai jos:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
Regitrii generali pot fi impartiti. AX contine de exemplu AH si AL, unde AH contine byte-ul semnificativ (high byte) din AX si AL contine byte-ul putin semnificsativ (Low byte). La fel vom avea: BH, BL, CH, CL, DL, DH Deci, daca DX contine 1234h, DH va fi 12h si DL va fi 34h. |
In plus, exista registrul FLAG, ce contine 9 biti de stare (pot avea valorile SET (1) sau NOT SET (0)).
|
|
Pentru a ne obisnui cu lucrul in limbaj de asamblare, vom scrie un prim program. Copiati codul de mai jos in notepad si salvati-l cu denumirea lab1.asm in folderul continand programul tasm.
.model small
.stack
.data
message db 'Hello world, I'm learning Assembly !!!', '$'
.code
main proc
mov ax,seg message
mov ds,ax
mov ah,09
lea dx,message
int 21h
mov ax,4c00h
int 21h
main endp
end main
Pentru a asambla acest cod, urmati pasii de mai jos:
Explicatii
.model small : Liniile care incep cu '.' sunt folosite pentru a furniza diferite informatii catre programul de asamblare. In acest caz, ii spunem programului ca avem un cod mic, ce nu necesita multa memorie.
.stack : Alta linie de informare. Segmentul de stiva incepe aici. Stiva este utilizata pentru stocarea datelor temporare. In acest program stiva nu va fi folosita, dar deoarece am asamblat codul intr-un fisier .exe, aceasta linie trebuie sa fie prezenta.
.data : indica inceputul segmentului de date, si sfarsitul segmentului de stiva
.code : indica inceputul segmentului de cod si sfarsitul segmentului de date
main proc : Codul trebuie scris in proceduri, intocmai ca in limbajul C. Aici indicam inceputul unei proceduri numite main. main endp va indica finalul procedurii. Procedurile trebuie sa aiba un start si un end. end main: indica finalul programului. De asemenea indica asamblorului de unde sa inceapa programul, in cazul nostrum procedura main.
message db 'xxxx' : DB inseamna Define Byte. Instructiunea defineste in segmentul de date o serie de bytes. Acestia contin informatia din ghilimele. 'Message' e un nume pentru a identifica acest string.
mov ax, seg message : AX e un registru (vezi mai sus). MOV este o instructiune care muta datele. In acest caz se muta din seg message in ax. Seg message poate fi interpretat ca un numar. Este numarul ce reprezinta segmentul in care este stocat 'message'. Trebuie sa stim acest numar pentru a putea incarca registrul DS, altfel nu vom putea prelua sirul de caractere in memorie. Trebuie deci sa stim unde este localizat acest sir in memorie. Acest numar il preluam in AX.
mov ds,ax : Dupa ce am trecut numarul reprezentand segmentul in care se afla sirul in ax, vom trece aceasta informatie din ax in ds. DS nu poate fi incarcat direct, deci sunt necesare ambele instructiuni.
mov ah, 09 : Din nou MOV. In acest caz, se incarca constanta 09 in AH (parte din ax).
lea dx, message : LEA = Load Efective Address. Aceasta instructiune stocheaza offsetul din segmentul unde avem mesajul in registrul DX. Dupa cum am precizat, pentru adresa din memorie avem nevoie si de segment si de offset. Deci avem acum DS:DX.
int 21h : Aceasta instructiune cauzeaza un interrupt. Procesorul apeleaza o rutina in memorie, iar 21h ii spune ce rutina, in acest caz o rutina DOS. INT este o instructiune foarte importanta despre care vom mai discuta. Deocamdata ganditi-va ca apeleaza o procedura de DOS. Procedura se uita in AH sa vada ce are de facut si va gasi codul 9, ceea ce indica afisarea unui string pe ecran.
mov ax, 4c00h : Incarca registrul AX cu valoarea 4c00h
int 21h : Din nou INT. De data aceasta AH va contine 4Ch (AX = 4C00 -> AH=4Ch si AL=00h), iar procedura DOS va interpreta aceasta ca "iesire program". Valoare din AL este utilizata ca un "cod de iesire" 00h inseamna 'fara eroare'
Tasm este Turbo assambler - asamblor al firmei Borland.
Pentru o lista de comenzi posibile tastati tasm /? In mod consola
Tasm lab1.asm asambleaza fisierul de cod lab1.asm si genereaza fisierul lab1.obj. optiunea /zi afiseaza toate informatiile de debug (utile in cazul unor erori de sintaxa).
Tlink va crea fisierul executabil. Atentie! Tlink se aplica pe fisierul .OBJ si nu pe .ASM
Aplicatia2
Afisarea de linii color pe ecran, in mod 256 culori.
.model tiny include io.h ; Fisierul IO.H definit in lucrarea ; Gh. Musca - 'Programare in limbaj de asamblare' ; Editura Teora, Bucuresti 1997, pagina 306. .stack .data .code start: ; Definirea punctului de intrare in program init_ds_es ; Initializarea registrelor DS si ES mov ax,13h ; Setarea modului video, AH=00h serviciul de ; selectare a modului video, AL=13h modul 13h int 10h ; Lansarea in lucru a serviciilor Video BIOS mov ax,09fc0h ; Adresa zonei tampon video mov es,ax ; Incarca registrul ES cu care se lucreaza mov bx,200 ; Stabilire baza de desenare mov al,36 ; Stabilirea culorii initiale iar: ; Revenire in bucla mov cx,320 ; Numarul de repetari ale lui STOSB rep stosb ; Memoreaza in mod repetat (de 320 ori) ; continutul lui AL la adresa ; ES:DI din memoria video inc al ; Incrementeaza numarul culorii dec bx ; Decrementeaza continutul lui BX jnz iar ; Salt daca nu-i rezultat nul in BX mov ah,08h ; Functia de citire fara int 21h ; ecou de la tastatura mov ax,03h ; Functia de citire a int 10h ; pozitiei si dimensiunii cursorului mov ah,4ch ; Functia de int 21h ; terminare program end start ; Sfarsit sursa si precizarea pt. de intrare |
Acest document nu se poate descarca
E posibil sa te intereseze alte documente despre: |
Copyright © 2024 - Toate drepturile rezervate QReferat.com | Folositi documentele afisate ca sursa de inspiratie. Va recomandam sa nu copiati textul, ci sa compuneti propriul document pe baza informatiilor de pe site. { Home } { Contact } { Termeni si conditii } |
Documente similare:
|
ComentariiCaracterizari
|
Cauta document |