1 / 16

Programarea in limbaj de asamblare

Programarea in limbaj de asamblare. Setul de instructiuni ISA x86 (continuare) Exemple de programe. Instructiuni de intrerupere. INT sintaxa: INT <nivel_intrerupere> <nivel_intrerupere> = 0 ..255 semnificatia: apelul prin program a unei rutine de intrerupere (intreruperi software)

varen
Download Presentation

Programarea 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. Programarea in limbaj de asamblare Setul de instructiuni ISA x86 (continuare) Exemple de programe

  2. Instructiuni de intrerupere • INT • sintaxa: INT <nivel_intrerupere> <nivel_intrerupere> = 0 ..255 • semnificatia: apelul prin program a unei rutine de intrerupere (intreruperi software) • adresa rutinei - pastrata intr-o tabela de intreruperi • tabela contine 256 intrari (adrese) pt. cele 256 de nivele de intrerupere acceptate de un procesor x86 • INT - forma speciala de instructiune “CALL”

  3. Instructiuni de intrerupere • mod de executie: • se salveaza pe stiva registrul de stare program (indicatorii de conditie) • se salveaza pe stiva CS si IP • se copiaza in CS:IP adresa rutinei de intrerupere din tabela de intreruperi de la adresa: <nivel_intrerupere>*4 • adresa rutinei poate fi modificata in timpul executiei programului - legare dinamica • este o modalitate de acces la resursele (procedurile) sistemului de operare

  4. Instructiuni de intrerupere Memoria principala Program INT n Rutina de intrerupere Tabela de intreruperi *4 <adr_seg>:<adr_offset> (256 intrari) 0000

  5. Instructiuni de intrerupere • INTO - interrupt on overflow • se genereaza intrerupere la depasire de capacitate if(OF=1) INT 4 • INT 3 - breackpoint • intrerupere folosita pentru scopuri de depanare • are cod pe 1 octet • programul de depanare (CodView, Debug, TD) insereaza acest cod in locul de oprire temporara a programului (rulare cu breackpoint)

  6. Instructiuni de intrerupere • BOUND • sintaxa: BOUND <reg>, <mem> • semnificatia: - verificare incadrarea in limite if (reg < [mem]) or (reg > [mem+sizeof(reg)]) then int 5 • se poate inlocui cu: cmp reg, LowerBound jl OutOfBounds cmp reg, UpperBound jg OutOfBounds • probleme la IBM-PC - INT 5 - PrintScreen

  7. Instructiuni de intrerupere • IRET • semnificatia: revenire din rutina de intrerupere • ce face: • descarca de pe stiva CS:IP • descarca de pe stiva indicatorii de conditie • continua cu instructiunea urmatoare celei in care s-a produs intreruperea sau cu instructiunea de dupa instructiunea care a provocat intreruperea

  8. Instructiuni de intrerupere • Utilizarea instructiunilor de intrerupere • pentru simularea unor intreruperi hardware • pentru apelul unor rutine in functie de context (legarea dinamica) • pentru apelul unor functii (servicii) ale sistemului de operare: • “Intreruperi BIOS” - ex: • INT 10H - functii video (de afisare) • INT 13H - functii de acces la memoria externa (HDD, FDD) • INT 16H - functii de tastatura • Apeluri sistem - INT 21H

  9. ;Apeluri de intreruperi BIOS ;citeste un caracter de la tastatura MOV AH,0 INT 16H ; in Al va fi codul caracterului citit ;scrierea unui caracter pe ecran ; in mod TTY MOV AH, 0EH MOV AL, ‘X’ INT 10H ;Apeluri sistem (INT 21H) ;terminarea programului utilizator MOV AX, 4C00H INT 21H ;Scrierea unui caracter pe ecran MOV AH, 02 MOV DL,’X’ INT 21H Exemple de apeluri de intreruperi

  10. Instructiuni pt. indicatorii de conditie • CLC, STC, CMC • semnificatia: • CLC - clear carry - CF=0 • STC - set carry - CF=1 • CMC - complement carry - CF=NOT CF • CLD, STD • semnificatia: • controleaza directia de avans pt. instructiunile pe siruri: • DF=0 - incrementare registre index • DF=1 - decrementare registre index • CLD - clear direction - DF=0 • STD - set direction - DF=1

  11. Instructiuni pt. indicatorii de conditie • CLI, STI • semnificatia: permit validarea si invalidarea intreruperilor mascabile • CLI - clear IF - IF=0 - invalidare intreruperi mascabile • STI - set IF - IF=1 - validare intreruperi mascabile • Altele: • NOP - no operation - instructiune de temporizare • (este de fapt xchg ax,ax care nu are nici un efect) • HLT - halt - oprirea procesorului • HIT - halt until interrupt or reset -oprirea temporara a procesorului

  12. Alte instructiuni • LOCK • blocarea accesului pe magistrala pe durata instructiunii urmatoare • folosit in sistemele multiprocesor, pentru accesul la resurse partajate • CPUID • identificare procesor • pt. Pentium in prealabil in EAX se pune 1 • RDTSC - (numai la Pentium) • read real-time stamp counter • EDX:EAX = contor de cicluri (64 biti)

  13. ; x=5 x-intreg x dw ? mov x, 5 ; x=y x dw ? y dw 1234h mov ax, y mov x,ax ;x=y[5] x dw ? y dw 1,2,3,20h,30h mov ax,y+2*5 mov x,ax ;x=student.bursa x dd ? student db 10 dup(?) ; nume db 10 dup(?) ; prenume dd 600000 mov eax, dword ptr student+20 mov x, eax ; x=x+1 x=x-1 x=0 inc x dec x xor ax,ax mov x,ax; Exemple de programe - instructiuni de transfer

  14. ;operatii pe siruri/vectori vec1 db ‘sir de caractere’ l_vect equ $-vec1 vec2 db l_vec1 dup(?) mov si, offset vec1 mov di, offset vec2 mov cx, l_vec1 cld rep movsb ; vec2[i]=vec1[j] vec1 dw 1,3,22,144,13 l_vec1 equ $-vec1 vec2 dw l_vec1 dup(?) mov di,i shl di mov si,j shl si mov ax, vec1[si] mov vec2[di] ;altfel mov ax,vec1[si*2] mov vec2[di*2],ax Exemple de programe - instructiuni de transfer

  15. ; filtrarea imaginilor ; 1 2 1 ; 2 4 2 *1/16 ; 1 2 1 imag db 100h dup( 100h dup(?)) E equ -1 V equ +1 S equ 100h N equ -100h NE equ -101h NV equ -0ffh SE equ 0ffh SV equ 101h mov si, offset imag+100h+1 mov dx, 100h-2 et1:mov cx, 100h-2 et: mov al, 0 mov ah, [si] shl ah,2 add al,ah mov ah, [si+E] shl ah,2 inc si add al,ah inc si ....... dec dx shr al,4 jnz et1 loop et Exemple de programe - operatii pe tablouri bidimensionale

  16. ; x=y+z mov ax,y add x,ax ; y=y+x intregi foarte lungi x dd 12345678h, 98765432h y dd 55555555h, 11111111h mov eax,x add y,eax mov eax,x+4 adc y+4,eax ;operatii in BCD impachetat mov al, x add al, y daa ; Exemple de programe -operatii aritmetice

More Related