Curs Laborator Arhitectura Pc

  • June 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Curs Laborator Arhitectura Pc as PDF for free.

More details

  • Words: 2,384
  • Pages: 8
Arhitectura calculatoarelor

Laborator 1: Introducere in ASM 1.1. 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 14 : 2 = 7, rest 0 7 : 2 = 3, rest 1 3 : 2 = 1, rest 1

29(10) = ?(2)

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. FB2C16 = 12 * 160 + 2 * 161 + 11 * 162 + 15 * 163 = 12 + 32 + 2816 + 61440 = 64300

Arhitectura calculatoarelor

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

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

0

1

2

3

4

5

6

7

8

9

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. - FB2C16 = 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 reprezentării în calculator a unui număr mare de caractere (cifre, litere, caractere speciale) a condus la apariţia şi utilizarea unor coduri. Deoarece în calculatorul electronic orice informaţie este reprezentată în sistemul binar, apare necesitatea translatării informaţiei externe, accesibilă omului, în informaţie internă, accesibilă calculatorului, şi invers. Această translatare se realizează prin operaţia de codificare. Codurile în care sunt reprezentate numai numere se numesc coduri numerice. Codurile în care sunt reprezentate numere, litere şi alte semne speciale se numesc coduri alfanumerice. Dintre codurile alfanumerice, cele mai reprezentative sunt codurile ASCII şi EBCDIC. În ambele cazuri se foloseşte octetul (opt poziţii binare) pentru reprezentarea unui caracter. ASCII (American Standard Cod for Information Interchange) este un cod ce utilizează 7 cifre binare cu care se pot realiza 27=128 de combinaţii. Pentru a asigura protecţia informaţiei în procesul de transmitere a acesteia, se adaugă structurii codului din 7 biţi o poziţie pentru controlul de imparitate. EBCDIC (Extended Binary Coded Decimal Interchange Code) este un cod ce utilizează 8 cifre binare cu care se pot realiza 28=256 de combinaţii. O parte din combinaţii sunt utilizate pentru codificarea anumitor comenzi. Fiecare caracter se reprezintă prin două simboluri din sistemul de numeraţie hexazecimal.

Arhitectura calculatoarelor

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 DS Data Segment Co de Seg me nt1 6bit nu mb er tha t poi nts to the act ive

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

Arhitectura calculatoarelor

co deseg me nt 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

Poi nte r Re gis ter s IP SPI nst ruc tio n Poi nte r16 bit nu mb er tha t Stack Pointer poi nts to the off set of the ne xt ins tru cti on

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

Ge ne ral Pu rpo se

Arhitectura calculatoarelor

Re gis ter s AX BX Acc um ula tor Re gis ter mo stl y use d Base Register for cal cul ati ons an d for inp ut/ out put

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

Ind ex Re gis ter s SI DIS Destination Index our ce Ind ex use d by stri ng op era tio

used by string operations as destination

Arhitectura calculatoarelor

ns as sou rce

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 nº

Description

OF

Overflow Flag

11

indicates an overflow when set

DF

Direction Flag

10

used for string operations to check direction

IF

Interrupt Flag

9

if set, interrupt are enabled, else disabled

TF

Trap Flag

8

if set, CPU can work in single step mode

SF

Sign Flag

7

if set, resulting number of calculation is negative

ZF

Zero Flag

6

if set, resulting number of calculation is zero

AF

Auxiliary Carry

4

some sort of second carry flag

PF

Parity Flag

2

indicates even or odd parity

CF

Carry Flag

0

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 lea int

ah,09 dx,message 21h

mov ax,4c00h int 21h main endp end main

Arhitectura calculatoarelor

Pentru 1. 2. 3. 4. 5. 6. 7.

a asambla acest cod, urmati pasii de mai jos: De la meniul start, alegeti optiunea run si tastati cmd Navigati spre folderul unde se regaseste programul tasm (ex.: cd c:\asm) Scrieti in consola edit lab1.asm Scrieti codul si apoi salvati fisierul Scrieti in consola: tasm /zi /la lab1.asm Scrieti in consola tlink lab1.obj 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.

Arhitectura calculatoarelor

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 .model tiny Aplicatia2 include io.h

; Fisierul IO.H definit in lucrarea Musca "Programare in limbaj de asamblare" Afisarea de linii color ; peGh. ecran, in-mod 256 culori. ; 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: mov rep

cx,320 stosb

inc dec jnz

al bx iar

mov ah,08h int 21h mov ax,03h int 10h mov ah,4ch int 21h sursa si precizarea pt.

; ; ; ; ; ; ; ;

Revenire in bucla Numarul de repetari ale lui STOSB Memoreaza in mod repetat (de 320 ori) continutul lui AL la adresa ES:DI din memoria video Incrementeaza numarul culorii Decrementeaza continutul lui BX Salt daca nu-i rezultat nul in BX

; Functia de citire fara ; ecou de la tastatura ; Functia de citire a ; pozitiei si dimensiunii cursorului ; Functia de ; terminare program end start de intrare

; Sfarsit

Related Documents

Arhitectura
June 2020 17
Laborator..
May 2020 15
Arhitectura#
May 2020 45
Laborator I.docx
July 2020 13