Documente Academic
Documente Profesional
Documente Cultură
26.03.2016 16:37 1
Limbaje de programare
26.03.2016 16:37 2
Limbajul IL (Instruction List)
26.03.2016 16:37 3
Operatori în IL
Operatori de transfer (LD şi ST sau =). Datele pot fi transferate de la
memorie la acumulator şi invers;
Exemplu:
LD %I0.0 (*Încarca continutul intrarii I0.0 în acumulator*)
ST %Q1.0 (*Transfera la iesirea Q1.0 continutul acumulatorului*)
= %Q0.0 (*Transfera la iesirea Q0.0 continutul acumulatorului*)
Operatori de setare/resetare (S (Set) şi R (Reset)). Realizează setarea,
respectiv resetarea operanzilor;
Exemplu:
S %M0.0 (*Seteaza bitul M0.0*)
R %M0.1 (*Reseteaza bitul M0.1* )
Operatori logici (AND, OR, XOR). Realizează funcţii logice între conţinutul
PROCES
operandului şi acumulator;
Exemplu:
AND %M0.0 (*Realizeaza conjunctia logica intre acumulator si M0.0 *)
OR %M0.0 (*Realizeaza disjunctia logica intre acumulator si M0.0 *)
XOR %M0.0 (*Realizeaza SAU EXCLUSIV intre acumulator si M0.0 *)
26.03.2016 16:37 4
Operatori în IL
Operatori de transfer (MOV). Datele se transferă între o sursă şi o
destinaţie. Operatorul are o literă suplimentară pentru a specifica felul
datei: B, dacă este un transfer de octet, W, dacă este un transfer de
cuvânt sau DW, dacă este un transfer de dublu cuvânt. Instrucţiunea are
doi operanzi: sursa şi destinaţia.
Exemplu:
MOVB %MB0, %MB1 (*Realizeaza transferul din MB0 in MB1*)
MOVW %MW0, %MW1 (*Realizeaza transferul din MW0 in MW1*)
Operatori aritmetici (ADD, SUB, MUL, DIV). Realizează operaţiuni
aritmetice între operanzi.
Exemplu:
(*Programul realizeaza adunarea unor variabile*)
(*intregi si memoreaza rezultatul intr-o alta*)
PROCES
(*variabila intreaga*)
(*Variabilele a, b, c variabile simbolice de tip intreg*)
LD a (*Incaraca a in acumulator*)
ADD b (*Aduna cu b*)
ST c (*c=a+b*)
26.03.2016 16:37 5
Operatori în IL
Operatori relaţionali (GT, GE, EQ, NE, LE, LT). Compară operanzii şi
setează acumulatorul în funcţie de rezultatul comparaţiei.
Exemplu:
(* Programul seteaza doua variabile booleene în *)
(* functie de rezultatul comparatiei *)
(* Variabilele a, b, c sunt variabile simbolice *)
(* Variabilele bool1 si bool2 sunt variabile booleene *)
LD a (*Încarca a în acumulator*)
GT b (*Compara cu b*)
ST bool (*Memoreaza rezultatul comparatiei*)
LD b (*Încarca b în acumulator*)
GTPROCES
a (*Compara cu a*)
ST bool2 (*Memoreaza rezultatul comparatiei*)
26.03.2016 16:37 6
Operatori în IL
Operatori de salt (JMP, CALL, RET)
Exemplu:
(* Programul memoreaza în c rezultatul operatiei*)
(* a-b daca a este mai mare ca b sau rezultatul *)
(* operatiei b-a daca b este mai mare ca a *)
(* Variabilele a, b şi c sunt variabile simbolice de tip întreg *)
LD a
GE b
JMPC ET1
LD b
SUB a
ST c
PROCES
JMP ETEND
ET1: LD a
SUB b
ST c
ETEND:
26.03.2016 16:37 7
Modificatori
Modificatorul este un caracter, care este ataşat operatorului şi poate
realiza:
n Negarea booleană a operatorului. De obicei acest operator este
caracterul N;
n Întârzierea operaţiei. De obicei acest operator este caracterul (;
26.03.2016 16:37 8
Lucrul cu stiva în STL
În STL trebuie utilizate instrucţiuni speciale pentru controlul stivei.
Aceste instrucţiuni sunt OLD şi ALD, care execută operaţii de OR şi AND
între componentele din capul stivei.
LD %I0.0 LD %I0.1 LD %I0.2 AND %I0.3
%I0.0 %I0.1 %I0.2 E
%I0.0 %I0.1 %I0.1
LD %I0.0 Stiva
%I0.0 %I0.0
LD %I0.1
LD %I0.2
AND %I0.3
E=%I0.3 AND %I0.2
OLD OLD ALD
ALDPROCES E1 E2
= %Q0.0 %I0.0
26.03.2016 16:37 10
Network 1
// Pornirea automata
LD RUN_P
O C1 // Autoretinere
AN LP // Este pozitionat pe pornire automata?
AN STOP_P // S-a generat un semnal de oprire?
A AV // Motorul este disponibil?
AN AVARIE // Nu a apărut o avarie
// Pornirea manuala
LD L1 // S-a apasat butonul de pornire?
O C1 // Autoretinere
A LP // Este pozitionat pe pornire locla?
A LS // Butonul de oprire locala este apasat?
A AV // Motorul este disponibil?
AN AVARIE // Nu a apărut o avarie
// Testul conditiei de pornire automata sau manuala
OLD
= C1
Network 2
// Testul inchiderii contactorului in 2 s
LD C1
AN B1
TON T37, 20
Network 3
// Generarea si resetarea semnalului de avarie
LD T37
O AVARIE
AN R_AV
= AVARIE
26.03.2016 16:37 11