What happens when a 32-bit, 16-bit or 8-bit immediate relative or absolute jump is executed with the different values of the D-bit in the CS segment descriptor? So what's the resulting value of EIP after such a relative jump?
For example:
0000:FF80 JMP +7E. EIP=0 or 00010000?
0000:0000FF80 JMP +7E. EIP=0 or 00010000?
0000:FF80 JMP +007E. EIP=0 or 00010000?
0000:0000FF80 JMP +007E. EIP=0 or 00010000?
0000:FF80 JMP +000007E. EIP=0 or 00010000?
0000:0000FF80 JMP +0000007E. EIP=0 or 00010000?
Where 0000:FF80 is 16-bit default operand size(CS descriptor D-bit=0), 0000:0000FF80 is 32-bit default operand size(CS descriptor D-bit=1).
Anyone? Is the clearing of EIP's high 16-bits determined by the effective(affected by prefix 66h) operand size or by the CS's D-bit only?
Both might work the same in 16-bit real mode, as any overflow in EIP being executed after the jump triggers a general protection fault, which after execution of the jump only saves the lower half(16-bits) and reads the lower half on return(clearing the upper half).