- cuvant cheie care modifica regimul de executie al instructiunii care urmeaza (ex: REP – repeta instructiunea urmatoare de un nr. de ori)
:= [ [,]]
- grup de litere care simbolizeaza o instructiune
:= |
:= |
Sintaxa instructiunilor (continuare)
:= EAX|EBX|...AX|BX| .. |AH|BH|.. |AL|BL| ...|CS|DS, ...|GS => nume de registru
:= |
:=[]'['[reg_index][+] [+]']'
:=|
un numar sau o expresie aritmetico-logica care se poate evalua in momentul compilarii; se poate exprima in zecimal, hexazecimal (indicativul H) sau binar (indicativul B)
:= |
valoare exprimabila pe 16 sau 32 biti
- text (cu caracter explicativ) ignorat de compilator
constante simbolice: - nume simbolic dat pentru o secventa de caractere (text); ex:
unu equ 1
numar = 26
var textequ <5[bx]> ; 5[bx] – constanta textuala
Reguli sintactice - operanzi
operanzii unei instructiuni trebuie sa fie de aceeasi lungime: octet, cuvant, dublu-cuvant (exceptii: operatii de inmultire si impartire)
o instructiune poate contine cel mult un operand de tip locatie de memorie
formatul instructiunilor x86 permite exprimarea adresei unei singure locatii de memorie
pentru o operatie aritmetica sau logica intre doua variabile (locatii de memorie) unul dintre operanzi trebuie sa se transfere temporar intr-un registru intern
aceasta restrictie favorizeaza operatiile pe registre – pt. cresterea eficientei de executie
instructiunile sunt echivalente ca nivel de structurare si sunt independente intre ele
nu exista forme de programare structurata
structurarea programului se poate face la nivel logic (formal) prin directive
Semnificatia entitatilor unei linii de program
Eticheta:
nume simbolic dat unei adrese de memorie unde incepe instructiunea care urmeaza dupa eticheta
util pentru instructiuni de salt si apel de rutine
se exprima prin : :
Mnemonica (numele) instructiuii:
nume simbolic dat unui cod de instructiune (2, 3, 4 sau 5 litere)
semnifica un anumit tip de operatie elementara direct executabila de UCP
aceeasi mnemonica poate simboliza mai multe coduri cu semnificatie apropiata (ex: MOV, ADD, ...)
acelasi cod de instructiune se poate exprima prin mnemonici diferite (ex: JZ si JE)
fiecarei instructiuni in L.A. ii corespunde strict o instructiune in cod masina (relatie biunivoca) !!!!!!!
Semnificatia entitatilor unei linii de program
Operand:
camp care exprima un termen al operatiei elementare exprimata prin mnemonica
indica locul si modul de regasire al operandului (modul de adresare folosit)
tipuri de operanzi:
registre interne ale UCP:
date imediate (constante numerice)
locatii de memorie (variabile)
porturi de intrare sau de iesire (registre de I/E)
Semnificatia entitatilor unei linii de program (operanzi)
mod de adresare folosit pentru structuri de date de tip sir, vector, tablou
sintaxa: '['']' :=SI|DI
'['+']'
exemple:
MOV AX, VAR[BX] MOV CX, [SI+100H]
MOV VAR[DI], AL MOV VAR[10H], 1234H
Moduri de adresare pt. ISA x86 Moduri 8086
Adresarea (indirecta) bazata:
adresa operandului se exprima printr-o adresa de baza, data de un registru si o adresa relativa data de
mod de adresare folosit pentru structuri de date de tip inregistrare
formal este identica cu adresarea indexata, dar alta interpretare
sintaxa: '['']' :=BX|BP
'['+']'
exemple:
MOV AX, VAR[BX] MOV CX, [SI+100H]
MOV VAR[DI], AL MOV [SI][100h], 1234H
Moduri de adresare pt. ISA x86 Moduri 8086
Adresarea mixta (bazat indexata):
adresa operandului se exprima printr-o adresa de baza, data de un registru, un index dat de un registru si o adresa relativa data de
mod de adresare folosit pentru structuri complexe de date de tip inregistrare de vectori sau vector de inregistrari
modul cel mai flexibil de adresare, dar necesita 2 adunari
sintaxa: '['+']'
'['++']'
'['']''['']''['']'
exemple:
MOV AX, VAR[BX+SI] MOV CX, [BX+SI+100H]
MOV VAR[BP+DI], AL MOV VAR[BP+SI], 1234H
MOV VAR[BP][DI], AL MOV [100h][BP][SI], 1234H
Moduri de adresare pt. ISA x86 Moduri '386, .. Pentium
modificari fata de 8086:
extensia registrelor generale la 32 biti: EAX, EBX, ...
toate registrele generale pot fi folosite pentru adresarea indirecta prin registru, indexata, bazata si mixta;
ex: [EAX], [ECX], VAR[EAX+ECX], [DX+AX+100h]
la adresarea mixta primul registru se considera registru de baza iar al doilea registru index
!!!!! modurile '386 sunt mai putin eficiente decat cele 8086 !!!!!
obs:1. In modul real adresa de offset nu poate depasi limita de 64ko, chiar daca registrele sunt de 32 biti; in modul protejat adresa de offset se calculeaza pe 32 biti
2. Registrul SP nu poate fi folosit ca registru index
3. Daca se foloseste SP sau BP atunci implicit se lucreaza cu reg. segment SS
Moduri de adresare pt. ISA x86 Moduri '386, .. Pentium
Adresarea indexata, scalata:
permite multiplicarea registrului index cu un factor egal cu lungimea unui element din sir:
1 pt. octet, 2 pt. cuvant, 4 pt. dcuvant si 8 pt. qcuvant
simplifica parcurgerea tablourilor a caror elemente sunt mai mari de 1 octet