1 / 23

Programare in limbaj de asamblare

Programare in limbaj de asamblare. Tehnici de programare. Accesul la resursele unui sistem de calcul. resursele unui sistem de calcul: hardware: registre, indicatoare de conditie (flaguri) memorie, interfete si dispozitivede intrare/iesire, sistemul de intreruperi,

tevy
Download Presentation

Programare in limbaj de asamblare

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programare in limbaj de asamblare Tehnici de programare

  2. Accesul la resursele unui sistem de calcul • resursele unui sistem de calcul: • hardware: • registre, indicatoare de conditie (flaguri) • memorie, • interfete si dispozitivede intrare/iesire, • sistemul de intreruperi, • ceas de timp real, alte timere • software: • sistemul de fisiere • gestiunea taskurilor • gestiunea comunicatiei si servicii de sincronizare, etc.

  3. Nivele de acces la resurse Rutine de intrerupere Int 10h, 13hh, 16h .... Comenzi specifice Functii predefinite Functii sistem (Int 21h) Aplicatii LNI +BIB. DOS BIOS M H Instructiuni In/Out

  4. data segment text db “hello world” ltext equ $-text port equ 378h port_c equ 37ah port_s equ 379h strob equ 00000001b busy equ 10000000b ack equ 01000000b cmd_init equ 00000001b data ends code segment assume cs: code, ds: data start: mov ax, data mov ds, ax mov si, offset text mov cx, ltext mov dx, port_c mov al, cmd_init out dx, al mov dx, port_s Accesul la nivelul masinii hardwareexemplu: tiparirea unui text la imprimanta

  5. et1: in al, dx test al, busy; activ pe 1 jz et1 mov al,[si] inc si mov dx, port out dx, al mov dx,port_c mov al, cmd_init ; se forteaza 0 pe strob and al, NOT strob out dx, al mov dx, port_s et2: in al, dx test al, ack ; activ pe 0 jnz et2 mov dx, port_c mov al,cmd_init ; se forteaza 1 pe strob or al, stb out dx, al mov dx, port_s loop et1 tiparirea unui text la imprimanta (continuare)

  6. mov ax, 4c00h int 21h code ends end start tiparirea unui text la imprimanta (continuare)

  7. Accesul la resurse prin intreruperi BIOS • doua tipuri de intreruperi: • intreruperi hardware - generate de interfete la aparitia unui eveniment (ex: receptia unui caracter, citirea unui sector, eroare de transmisie, etc.) • intreruperi software - “porti de acces” la resurse prin rutine (functii) BIOS • fiecare tip de resursa (interfata) are rezervat un nivel de intrerupere • se apeleaza prin instructiunea INT n

  8. Accesul la resurse prin intreruperi BIOS • exemple de intreruperi BIOS (software) • INT 10h - functii de ecran • INT 13H - functii FDD, HDD • INT 16H - functii de tastatura • INT 14H - functii de comunicatie pe canalul serial • INT 17H - functii de tiparire • apelul functiilor: • se seteaza parametrii de apel in registrii procesorului • se executa instructiunea de intrerupere corespunzatoare • la revenirea din rutina se testeaza CF (0 - OK, 1-eroare)

  9. data segment buf db 512 dup(?) data ends code segment assume cs:code, ds: data start: mov ax, data mov ds, ax mov es, ax ;initializare parametrii de apel mov ah, 02 ; functia de citire mov al, 1 ; nr. de sectoare mov cl, 5 ; nr sector mov ch, 0 ; nr. pista mov dl, 0 ; nr. disc mov dh, 0 ; nr. cap mov bx, offset buf int 13h jc err .... err: ; cod pt. eroare code ends end start Accesul la resurse prin intreruperi BIOSexemplu: citirea unui sector de pe disc

  10. Accesul la resurse prin “apeluri sistem” (system calls) • se folosesc concepte mai abstracte: • fisier - pt. accesul la dispozitivele de stocare • canal - pt. dispozitivele de transmisie a datelor • dispozitiv standard de intrare • dispozitiv standard de iesire • modul de acces: • se seteaza anumiti parametri in registrele procesorului • se construiesc anumite structuri de date pt. acces (handler) • se apeleaza intreruperea INT 21h • se testeaza corectitudinea efectuarii operatiei

  11. Exemple de functii sistem: • 01 - citirea tastaturii cu ecou • 02 - afisarea unui caracter • 05 - tiparirea unui caracter • 08 - citirea tastaturii fara ecou • 14h - citirea secventiala cu FCB • 15h - scrierea secventiala cu FCB • 3fh - citirea unui fisier • 40h - scrierea unui fisier • 31h - revenirea in procesul parinte cu pastrarea alocarii memoriei • 4ch - revenirea in sistemul de operare

  12. ; tiparirea unui caracter mov al, “x” mov ah, 05 int 21h ;citirea unui caracter de la ; disp. de intrare standard mov ah, 01 int 21h ; in al va fi caracterul citit ; iesirea dintr-un proces cu ;pastrarea alocarii memoriei mov ah, 31h mov al, cod_retur mov dx, dimensiune int 21h ;dimensiunea memoriei rezervate se da in paragrafe de 16 octeti Accesul la resurse prin “apeluri sistem” (system calls) exemplu:

  13. Redirectarea unor intreruperi BIOS • obiectivul: • rescrierea unor functii ale sistemului de operare, referitor la o anumita resursa • mod de realizare: • se inlocuieste in tabela de intreruperi adresa rutinei vechi cu adresa noii rutine; la terminarea aplicatiei se reface vechea adresa • noua rutina va contine noul “driver” al resursei

  14. VECT DW2 DUP(?); aici se salvează vechiul vector de ; întrerupere ;initializare …….. MOV AH, 35h ; 35h-funcţie sistem pentru citirea ;vectorului de întrerupere MOV AL, n ; n – nivelul de întrerupere redirectat INT 21h ;apelul funcţiei sistem; funcţia returnează ;în ES:BX adresa rutinei de la nivelul n MOV VECT, BX ; salvare adresă offset MOV BX, ES MOV VECT+2, BX ; salvare adresă segment MOV AX, SEG RUT_INT MOV DS, AX ;DS <- adresa de segment a noii rutine de ; tratare a întreruperii

  15. MOV DX, offset RUT_INT ; DX <- adresa de offset a noii ; rutine de întrerupere MOV AH, 25h ;25h - funcţia de scriere vector; ; în DS:DX se pune adresa rutinei de întrer. MOV AL,n ;n – nivel de întrerupere INT 21h ;apelul funcţiei sistem ………. ; program ……… INT n ……

  16. ; sfîrşit program MOV AX, VECT+2 ; refacerea adresei MOV DS, AX MOV DX, VECT MOV AH, 25h ; funcţia de scriere vector MOV AL,n ; n – nivel întrerupere INT 21h ; înscrierea vechiului vector în ;tabela de intreruperi …….

  17. ;rutina de tratare a întreruperii RUT_INT PROC FAR ; noua rutina de tratare a intreruperii PUSH r ; salvarea registrelor utilizate în cadrul ; rutinei (r = AX, BX, ….) STI ; validare întrerupere ……….. ; corpul rutinei ……….. ; sfîrşitul rutinei POP r ; refacere registre salvate IRET RUT_INT ENDP

  18. Executia periodica unor operatii (intreruperea 1CH) • Implementare: prin ceasul de timp-real • contor (timer) care genereaza periodic intreruperi - la fiecare 18,2ms • rutina de tratare a intreruperii contine instructiunea INT 1CH • rutina de tratare a intreruperii 1CH contine o singura instructiune : IRET - revenire din rutina • prin redirectarea intreruperii 1CH catre o anumita rutina, aceasta va fi apelata la fiecare intrerupere a ceasului de timp real • rutina trebuie sa fie rezidenta in memorie

  19. Sfaturi de scriere a rutinelor • parametrii de apel se transmit prin: • registrii procesorului (de preferat) • prin stiva (numai daca se combina cu module scrise in limbaje de nivel inalt); Bp se foloseste pt. adresarea parametrilor de pe stiva • trebuie sa se precizeze modul de transmitere a parametrilor printr-o caseta de comentar ;nume functie ; descrierea operatiei efectuate ; Intrari: ... ; Iesiri: ... ; registre distruse/afectate

  20. Sfaturi de scriere a rutinelor • continutul registrelor nu trebuie sa fie afectat de executia rutinei; • toate registrele folosite in rutina vor fi salvate pe stiva si vor fi refacute la sfarsitul rutinei • refacerea registrelor este obligatorie si la iesirea in caz de eroare • exceptie: registrele care contin parametrii de iesire • majoritatea functiilor sistem nu sunt reentrante • nu pot fi apelate dinnou inainte de terminare

  21. Reguli de scriere a procedurilor rezidente (TSR - Terminate and Stay Resident) • Procedura rezidenta: • care se activeaza la aparitia unor evenimente (ex: intreruperi, apasarea unor combinatii de litere, etc.) • se foloseste functia sistem 31h (int 21h) pt. a specifica spatiul care ramane rezident • Reguli: • la apelul unei rutine rezidente nu trebuie sa afecteze starea procesorului si a taskului intrerupt • se va evita apelarea unor functii sistem pt. a nu produce apelarea repetata a acestora

  22. Reguli de scriere a procedurilor rezidente • frecventa maxima de apel a procedurii rezidente trebuie determinata astfel incat timpul de executie a acesteia sa nu consume intregul timp al procesorului • la apelul si la revenirea din procedura rezidenta se va face o comutare de context: vor fi salvate si apoi refacute informatiile legate de taskul intrerupt: • continutul registrilor • informatii sistem: • prefixul segmentului de program (PSP) • zona de transfer a discului (DTA) • contextul ecranului • se folosesc functii sistem pt. determinarea ac. inf.

  23. Reguli de scriere a procedurilor rezidente • pentru activarea procedurilor rezidente se pot folosi: • intreruperea de ceas de timp-real (int 8h) • intreruperea hard de tastatura (int 9h) • intreruperea soft de tastatura (int 16h)

More Related