Documente Academic
Documente Profesional
Documente Cultură
ASM - 2
Coninut
Instruciuni de control al programului
Instruciuni de salt necondiionat
Instruciuni de salt condiionat
Utilizarea procedurilor i macrourilor
Salt necondiionat
JMP
Short jump - instruciune pe 2-octei ce permite saltul la locaia de
memorie n intervalul +127 i -128 octei de la locaia de memorie ce
urmeaz saltului
OPCODE
DISP
JMP
SHORT Label
Label
OPCODE
DISP low
DISP high
Label
OPCODE
IP low
IP high
CS low
CS high
Salturi condiionale
Instruciunile logice i aritmetice seteaz flag-urile
Flag-urile ofer informaii de stare n urma instruciunilor
anterioare
Prin utilizarea indicatorilor de stare se pot realiza salturi
condiionale transferul execuiei programului ctre o alt
instruciune din cadrul programului
dac condiia a fost adevrat
Salt napoi sau nainte ctre locaia specificat
Pointerul de instruciuni (IP) se modific n mod continuu
(pentru a se referi la instruciunea urmtoare ce va fi
executat)
fr semn
Comparaii numerice
CMP(compare) compar dou valori X i Y
Echiv cu o scdere care modific doar indicatorii de stare
Folosit pentru verificarea coninutului unui registru sau a
unei locaii de memorie cu o alt valoare
De regul se folosete cu o instruciune de salt condiional
cmp
al, 10h
SUPER
modific)
jae
locaia de
Op1, Op2
Operanzi fr semn
Operanzi cu semn
Z: egalitate/inegalitate
Z: egalitate/inegalitate
C: fr semnificaie
S: fr semnificaie
O: fr semnificaie
S i O mpreun
Dac ((S=0) i (O=1)) sau ((S=1) i (O=0))
atunci Op1 < Op2
Dac ((S=0) i (O=0)) sau ((S=1) i (O=1))
atunci Op1 >= Op2
comparaie fr semn
Greater/Less
comparaie cu semn
=>
Jump
=>
Not
A/B G/L
=>
Above/Below Greater/Less
=>
Equal
10
Descriere
Condiie
JA=JNBE
Jump if above
C=1 | Z=1
C=0
Jump if below
C=1
Jump if carry
JE=JZ
Jump if equal
Z=1
Jump if Zero
JNE=JNZ
Z=0
S=1
11
Descriere
Condiie
JNS
S=0
JO
O=1
JNO
Jump if no overflow
JG=JNLE
Jump if greater
JGE=JNL
O=0
S=O
Jump if less
S^O
S^O | Z=1
CX=0
12
cmp ax, bx
ja
true_label
.
<False Processing>
.
jmp
done_label
.
true_label: <True processing>
.
done_label: <resume execution>
13
14
Instruciunea LOOP
Instruciunea LOOP
Este o combinaie de decrementare a lui CX cu un salt
condiional
LOOP decrementeaz CX (ECX pentru modul 32-bit) i dac
CX 0 sare la adresa indicat de etichet
dac CX devine 0, va fi executat urmtoarea instruciune
15
sfarsit:
RET
Afisare ENDP
END pstart
16
Exemplu:
; io.h
exit_dos macro
mov ah,4ch
int 21 h
endm
afisare macro x
lea dx,x
mov ah,9
int 21h
endm
.model small
include io.h
.stack 200H
.data
Mesaj1 DB Hello1$
Mesaj2 DB Hello2$
.code
pstart:
mov dx, @data
mov ds, dx
afisare mesaj1
afisare mesaj2
exit_dos
end pstart
17