Question

Because the address xxxx:yyyyyyyy is 32 bits in protected mode, I put a 48-bits address in a piece of memory and want to give indirect jmp, here is what I wrote:

mov eax,s1
mov [address],eax
mov ax,SelectorCode32
mov [address+4],ax
jmp  fword [address]

address:dd 0
        dw 0

But the nasm shows that jmp fword [address] is wrong, I've read some suggestions like this, but didn't help either, so what should I do?

Was it helpful?

Solution

The NASM's syntax for near and far calls is different from those of TASM and MASM.

Here are the two options for indirect jumps:

jmp [fptr] ; jump to CS:0x12345678
jmp far [fptr] ; jump to 0xABCD:0x12345678

fptr dd 0x12345678
     dw 0xABCD

You can also always push the far address onto the stack and do retf.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top