transferuri condiționate și necondiționate

Deci, putem scrie deja prin simpla introducere în asamblare. Vom lua în considerare acum transferurile condiționate și necondiționate (similare în cazul în care-apoi-altceva, Goto Pascal). Se va aprecia faptul că orice program de sare încetini executarea programului (de obicei, este necesar pentru a efectua tranziția 5 din ciclurile procesorului, și, uneori, mai mult). În procesoarele moderne pentru a crește frecvența de ceas Înlănțuire utilizat. Faptul este că, pentru fiecare procesor de serviciu comandă necesită o serie de măsuri: prima măsură recunoaște comanda execută o altă treime ceva face altceva, al patrulea. În procesoarele moderne recunoscute până la o echipa, în același timp, să efectueze alte, ceva se face cu al treilea, al patrulea, și așa mai departe. Atunci când procesorul programului de transfer condiționat încarcă conducta de date, pornind de la punctul în care, în opinia sa, va conduce tranziția. În cazul unei preziceri ramură fără succes toate comenzile de conducte curente ar trebui să fie executat, atunci transportorul ori, efectuați o ramură condițională, și numai atunci conducta va fi încărcată din nou. În mod evident, aceasta este o influență negativă asupra eficienței. Este, în esență, un număr mai mic de comenzi procesate printr-o trecere a eșuat pe unitatea de timp. În plus, conducta de încărcare de date care nu sunt necesare. Cu cât conducta în procesor, cu atât mai repede se poate executa programe, dar, de asemenea, cu atât mai mare pierderea unei tranziții fără succes. Aceasta este, la aceeași frecvență a procesorului este mai bine, care este mai scurtă decât banda transportoare. Se înțelege că ori de câte ori este posibil să se facă fără tranziții, mai bine fără ele. De exemplu, este mai bine să utilizați comenzi de tip cmpxchg. cmp decât cu tranziții condiționate. În acest caz, unitatea CPU responsabilă de predicție ramură nu este activat (care reduce probabilitatea de mers în gol). Dar fără echipele noastre de tranziție sunt foarte limitate, prin urmare, este necesar să le ia în considerare (de fapt, ele sunt folosite destul de des, mai ales compilatoare!) Instrucțiuni de control al transferurilor


1) eticheta JMP - un salt necondiționat la o etichetă. De exemplu: @exit JMP; Este folosit foarte des. efectuează în esență, aceeași acțiune ca și goto Pascal

2) Eticheta JCC (JCC - una dintre comenzile din tabelul de mai jos) - un salt condiționat. Tranziția este executată în cazul în care condiția este îndeplinită. În realitate, fiecare condiție este orice steaguri condiție. De obicei, înainte de o instrucțiune de ramură condițională este executată comanda cmp. deși acest lucru nu este necesar. In exemplul de mai jos, dorim să găsiți EAX numărul modulului:
nbspnbsp cmp eax, 0;
nbspnbsp jge @NoNEG;
nbspnbsp Neg EAX;
@NoNEG:
Dacă veți înțelege steagurile. și să înțeleagă ce steagurile de fapt se schimbă în fiecare echipă, puteți scrie salturi condiționate, de exemplu, după ce echipa decembrie Se poate ajunge, uneori, unele câștiguri de performanță. instrucțiune ramură condițională:

Condiția pentru CMP

Condiția pentru CMP

dacă este mai mare sau egal
în cazul în care nu există nici un transfer

dacă este mai mare sau egal

în cazul de mai jos
în cazul în care transferul

dacă este mai mică sau egală

dacă este mai mică sau egală

dacă este egal
dacă la zero

în cazul în care nu este egal
în cazul în care nu este zero

în cazul în care există o depășire

în cazul în care nu există nici o depășire

în cazul în care există paritate

în cazul în care nu există nici o paritate

articole similare