in Assembly, i have a JUMP table with about 2000 JUMP points (labels) and each label has about 20-30 lines of Assembly instruction ... so yes ... it's a big (switch) with big body of source code ... for example:
.TABLE:
DD .case0
DD .case1
DD .case2
DD .case3
DD .case4
...
...
...
DD .case2000
and each case has some codes like this (each Case has about 20-30 lines of Instructions)
.case0:
push ...
mov ...
push ...
mov ...
push ...
mov ...
...
jmp [4 * eax + .TABLE] ;; it's may be the 'case1000' (eax is our case)
.case1:
push ...
mov ...
push ...
mov ...
push ...
mov ...
...
jmp [4 * eax + .TABLE] ;; it's may be the 'case1000' (eax is our case)
.case2:
push ...
mov ...
push ...
mov ...
push ...
mov ...
...
jmp [4 * eax + .TABLE] ;; it's may be the 'case1000' (eax is our case)
...
...
...
i may need to jump to each label about 10 times and in a moment i may be at case2
and next time i may be at case1020
(long jump)
Now my question about this Jumps ... for example, if i want to jump from case2
to case1020
, is there any
performance problem or this long jump is Exaclty same as for example 'case0' to 'case100' ??
my opinion : jmp
just change index and no matter (no diffrent in performance with less than 127 byte jump) even if we jump over 150Kb instructions ... true ?
Also i know we have short jump and near jump and far jump ... but i think short jump is just about instruction Code size (127) and there is no diffrents in performance between jumping 127 byte or jumping 100000000 bytes ....
is it true ?