Programarea in limbaj de asamblare - PowerPoint PPT Presentation

About This Presentation
Title:

Programarea in limbaj de asamblare

Description:

Programarea in limbaj de asamblare Setul de instructiuni ISA x86 (continuare) Exemple de programe – PowerPoint PPT presentation

Number of Views:44
Avg rating:3.0/5.0
Slides: 19
Provided by: gyuszi
Category:

less

Transcript and Presenter's Notes

Title: Programarea in limbaj de asamblare


1
Programarea in limbaj de asamblare
  • Setul de instructiuni ISA x86
  • (continuare)
  • Exemple de programe

2
Instructiuni de intrerupere
  • INT
  • sintaxa INT ltnivel_intreruperegt
  • ltnivel_intreruperegt 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 CSIP adresa rutinei de intrerupere
    din tabela de intreruperi de la adresa
  • ltnivel_intreruperegt4
  • 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
ltadr_seggtltadr_offsetgt
(256 intrari)
0000
5
Instructiuni de intrerupere
  • INTO - interrupt on overflow
  • se genereaza intrerupere la depasire de
    capacitate
  • if(OF1) 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
  • IRET
  • semnificatia revenire din rutina de intrerupere
  • ce face
  • descarca de pe stiva CSIP
  • 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

7
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

8
Exemple de apeluri de intreruperi
  • 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

9
Instructiuni pt. indicatorii de conditie
  • CLC, STC, CMC
  • semnificatia
  • CLC - clear carry - CF0
  • STC - set carry - CF1
  • CMC - complement carry - CFNOT CF
  • CLD, STD
  • semnificatia
  • controleaza directia de avans pt. instructiunile
    pe siruri
  • DF0 - incrementare registre index
  • DF1 - decrementare registre index
  • CLD - clear direction - DF0
  • STD - set direction - DF1

10
Instructiuni pt. indicatorii de conditie
  • CLI, STI
  • semnificatia permit validarea si invalidarea
    intreruperilor mascabile
  • CLI - clear IF - IF0 - invalidare intreruperi
    mascabile
  • STI - set IF - IF1 - 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

11
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
  • EDXEAX contor de cicluri (64 biti)

12
Exemple de programe - instructiuni de transfer
  • x5 x-intreg
  • x dw ?
  • mov x, 5
  • xy
  • x dw ?
  • y dw 1234h
  • mov ax, y
  • mov x,ax
  • xy5
  • x dw ?
  • y dw 1,2,3,20h,30h
  • mov ax,y25
  • mov x,ax
  • xstudent.bursa
  • x dd ?
  • student db 10 dup(?) nume
  • db 10 dup(?) prenume
  • dd 600000
  • mov eax, dword ptr student20
  • mov x, eax
  • xx1 xx-1 x0
  • inc x
  • dec x
  • xor ax,ax
  • mov x,ax

13
Exemple de programe - instructiuni de transfer
  • 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
  • vec2ivec1j
  • 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, vec1si
  • mov vec2di
  • altfel
  • mov ax,vec1si2
  • mov vec2di2,ax

14
Exemple de programe - operatii pe tablouri
bidimensionale
  • 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 -0ffh
  • NV equ -101h
  • SE equ 101h
  • SV equ 0ffhh
  • mov si, offset imag100h1
  • mov dx, 100h-2
  • et1mov cx, 100h-2
  • et mov al, 0
  • mov ah, si
  • shl ah,2
  • add al,ah
  • mov ah, siE
  • shl ah,2 inc si
  • add al,ah inc si
  • ....... dec dx
  • shr al,4 jnz et1
  • loop et

15
Exemple de programe -operatii aritmetice
  • xyz
  • mov ax,y
  • add x,ax
  • yyx intregi foarte lungi
  • x dd 12345678h, 98765432h
  • y dd 55555555h, 11111111h
  • mov eax,x
  • add y,eax
  • mov eax,x4
  • adc y4,eax
  • operatii in BCD impachetat
  • mov al, x
  • add al, y
  • daa

16
Exemple de operatii logice
  • sa se converteasca literele mici in litere mari
  • sir db Acesta este un text 123!
  • l_sir equ -sir
  • ..
  • lea si, sir
  • mov cx, l_sir
  • et mov al,si ldsb ce ar implica?
  • cmp al,a a61h
  • jb sf
  • cmp al, z
  • ja sf
  • and al,11011111B sub al,20h
  • sf mov si,al stosb ce ar implica ?
  • inc si
  • loop et
  • numarul de biti de 1 intr-un cuvant
  • cuvant dw 055aah
  • mov ax, cuvant
  • mov cx, 16
  • xor dl,dl
  • et ror ax, 1
  • jnc skip
  • inc dl
  • skip loop et
  • numarati bitii de 0

17
Exemple
  • Testarea unei zone de memorie
  • Data1 segment
  • Var db 10000h DUP(?)
  • Data1 ends
  • .
  • mov ax, data1
  • mov ds,ax
  • mov ax, 0
  • call test
  • jc err
  • mov ax, 5555h
  • call test
  • jc err
  • mov ax, 0AAAAh
  • .
  • mov ax, 0ffffh
  • ..
  • test proc
  • xor si
  • xor cx 8000h2
  • et mov si, ax
  • scasw
  • jnz sf
  • loop et
  • clc
  • ret
  • sf stc
  • ret
  • test endp

18
Exemplu de citire de la o interfata
  • buf DB 100 DUP(?)
  • lbuf EQU -buf lungimea bufferului
  • adrport EQU 300h adresa port de intrare
  • adrstare EQU 301h adresa registru de stare
  • masca EQU 01h masca pentru bitul D0
  • timeout EQU 100h limita de timp
  • .
  • initializare transfer
  • mov si, offset buf initializare poantor
    memorie
  • mov dx, adrport initializare adresa port
  • mov cx, lbuf initializare contor
  • .
  • transfer de date
  • et1 mov bx, timeout initializare limita de timp
    pt. asteptare
  • inc dx adresa registru de stare
  • et2 in al, dx citire port de intrare
  • and al, masca testare bit de stare
  • jnz et3 testare bit de stare setat
  • dec bx decrementare contor de timp

Magistrala de adrese
Magistrala de date
Comenzi
IOR\
DEC
R. date
R. stare
Ready
Write a Comment
User Comments (0)
About PowerShow.com