far call 이란 무엇인가요?

kese111의 이미지

WORD farcall[3];

farcall[2] = (selector<<3);

_asm

{

mov ebx,x

push ebx

call fword ptr [farcall]

mov res,eax

}

위의 코드가 뭘 의미하는지 모르겠습니다.

opcode는 ff 이고 값은 6바이트입니다.

인텔 매뉴얼 보면 이런 형식이

call m16:32 로 나오는데, 설명을 이해 못하겠습니다.

타입이 두개로 나뉘는데 B ModRM:r/m(r) 입니다.

설명은 다음과 같습니다.

In 64-bit mode: if selector points to a gate, then RIP = 64-bit displacement taken from gate

else RIP = zero extended 32-bit offset from far point referenced in the instruction.

64-bit mode는 아니니까 RIP = 32-bit offset 으로 확장된 zero 이거나

RIP = zero 이고 32-bit offset 으로 확장된거 둘 중 하나같은데

이 명령어의 정확한 의미를 알려주시면 갑사하겠습니다 ㅠ_ㅠ