Extras din laborator
5.2 Instructiuni de salt conditionat
Mnemonic: Jcc deplasament, unde cc reprezinta conditia testata
Actiunea:
• Daca conditia este adevarata, PC<-PC+deplasament (se executa saltul la noua adresa )
• Daca conditia este falsa , PC<-PC+n, unde n este numarul de octeti ai instructiunii de salt (aceasta este ignorata si se continua cu instructiunea urmatoare).
Salturile conditionate sunt salturi relative, deci adresa de salt este data de suma intre continutul curent al PC si deplasamentul specificat de instructiune.
Deplasamentul admis de unele asambloare este cu numai 8 biti, astfel ca operandul “adr” trebuie sa difere de adresa curenta cu maxim +/- 128 octeti.
Procesoarele de la I386 in sus admit si salturi relative cu depalasament pe 16 sau 32 de biti, dar numai in interiorul aceluiasi segment. Daca se doreste saltul in afara segmentului, se va folosi instructiunea de salt relativ cu conditia inversa si dupa ea o instructiune de salt neconditionat intersegment.
In functie de indicatorii de conditii testati de instructiunea de salt, exista urmatoarele tipuri de salturi conditionate (cu variantele echivalente scrise in paranteze).
JP adr (JPE adr) – Jump if Parity - salt conditionat de paritate para
JNP adr (JPO adr) – Jump if Not Parity - salt conditionat de paritate impara
JO adr - Jump if Overflow- salt conditionat de OF =1 - a fost depasire
JNO adr - Jump if Not Overflow- salt conditionat de OF = 0 - nu a fost depasire
JS adr – Jump if Sign bit- salt conditionat de SF=1 - rezultatul a fost negativ
JNS adr - Jump if No Sign bit - salt conditionat de SF = 0 rezultatul a fost pozitiv
JE adr (JZ adr) – Jump if Equal (Jump if Zero flag) - salt conditionat de ZF=1 - egalitate la compartia anterioara
JNE adr (JNZ adr) - Jump if Not Equal (Jump if No Zero flag) - salt conditionatde ZF=0 - inegalitate la comparatia anterioara
Pentru compararea numerelor cu semn (MSB da semnul: 1 pentru negativ, 0 pentru pozitiv) se folosesc atributele Less si Greater:
JL adr (JNGE adr) – Jump if Less (Jump if Not Greater or Equal) - salt conditionat de SF<>OF (SF xor OF = 1) - mai mic la compartia anterioara a unor valori cu semn
JLE adr (JNG adr) - Jump if Less or Equal (Jump if Not Greater) salt conditionat de ZF=1 sau SF<>OF - mai mic sau egal la compartia anterioara a unor valori cu semn
JG adr (JNLE adr) – Jump if Greater (Jump if Not Less or Equal) - salt conditionat de ZF=0 si SF=OF - mai mare la compartia anterioara a unor valori cu semn
JGE adr (JNL adr) – Jump if Greater or Equal (Jump if Not Less) - salt conditionat de SF=OF - mai mare sau egal la compartia anterioara a unor valori cu semn
Pentru compararea numerelor fara semn se folosesc atributele Below si Above:
JB adr (JNAE adr , JC adr) – Jump if Below (Jump if Not Above or Equal) - salt conditionat de CF = 1 - mai mic la compartia anterioara a unor valori fara semn sau transport la operatia anterioara
JBE adr (JNA adr) – Jump if Below or Equal (Jump if Not Above) - salt conditionat de CF=1 sau ZF=1 - mai mic sau egal la compartia anterioara a unor valori fara semn
JA adr (JNBE adr ) – Jump if Above ( Jump if Not Below or Equal) - salt conditionat de CF =ZF = 0 - mai mare la compartia anterioara a unor valori fara semn
JAE adr (JNB adr , JNC adr) – Jump if Above or Equal (Jump if Not Below, Jump if Not Carry) - salt conditionat de CF=0 - mai mare sau egal la compartia anterioara a unor valori fara semn sau nu exista transport la operatia anterioara
JCXZ – (Jump if CX is Zero) - salt conditionat de continutul lui CX = 0
Preview document
Conținut arhivă zip
- Instructiuni de salt.doc