Salturile indirecte permit executarea unui salt la o adresă calculată dinamic în timpul rulării, stocată într-un registru sau într-o tabelă de pointeri din memorie, eliminând lanțurile lungi de comparații if-else.
section .rodata
; Tabela de adrese (Jump Table) pentru valorile 0, 1, 2:
tabela_cazuri:
dq caz_adunare
dq caz_scadere
dq caz_inmultire
section .text
global executa_comanda
executa_comanda:
; RDI conține codul comenzii (0..2)
cmp rdi, 2
ja caz_invalid ; Verificare limită superioară
; Salt indirect direct prin tabela indexată:
lea rbx, [rel tabela_cazuri]
jmp [rbx + rdi*8] ; Sare instant la eticheta corespunzătoare
caz_adunare:
; ... logica adunare ...
ret
caz_scadere:
; ... logica scădere ...
ret
caz_inmultire:
; ... logica înmulțire ...
ret
caz_invalid:
mov rax, -1
ret
Optimizare compilator: Instrucțiunile switch-case dense din limbajele C/C++ sunt compilate întotdeauna ca tabele de salturi de complexitate constantă $O(1)$.
Întrebări & Exemple de Cod:
Salturi Indirecte în x86_64: Tabele de Salturi (Jump Tables) pentru SwitchAi o nelămurire despre utilizarea comenzii
Salturi Indirecte în x86_64: Tabele de Salturi (Jump Tables) pentru Switchsau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.