Documente Academic
Documente Profesional
Documente Cultură
BTI Asm - 1: Răzvan Daniel ZOTA Facultatea de Cibernetică, Statistică Şi Informatică Economică
BTI Asm - 1: Răzvan Daniel ZOTA Facultatea de Cibernetică, Statistică Şi Informatică Economică
ASM - 1
Coninut
Instruciuni logice
Instruciuni de deplasare
Operaii aritmetice
Depire i transport
Setarea indicatorilor de stare
;word cu
var2
DW 01234
;definete o variabil
;word cu
valoarea
;zecimal 1234
var3
RESW
; definete o variabil
;word cu valoare
;nespecificat
var4
mesaj
DW 01BCDh
mov si,var2
; se fol. SI ca pointer spre var2
; (cod C echivalent: SI=&var2 )
mov ax,[si]
memorie la
mov bx,mesaj
un
; se citete din
;var2
; referire indirect
; BX este un pointer la
;string
DB Hello!'
start:
mov ax,cs
de date
; seteaz segmentul
mov ds,ax
; DS=CS
; orice referire la memorie se pp. c
este n segmentul DS
mov si, 1
index
inc [mesaj+SI]
; SI este pe post de
; == inc [SI + 8]
; == inc [9]
mov ax,[var2]
; AX <- [var2]
; == mov ax,[2]
SI -> Implic DS
DI -> Implic DS
BX -> Implic DS
BP -> Implic SS !
; Exemple:
mov ah,[bx+5]
(BX+5)
mov ax,[bx]
;ax <- unui word din memorie referit de BX
mov al,[bx]
; al <- unui byte din memorie referit de BX
mov ax,[bx+di+47]
la
; DS:(BX+DI+47)
; ax <- word
mov ax,[si]
mov ah,[si]
mov cx,[di]
mov ax,[bp]
; ax <- [SS:BP] operaie cu stiva
; n plus se permite folosirea BX+SI i BX+DI
mov ax,[bx+si]
mov ch,[bx+di]
mov [bx],[si]
; Instr. ilegal
mov [di],[si]
; Instr. ilegal
80286
80386, 80486DX
80486SX
Instruciuni logice
Instruciunile logice acioneaz bit-cu-bit
NOT:
A =~A
AND:
A &= B
OR:
A |= B
XOR:
A ^= B
CL, 0Fh
Instruciuni de deplasare
NOT:
Exemple
;cum se face nmulirea lui AX cu 10 (1010) (nmulim cu 2 i cu 8, apoi
adunm ;rezultatele)
shl
ax, 1
; AX ori 2
mov
bx, ax
; salvm 2*AX
shl
ax, 2
add
ax, bx
ax, 1
; AX ori 2
mov
bx, ax
; salvm 2*AX n BX
shl
ax, 3
add
ax, bx
10
11
12
ROL
AX, 6
AND
AX, 1fh
13
14
Operaii de deplasare
Exemple
mov ax,3
mov bx,5
not ax
; ax <- (~ax)
shr ax,cl
; mprim AX la 8
mov cl,3
; folosim CL pt depl cu 3 bi
shl bx,cl
; nmulim BX cu 8
CL = 0000 0011
Instruciuni aritmetice
ADD (addition): A += B
Adunare ntre regitri: add ax, bx
Adunare efectiv: add dl, 33h
Adunare memorie la registru (data din memorie adunat
la AL):
mov
di, NUMB
mov
al, 0
add
al, [di]
;adun [NUMB]
add
al, [di + 1]
;adun [NUMB + 1]
di, NUMB
mov
al, 0
;terge suma
add
al, [di]
;adun [NUMB]
inc
di
;di = di + 1
add
al, [di]
;adun [NUMB + 1]
17
Exemplu:
adunarea a dou numere pe 32 de bii (BX AX) + (DX CX):
add
ax, cx
adc
bx, dx
18
ch, 22h
sub
ch, 34h
cl, bl
Rezultatul este -12 (1110
1110)
Modificarea indicatorilor:
Z = 0 (rezultat dif de
zero)
C = 1 (mprumut)
S = 1 (rezultat negativ)
P = 0 (paritate par)
0 = 0 (fr depire)
ax, di
sbb
bx, si
20
Depire i transport
Transport (Carry)
indic apariia unui transport n urma unei adunri sau un mprumut n cazul
unei scderi
CF: carry flag (fr semn) 1 => transport ; 0 => fr transport
ex: 36,864 (9000h) + 36,864 (9000h) = 73,728 (12000h) > 65,535 (FFFFh) {OV, CY}
overflow, carry
Bitul carry este setat atunci cnd numrul fr semn iese din domeniu (nseamn c
operaia aritmetic a generat depire)
Depire (Overflow)
este o situaie care apare atunci cnd se adun sau se scad numere fr semn
OF: overflow flag (cu semn) {1 = OV depire, 0 = NV fr depire}
ex: 20,480 (5000h) + 20,480 (5000h) = 40,960 (A000h) > 32,767 (7FFFh) {OV, NC}
overflow, not carry
Indicatorul overflow este setat atunci cnd numrul cu semn depete domeniul de
definiie
Exemplu: FFFFh + FFFFh = FFFEh {(-1) + (-1)} = -2; NV, CY
21
Exemple
mov
ax,0fffeh
add
ax,3
fr semn
; C = 1, O = 0
---
mov
ax,0FFFEh
add
ax,3
; C = 1, O = 0
mov
bx,07FFFh
---
Ok - nr cu semn
add
bx,1
cu semn
; C = 0, O = 1
mov
bx,07FFFh
add
bx,1
; C = 0, O = 1
mov
ax,07h
add
ax,03h
semn
; C = 0, O = 0
---
Condiie de overflow
-----
Condiie de Overflow
Ok - fr semn
Ok indiferent de
22
FLAG
Nume
Descriere
Observaii
ZF
Zero
1:ZR:Zero
0:NZ: Non-zero
1:CY
0:NC
CF
Carry
OF
Overflow
1:OV
Operaii matematice cu s
Nr pozitive sau negative reprezentat
complement fa de 2
1:NG: -
0:NV
SF
Sign Flag
0:PZ: +
23