I can't get full grip on specifics of far/near versions of jmp/call. As I understand near jmp/call instructions use relative offset from instruction itself as operand. Far jmp/call instructions use absolute address as operand.
1) In protected mode this absolute address is just virtual address placed by the compiler.
2) In real mode you usually write:
jmp [new number of code segment][proc name as offset]
then absolute address is computed by formula:
address = new number * 10h + offset
which is really physical address in real mode.
Does CPU automatically update CS when performing far jmp/call? For example when BIOS code jumps to loaded boot sector code. I don't see setting CS value in source code of boot sector file.
In protected mode: cs = index in descriptor table = absolute address / page size
In real mode: cs = segment index in RAM = specified "new number of code segment"
Are my assumptions correct?