QReferate - referate pentru educatia ta.
Referatele noastre - sursa ta de inspiratie! Referate oferite gratuit, lucrari si proiecte cu imagini si grafice. Fiecare referat, proiect sau comentariu il poti downloada rapid si il poti folosi pentru temele tale de acasa.



AdministratieAlimentatieArta culturaAsistenta socialaAstronomie
BiologieChimieComunicareConstructiiCosmetica
DesenDiverseDreptEconomieEngleza
FilozofieFizicaFrancezaGeografieGermana
InformaticaIstorieLatinaManagementMarketing
MatematicaMecanicaMedicinaPedagogiePsihologie
RomanaStiinte politiceTransporturiTurism
Esti aici: Qreferat » Referate informatica

Introducere in ASM



Introducere in ASM



SISTEME DE NUMERATIE


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.

1.3. Utilizarea memoriei

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).


1.3. Registrii procesorului


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:


Segment Registers

CS

Code Segment

16-bit number that points to the active code-segment

DS

Data Segment

16-bit number that points to the active data-segment

SS

Stack Segment

16-bit number that points to the active stack-segment

ES

Extra Segment

16-bit number that points to the active extra-segment

Pointer Registers

IP

Instruction Pointer

16-bit number that points to the offset of the next instruction

SP

Stack Pointer

16-bit number that points to the offset that the stack is using

BP

Base Pointer

used to pass data to and from the stack

General-Purpose Registers

AX

Accumulator Register

mostly used for calculations and for input/output

BX

Base Register

Only register that can be used as an index

CX

Count Register

register used for the loop instruction

DX

Data Register

input/output and used by multiply and divide

Index Registers

SI

Source Index

used by string operations as source

DI

Destination Index

used by string operations as destination



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)).

Flags Register

Abr.

Name

bit ns

Description

OF

Overflow Flag


indicates an overflow when set

DF

Direction Flag


used for string operations to check direction

IF

Interrupt Flag


if set, interrupt are enabled, else disabled

TF

Trap Flag


if set, CPU can work in single step mode

SF

Sign Flag


if set, resulting number of calculation is negative

ZF

Zero Flag


if set, resulting number of calculation is zero

AF

Auxiliary Carry


some sort of second carry flag

PF

Parity Flag


indicates even or odd parity

CF

Carry Flag


contains the left-most bit after calculations



1.4. "Hello world"


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:

  1. De la meniul start, alegeti optiunea run si tastati cmd
  2. Navigati spre folderul unde se regaseste programul tasm  (ex.: cd c:asm)
  3. Scrieti in consola edit lab1.asm
  4. Scrieti codul si apoi salvati fisierul
  5. Scrieti in consola: tasm /zi /la lab1.asm
  6. Scrieti in consola tlink lab1.obj
  7. Rulati fisierul lab1.exe


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

Nu se poate descarca referatul
Acest referat nu se poate descarca

E posibil sa te intereseze alte referate despre:


Copyright © 2024 - Toate drepturile rezervate QReferat.com Folositi referatele, proiectele sau lucrarile afisate ca sursa de inspiratie. Va recomandam sa nu copiati textul, ci sa compuneti propriul referat pe baza referatelor de pe site.
{ Home } { Contact } { Termeni si conditii }