Documente Academic
Documente Profesional
Documente Cultură
msb
byte 1
D7
lsb
D6
D5
D4
D3
D2
D1
D0
OPCODE
a) instruciune de 1 octet
byte 1
D7
D6
D5
D4
D3
D2
D1
D0
OPCODE
byte 2
D7
D6
D5
D4
D3
D2
D1
D0
8-BIT DATA/
ADDRESA
OPCODE
b) instruciune de 2 octei
byte 1
D7
D6
D5
D4
D3
D2
D1
D0
byte 2
D7
D6
D5
D4
D3
D2
D1
D0
byte 3
D7
D6
D5
D4
D3
D2
D1
D0
16-BIT
DATA /
ADDRESA
c) instruciune de 3 octei
Formatul instruciunilor la P 8085
D7
D6
D5
D4
D3
D2
D1
D0
cod
operaie
cod registru
destinaie
cod registru
surs
opcod
generalizat
Registru
B
C
D
E
H
L
M (*)
A
Exemplu:
MOV r1,r2
; Move r2 to r1: (r1) (r2), r1 i r2 - oricare din registrele A, B, C, D, E, H i L;
Avantaje suplimentare: - flexibilitate sporit.
Adresarea imediat:
- operandul este o constant;
- operandul (8 sau 16 bii) e dispus n memoria program, imediat dup codul operaiei;
- operandul este adresat cu registrul PC.
Exemple:
MVI A,data8 ; Move Immediate data8=byte2 into accumulator: (A) (byte 2)
LXI H,data16 ; Load register pair HL with data16= byte3::byte2: (L) byte2, (H) byte 3
- sunt necesare nc 1 sau 2 cicluri de citire memorie pentru ncrcarea operandului.
- se utilizeaz la iniializarea registrelor interne cu valori predefinite.
Adresarea direct:
- operandul este o variabil de 8 sau 16 bii, amplasat oriunde n memorie, la o adres
stabilit la momentul asamblrii programului;
- octeii 2 i 3 ai instruciunii conin adresa la care se afl operandul;
- adresa operandului este ncrcat n W-Z n dou CM de citire memorie;
- urmeaz adresarea operandului cu W-Z i efectuarea transferului propriu-zis.
Exemple:
LDA addr
SHLD addr
- cele mai multe instruciuni cu adresare indirect folosesc registrul pereche H (format din
registrele simple H i L), referit n instruciuni prin notaia M (SSS sau DDD = 1 1 0).
Exemple:
MOV A,M ;
LDAX rp ;
STAX rp ;
PUSH rp ;
POP rp ;
Adresarea combinat:
- utilizarea mai multor moduri de adresare n cadrul aceleiai instruciuni.
Exemple:
LDA addr
MOV A,M
CALL addr
RST n
;
;
;
;
Categorii de instruciuni:
a) instruciuni de transfer - copierea datelor ntre registre sau ntre registre i memorie;
aceste instruciuni nu afecteaz fanioanele de condiie.
b) instruciuni aritmetice - operaii aritmetice de adunare i scdere sau de incrementare/
decrementare cu cuvinte din registre sau din memorie. Instruciunile din aceast
categorie afecteaz toate fanioanele de condiii.
c) instruciuni logice - operaii logice asupra cuvintelor binare. Toi indicatorii de condiie
sunt afectai (CY i AC sunt resetai).
d) instruciuni de ramificare
instruciunilor. Ramificrile
fanioanelor.
execuie a
de valorile
Nr. Mnemonica
crt. instruciunii
Descrierea instruciunii
Mod(uri) de
adresare
Flaguri
afectate
CM/
stri
la registru
1/4
Instruciuni de transfer
1 MOV r1,r2
(r1 )(r2)
2 MOV r,M
(r)((H)(L))
ind.+la reg.
2/7
3 MOV M,r
((H)(L))(r)
la reg.+ind.
2/7
4 MVI r,data8
(r)data8
imed.+la reg.
2/7
5 MVI M,data8
((H)(L))data8
imed.+ind.
3/10
(rL)low(data16)
(rH)high(data16)
imed.+la reg.
3/10
7 LDA addr
(A)(addr)
direct+impl.
4/13
8 STA addr
(addr)(A)
impl.+dir.
4/13
9 LHLD addr
(L)(addr)
(H)(addr+1)
direct+impl.
5/16
10 SHLD addr
(addr)(L)
(addr+1)(H)
impl.+direct
5/16
11 LDAX rp
(A)((rp)), rp=B,D
ind.+impl.
2/7
12 STAX rp
((rp))(A), rp=B,D
ind.+impl.
2/7
13 XCHG
(H)(D), (L)(E)
implicit
1/4
Instruciuni aritmetice
14 ADD r
(A) (A)+(r)
impl.+la reg.
toate
1/4
15 ADD M
(A)(A)+((H)(L))
impl.+ind.
toate
2/7
16 ADI data8
(A)(A)+data8
impl.+imed.
toate
2/7
17 ADC r
(A)(A)+(r)+(CY)
impl.+la reg.
toate
1/4
18 ADC M
(A)(A)+((H)(L))+(CY) impl.+ind.
toate
1/4
19 ACI data8
(A)(A)+data8+(CY)
impl.+imed.
toate
2/7
20 SUB r
(A)(A) - (r)
impl.+la reg.
toate
1/4
21 SUB M
(A)(A) - ((H)(L))
impl.+ind.
toate
2/7
22 SUI data8
(A)(A) - data8
impl.+imed.
toate
2/7
23 SBB r
impl.+la reg.
toate
1/4
24 SBB M
impl.+ind.
toate
2/7
25 SBI data8
impl.+imed.
toate
2/7
26 INR r
INcRement register
(r)(r) + 1
la registru
toate
1/4
27 INR M
INcRement Memory
((H)(L))((H)(L)) + 1
indirect
toate
3/10
28 DCR r
DeCRement register
(r)(r) - 1
la registru
toate
1/4
29 DCR M
DeCRememt Memory
indirect
toate
3/10
30 INX rp
31 DCX rp
((H)(L))((H)(L)) - 1
(rp)(rp)+1,
rp=B,D,H, sau SP
(rp)(rp) - 1
32 DAD rp
ADD rp to HL
33 DAA
Decimal Adjust
Accumulator
la registru
1/6
la registru
1/6
CY
toate
3/10
1/4
Instruciuni logice
34 ANA r
impl.+la reg.
1/4
35 ANA M
impl.+ind.
2/7
36 ANI data8
impl.+imed.
2/7
37 XRA r
impl.+la reg.
38 XRA M
impl.+ind.
39 XRI data8
impl.+imed.
40 ORI data8
OR Immed. with A
impl.+imed.
2/7
41 ORA r
OR register with A
impl.+la reg.
1/4
42 ORA M
OR Memory with A
impl.+ind.
2/7
43 CMP r
(A) - (r)
impl.+la reg.
toate
1/4
44 CMP M
(A) - ((H)(L))
impl.+ind.
toate
2/7
45 CPI data8
(A) - data8
impl.+imed.
toate
2/7
46 RLC
implicit
CY
1/4
implicit
CY
1/4
implicit
CY
1/4
implicit
CY
1/4
47 RRC
48 RAL
49 RAR
Z,S,P
CY=0
AC=0
1/4
2/7
2/7
50 CMA
CoMplement Acc.
(A) (A)
implicit
1/4
51 STC
SeT Carry
(CY) 1
implicit
CY=1
1/4
52 CMC
CoMplement Carry
(CY) (CY)
implicit
CY
1/4
Instruciuni de ramificare
53 JMP addr
JuMP unconditional
54 Jcc addr
Jump on condition cc
55 CALL addr
56 Ccc addr
57 RET
CALL
unconditional
Call on condition cc
RETurn
Return on condition cc
58 Rcc
ReSTart
59 RST n
n= 0, 1, 2, ..., 7
60 PCHL
move HL to PC
(PC) addr
Dac cc : (PC) addr;
Altfel: (PC) (PC) + 3
(SP) (SP) - 1
((SP)) (PCH)
(SP) (SP) - 1
((SP)) (PCL)
(PC) addr
Dac cc: (SP) (SP) - 1
((SP)) (PCH)
(SP) (SP) - 1
((SP)) (PCL)
(PC) addr;
Altfel: (PC) (PC) + 3
(PCL) ((SP))
(SP) (SP) + 1
(PCH) ((SP) + 1)
(SP) (SP) + 1
Dac cc: (PCL) ((SP))
(SP) (SP) + 1
(PCH) ((SP)+1)
(SP) (SP) + 1;
Altfel: (PC) (PC) + 1
(SP) (SP) - 1
((SP)) (PCH)
(SP) (SP) - 1
((SP)) (PCL)
(PC) n x 8
(PCH)(H), (PCL)(L)
direct
direct
3/10
3/10
1/5
direct +
indirect +
implicit
5/17
5/17
direct +
indirect +
implicit
3/11
indirect +
implicit
3/10
-
3/11
indirect +
implicit
1/5
direct +
indirect +
implicit
implicit
3/11
1/5
la registru +
indirect +
implicit
3/12
indirect +
implicit
3/12
la registru +
indirect +
implicit
3/10
toate
3/10
5/16
1/6
3/10
3/10
1/4
1/4
1/7
1/4
implicit
1/4
implicit
1/4
indirect +
implicit
implicit +
indirect
la registru
impl.+dir.
impl.+dir.
implicit
implicit
-
Directive de segmentare:
CSEG (Code SEGment) nchide segmentul curent i (re)deschide segmentul de cod
relocabil.
DSEG (Data SEGment) - nchide segmentul curent i (re)deschide segmentul de date
relocabil.
ASEG (Absolute SEGment) - nchide segmentul curent i deschide un segment absolut.
Segmentele relocabile nu au nume: exist un singur segment de cod i unul singur de date.
Segmentele absolute nu au nume, dar pot fi mai multe, identificate prin adresa de start.
Segmentele absolute nu trebuie s se suprapun n spaiul de adrese.
Asamblorul folosete cte un contor de locaii pentru fiecare segment, ce poate fi referit n
program printr-un simbol predefinit (uzual $).
Contorul de locaii atribuite adrese octeilor rezultai din asamblarea instruciunilor
executabile i octeilor rezervai pentru date.
Adresele sunt temporare
segmentelor absolute.
cazul
segmentelor
relocabile
sau
definitive
cazul
Aceste adrese, mpreun cu octeii corespunztori, sunt stocai n fiierul obiect generat de
asamblor.
Contorul de locaii este iniializat cu 0000h la nceputul segmentului relocabil.
La nceputul unui segment absolut, contorul de locaii este iniializat cu adresa de start a
acestuia (sau cu 0000h dac aceasta lipsete). La nchiderea unui segment relocabil,
contorul de locaii este salvat, fiind rencrcat la redeschiderea segmentului.
Exemplu:
; nceputul fiierului surs n limbaj de asamblare
; segmentul de cod relocabil (implicit, chiar dac lipsete CSEG)
; $=0000h
...
DSEG
...
CSEG
; $=x
; nchide segmentul de cod relocabil i deschide segmentul relocabil de date
; $=0000h
; $=y
; nchide segmentul de date relocabil i redeschide segmentul relocabil de cod
; $=x
...
DSEG
; $=z
; nchide segmentul de cod relocabil i redeschide segmentul relocabil de date
; $=y
...
ASEG
; $=w
2000h
; nchide segmentul relocabil de date i deschide un segment absolut
; $=2000h
...
; $=t
DSEG
; $=w
...
ORG
...
ASEG
...
ORG
...
Constante simbolice ncep cu o liter sau cu unul din caracterele speciale $ . ? @ sau _.
Se definesc cu ajutorul directivelor EQU i SET:
const
EQU exp (EQUate) - atribuie n mod permanent constantei cu numele simbolic
const valoarea dat de expresia exp (o expresie numeric sau logic).
cstemp SET exp - atribuie n mod temporar constantei cu numele simbolic cstemp valoarea
dat de expresia exp. Un simbol definit cu SET se poate redefini ulterior, n cadrul
aceluiai fiier surs, ori de cte ori este nevoie.
Asamblorul substituie numele simbolice const sau cstemp cu valorile atribuite cu ajutorul
directivelor EQU i SET ele trebuie s precead orice utilizare a numelor simbolice.
inainte
inapoi
sens
...
sens set
...
equ 1
equ 0
set inainte
; constante permanente
; constant temporar
; orice apariie a simbolului sens va fi nlocuit cu 1
napoi
; orice apariie a simbolului sens va fi nlocuit cu 0
Expresii aritmetice i logice - folosesc drept operanzi orice tip de constante descrise mai
sus, combinai cu ajutorul operatorilor:
- aritmetici: +, -, *, /, MOD (modulo)
- logici: NOT, AND, OR, XOR, SHL, SHR (de deplasare la stnga sau la dreapta);
- paranteze (stnga i dreapta).
Expresiile sunt evaluate pe 16 bii.
Reguli de preceden:
1. expresiile dintre paranteze;
2. *, /, MOD, SHL, SHR
3. +, 4. NOT
5. AND
6. OR, XOR
Operatorii MOD, SHL, SHR, NOT, AND, OR i XOR trebuie separai de operanzi cu cel puin
un blanc.
baza
equ 0
intrare1
equ baza+4
intrare2
intrare3
equ (baza+intrare1)*2
TRUE
EQU 1
FALSE
DSEG
mesaj:
buffer:
lung :
count:
ptrbuf:
ptrmes:
DB
DS
DB
DS
DB
DB
DW
Buffer de date,0
100
$-buffer
1
LOW(buffer)
HIGH(buffer)
mesaj
; nceputul macroinstruciunii.
...
; Corpul macroinstruciunii.
ENDM
; Sfritul macroinstruciunii.
Odat definit, o macroinstruciune se poate referi ori de cte ori este nevoie, prin simpla
inserare n program a numelui i a parametrilor acesteia.
Exemplu:
O macroinstruciune de adunare a dou locaii de memorie de 1 octet, iar rezultatul s se
regseasc n acumulator.
Folosind aceast macroinstruciune:
- s se adune coninutul locaiei a1 cu octetul de la adresa a2, rezultatul s se depun la a3
- s se adune octeii de la adresele b1 i b2, iar rezultatul s se memoreze la adresa b3.
ADUNA:
LDA par1
MOV B,A
LDA par2
ADD B
ENDM
...
ADUNA
a1,a2
STA a3
ADUNA
STA b3
b2,b1
; Calculeaz (b2)+(b1).
; Depune rezultatul n memorie, la adresa b3.
STA a3
LDA b1
MOV B,A
LDA b2
ADD B
STA b3
Programul apelant
CALL subrutina
Instruciunea urmtoare
subrutina:
...
RET
...
Exemplu: Subrutin de transfera unui numr de octei (nrb) de la adresa sursa la adresa
dest.
Se folosesc registrele pereche H i D pentru adresarea indirect a locaiilor din zonele de
memorie surs, respectiv destinaie, iar registrul C va contoriza numrul de octei rmai
de transferat. Subrutina se va numi memcpy (copie o zon de memorie n alt zon).
; Programul apelant
;
...
LXI
H,sursa
LXI
D,dest
MVI
C,nrb
CALL
memcpy
;
...
;
;
;
;
;
A,M
D
memcpy
;
;
;
;
;
;
;
;
n corpul subrutinei se modific coninutul unor registre interne sau indicatorii de condiie.
Programul apelant dorete conservarea lor.
Programul apelant sau subrutina apelat - salvarea/refacerea lor din stiv.
Exemplu:
; Programul apelant
;
...
CALL
subrutina
;
...
;
;
;
;
; SUBRUTINA ;
Intrare: . . .
;
Ieire: . . .
;
Distruge: Nimic
subrutina:
PUSH
PUSH
PUSH
PUSH
PSW
B
D
H
...
POP
POP
POP
POP
RET
;
;
;
;
Salveaz
Salveaz
Salveaz
Salveaz
pe
pe
pe
pe
stiv
stiv
stiv
stiv
;
;
;
;
Reface
Reface
Reface
Reface
de
de
de
de
pe
pe
pe
pe
stiv
stiv
stiv
stiv
H i L.
D.
B.
acumulatorul i indicatorii de condiie.