O instrucțiune de salt este o instrucțiune de procesor care întrerupe secvența continuă de execuție a instrucțiunii, forțând selectarea și executarea instrucțiunilor ulterioare de la o adresă dată arbitrar . Folosit pentru a organiza instrucțiuni condiționale, bucle, pentru a comunica cu subrutine . Execuția unei instrucțiuni de ramificație în microprocesoarele moderne este plină de pierderi de performanță din cauza timpilor de inactivitate ale conductei .
Dacă contorul de programe este disponibil programatic ca registru de destinație, orice instrucțiune de modificare a contorului de program va servi ca instrucțiune de salt.
Organizarea ciclului de întârziere în procesorul ARM:
MOV R0 , #0 x10000 întârziere: SUBS R0 , R0 , #1 întârziere BNESalt la o adresă calculată într-un procesor ARM:
MOV PC , R0O ramură condiționată este o comandă către un dispozitiv de calcul programabil pentru a schimba ordinea de execuție a programului în conformitate cu rezultatul verificării unei anumite condiții.
Cel mai adesea, o tranziție condiționată are două etape: în prima etapă, unele valori care determină condiția de tranziție sunt comparate între ele, în a doua, tranziția în sine este efectuată.
Necesitatea procesării corecte a salturilor condiționate lasă o amprentă serioasă asupra logicii procesoarelor moderne pipeline . Salturile condiționate se pot face în două moduri. Salturile condiționate executate schimbă valoarea contorului de instrucțiuni al procesorului la valoarea calculată a adresei de salt. Unexecutable - adăugați la valoarea contorului programului un număr egal cu lungimea instrucțiunii curente în octeți pentru a trece la execuția următoarei instrucțiuni. Determinarea incorectă a tipului de ramură condiționată poate duce la întârzieri semnificative în conductă și, în consecință, la o pierdere mare a performanței computerului .
program C++ #include <iostream> int main () { int i ; std :: cout << "Introduceți un număr întreg" << std :: endl ; std :: cin >> i ; std :: cout << "Ai intrat" ; if ( i >= 0 ) { // Verificarea condiției // Acțiuni întreprinse dacă condiția este îndeplinită std :: cout << "pozitive" ; } else { // Acțiuni de întreprins dacă condiția nu este îndeplinită std :: cout << "negative" ; } std :: cout << „număr” << std :: endl ; returnează 0 ; }