Any of those instructions could #PF
(page fault exception) on a memory operand (or other ways depending on the instruction) and change CS:EIP to a totally new value loaded from the IDT. e.g. push dword [0]
. That would include changing EIP by more than 100 unless your current EIP is within 100 bytes of the page-fault exception handler's address.
Or if we're talking about where the exception handler returns, if your process had a signal handler installed for SIGSEGV, the kernel could deliver that signal, effectively changing EIP within your process to your segfault signal handler.
But I think the intent of the question is about changing EIP by a specific desired relative amount, e.g. to reach another block of code. (Also not changing CS, the code-segment, so you stay in user-mode if you were there to start with.) I.e. 100 bytes away from the current EIP. The phrasing is awkward and could be read as setting EIP to any absolute value > 100, but x86 branches are relative and the question makes more sense that way.
As @zx485 points out, you need a control transfer instruction, aka a jump or branch. 386 (i.e. any machine with an EIP not just 16-bit IP) supports jcc rel32
conditional near jump as well as the shorter jcc rel8
short jump, so conditional jumps can reach anywhere in the entire 32-bit address space, same as jmp rel32
and call rel32
. https://www.felixcloutier.com/x86/jcc.
But even a jcc rel8
(like JZ or JNZ) or jmp rel8
encoding can reach from -128 to +127 bytes relative to the end of the instruction. (Signed 8-bit 2's complement branch displacement.)