Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateC
C sharpCalculatoareCorel drawDot netExcelFox pro
FrontpageHardwareHtmlInternetJavaLinux
MatlabMs dosPascalPhpPower pointRetele calculatoare
SqlTutorialsWebdesignWindowsWordXml

Instructiuni de salt

calculatoare



+ Font mai mare | - Font mai mic



Instructiuni de salt

1 Instructiuni de salt neconditionat



Mnemonic: JMP adr - salt neconditionat

Actiune : PC← adr

Salturile de acest tip pot fi absolute sau relative, cu adresa data direct sau continuta intr-un registru sau locatie de memorie, in acelasi segment sau intersegment, etc. Pentru lista completa a tipurilor de salt neconditionat se poate consulta Anexa 1 de la sfarsitul lucrarii. Intr-o prima instanta se vor folosi numai salturi simple, cu adresa specificata sub forma de eticheta, iar asamblorul si linkeditorul vor transpune automat argumentul saltului. In general numai in Modul Protejat este nevoie de toate instructiunile prezentate in lista completa.

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 I-386 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 comparatia anterioara.

JNE adr (JNZ adr) - Jump if Not Equal (Jump if No Zero flag) - salt conditionat de 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 comparatia 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 comparatia 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 comparatia 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 comparatia 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 comparatia 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 comparatia 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 comparatia 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 comparatia 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

3 Instructiuni de ciclare LOOP, LOOPcc

Pentru executia repetata a unui grup de instructiuni (ciclu) se pot folosi, in afara instructiunilor de salt si instructiunile specializate pentru ciclare LOOP si LOOPcc. Acestea folosesc implicit registrul contor CX, pe care il decrementeaza automat la fiecare executie si, daca acesta nu a ajuns la 0, executa saltul la adresa specificata.

Mnemonic: LOOP rel8

Actiune: DEC CX; jump short if CX <> 0.

Se executa ciclul pana cand contorul CX ajunge la 0.

Mnemonic: LOOPE rel8 (cicleaza atata timp cat exista egalitate).

Actiune: DEC CX; jump short if count <> 0 and ZF=1.

Se executa ciclul pana cand contorul CX ajunge la 0, sau pana cand apare ZF (la o comparatie sau scadere cu operanzi egali).

Mnemonic: LOOPZ rel8 (cicleaza atata timp cat exista egalitate).
Actiune: DEC CX; jump short if count <> 0 and ZF=1.
Se executa ciclul pana cand contorul CX ajunge la 0, sau pana cand apare ZF (la o comparatie sau scadere cu operanzi egali).

Mnemonic: LOOPNE rel8 (cicleaza atata timp cat nu exista egalitate).
Actiune: DEC CX; jump short if count <> 0 and ZF=0.
Se executa ciclul pana cand contorul CX ajunge la 0, sau pana cand apare ZF (la o comparatie sau scadere cu operanzi diferiti).

Mnemonic: LOOPNZ rel8 (cicleaza atata timp cat nu exista egalitate).
Actiune: DEC CX; jump short if count <> 0 and ZF=0.
Se executa ciclul pana cand contorul CX ajunge la 0, sau pana cand apare ZF (la o comparatie sau scadere cu operanzi diferiti).

Modul de lucru:

In continuare, daca nu se specifica altfel, se va folosi pentru adresa efectiva valoarea implicita 0.

P 1 Sa se incarce in primele 3 locatii de memorie constantele 5566h, 3322h si 8899h si sa se ordoneze in ordine crescatoare continutul acestor locatii din memorie. Se va testa programul si cu valorile 4444h, 6666h si 2222h, respectiv 7777h, 3333h, 2222h.

P 2 Sa se incarce o zona de memorie de 20h de octeti cu constanta 33h.

P 3 Sa se incarce o zona de memorie de 20h de octeti cu numere crescatoare de un octet incepand cu 5.

P 4 Sa se adune continutul celor 20 de locatii de memorie incarcate de programul anterior, iar rezultatul, pe 16 biti, sa se plaseze in memorie cu octetul cel mai putin semnificativ la adresa efectiva 21h, si cel mai semnificativ la adresa 20h.

P 5 Sa se incarce o zona de memorie de 20h de octeti cu numere crescatoare din 10h in 10h .

P 6 Sa se incarce o zona de memorie de 20h de octeti cu numere descrescatoare din 10h in 10h incepand cu 200h.

P 7 Sa se gaseasca si sa se plaseze, la sfarsitul sirului, octetul maxim din 10h locatii de memorie incepand de la adresa 0.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 2226
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved