Documente Academic
Documente Profesional
Documente Cultură
Curs3 SMP2014
Curs3 SMP2014
MICROPROCESOARE
2014
CURS 3 PROGRAMAREA N LIMBAJ DE ASAMBLARE
.l. dr. ing. Radu PIETRARU
radu.pietraru@aii.pub.ro
LIMBAJUL DE ASAMBLARE
Este un limbaj de programare apropiat de maina
de calcul destinat calculatoarelor,
microprocesoarelor, microcontrolerelor sau altor
dispozitive programabile.
Fiecare declaraie corespunde unei singure
instruciuni n limbaj main.
Este specific unei anume arhitecturi.
Permite programatorului utilizarea unor
reprezentri simbolice (mnemonici instruciuni,
alias-uri registre, locaii de memorie)
echivalente cu codurile operaiilor n limbaj
main.
DEZAVANTAJE (?)
(IDEI PRECONCEPUTE)
Greu de nvat
Cod greu de parcurs i de neles
Greu de depanat i de meninut
Timp de dezvoltare mare
Noile compilatoare fac inutil programarea n limbaj
de asamblare
La ora actual mainile de calcul sunt suficient de
rapide a. . programarea n limbaj de asamblare este
inutil (idem resurse, de exemplu memorie)
Pentru o vitez mai bun de rulare este suficient s
optimizm algoritmii
Nu este portabil
AVANTAJE (!)
Vitez
Dimensiune
CODIFICAREA GENERIC A
INSTRUCIUNILOR
EXEMPLU DE CODIFICARE
INSTRUCIUNEA MOV
EXEMPLU DE CODIFICARE
INSTRUCIUNEA MOV (CONTINUARE)
MOV SP, BX
Aceast instruciune copiaz un word din registrul BX n registrul SP.
Codul operaiei de 6 bii este: 100010.
Bitul W=1 deoarece este un word.
Bitul D=1 i cmpul REG=100 atta timp ct identific registrul
destinaie SP.
Cmpul MOD=11 pentru a reprezenta modul de ADRESARE PRIN
REGISTRU.
Cmpul R/M=011 pentru a reprezenta cellalt registru BX.
EXEMPLU DE CODIFICARE
INSTRUCIUNEA MOV (CONTINUARE)
MOV CS:[BX],DL
Aceast instruciune copiaz un octet din registrul DL ntr-o adres de
memorie.
Adresa efectiv a locaiei de memorie este coninut in registrul BX.
n mod normal adresa efectiv este adugat la registrul DS pentru a forma
adresa fizic a memoriei. n acest caz notaia CS:[BX] indic faptul ca registrul
CS este folosit n locul registrului DS.
CS reprezint prefixul de suprascriere a segmentului.
Atunci cnd o instruciune conine un prefix de suprascriere a segmentului este
necesar de a aduga un cod de 8 bii naintea instruciunii. Acest cod trebuie s
aib formatul 001XX110 unde XX reprezint codul registrului segment utilizat.
n cazul de faa CS=01 i prefixul de suprascriere a segmentului devine
00101110.
10
PROCESUL DE DEZASAMBLARE
Nu este o problem trivial i nici nu exist o
soluie universal sau exact.
ine de reverse-engineering
Nu se pot reface variabilele, constantele,
comentariile, etichetele, macro-urile, apelurile de
funcii i proceduri.
Cu siguran nu se poate obine codul original.
De multe ori se utilizeaz pe post de
depanatoare, de exemplu: SoftICE
11
12
13
EXEMPLE DE ASAMBLOARE
Denumire
Productor
Descriere
SO
Flat assembler
(fasm)
Privalov
Linie de comand
Windows, Linux
Lazy Assembler
(LZASM)
Stepan Polovnikov
Clon a fasm
Windows
MASM 5.1
Microsoft
Windows
MASM 6.1
Microsoft
Linie de comand
Windows
Netwide
Assembler
(NASM)
Extrem de modular
Windows, Linux
Turbo
Assembler
(TASM)
Borland
Linie de comand
Windows
14
Caracteristici generale:
Caracterele ce sunt precedate de semnul ; sunt
considerate comentarii (adugarea comentariilor
n interiorul programului este o modalitate bun
pentru a mbunti eligibilitatea codului).
n afar de aceste instruciuni, exist alte iruri
de caractere ce nu au legtur cu instruciunile
microprocesorului, ci servesc asamblorului;
acestea poart numele de directive.
Numerele din interiorul programului pot fi
exprimate n diferite forme: zecimal (2, 45, ..),
hexazecimal (12H,..), etc.
15
16
mov ax, 0
mov bx, ax
add ax, dx
mov cx, ax
__________________________________________________
mov ax, 0
mov
bx, ax
add ax, dx
mov cx,
ax
17
18
DIRECTIVE DE PROCESOR
n mod implicit asamblorul va permite doar
instruciuni valabile pentru ntreaga familie de
microprocesoare.
Directivele de procesor permit activarea
(utilizarea) de instruciuni care apar la
microprocesoare mai noi. Exemple:
.8086 .8087 .186 .286 .287
.286P .386 .387 .386P .486
.486P .586 .586P
19
PROCEDURI
NProc
NProc
FProc
FProc
proc near
mov ax, 0
ret
endp
proc far
mov ax, 0FFFFH
ret
endp
20
MODELE DE MEMORIE
.tiny codul, datele i stiva sunt ntr-un
segment de 64k
.small codul i datele sunt n segmente
separate (2 segmente)
.medium datele se afl ntr-un singur
segment
.compact codul se afl ntr-un singur
segment
.large sau .huge nu exist limitri
.flat nu este folosit mecanismul de
segmentare
21
DIRECTIVE DE ASAMBLARE
DECLARAREA DE CONSTANTE
DIRECTIVELE EQU, DB,DW,DD
n cadrul unui program exist n mod normal 3
categorii de date: constante, variabile i adrese.
Este permis asocierea unor nume variabilelor,
constantelor i adreselor pentru a putea face referina
la ele prin intermediul unui nume, n loc de a folosi
un numr.
23
DECLARAREA DE VARIABILE
Directivele DB, DW, DD sunt folosite pentru a asigna nume variabilelor din
program. Exemplu:
DATA_1
DATA_2
DATA_3
DATA_4
DB
DW
DD
DB
04H
?
1,2,3,4,5,6
4 DUP(0)
MOV AL,DATA_1
24
BX, matrice
matrice[0], 3
matrice[1], 6
2[BX],4
[BX+3],9
MOV DI,4
MOV DI[BX],12
INC
MOV
MOV
MOV
DI
matrice[DI], 32
matrice[6], 23
matrice[7], 18
MOV matrice[8], 2
MOV CX,9
MOV AX,0
MOV DI,0
ETI: ADD AL,[BX+DI]
INC DI
LOOP ETI
25
matrice db 9 DUP(0)
26
DIRECTIVE DE ASAMBLARE
DIRECTIVA ASSUME
Directiva ASSUME informeaz asamblorul asupra segmentului logic ce trebuie
folosit pentru fiecare segment fizic al microprocesorului (segment de cod,
segment de date, segment de stiv, segment extra).
n exemplul de mai jos se informeaz asamblorul c segmentul logic PROG va
trebui folosit ca i segment de cod i segment de date:
ASSUME CS:PROG, DS:PROG
27
DIRECTIVE CONDIIONALE - IF
Processor EQU 80386
...
if Processor eq 80386
shl ax, 4
else
mov cl, 4
shl ax, cl
endif
Alte directive similare: IFE, IFDEF, IFB, IFIDN,
IFDIF
28
MACRO-URI
COPY macro Dest, Source
mov ax, Source
mov Dest, ax
endm
copy X,Y
29
DIRECTIVE REPETITIVE
30
DIRECTIVE REPETITIVE
for value,<0,1,2,3,4,5>
byte value
endm
echivalent cu
byte 0
byte 1
byte 2
byte 3
byte 4
byte 5
while expression
<Statements>
endm
31
32