Author Topic: far call  (Read 3287 times)

Alfonso V

  • Guest
far call
« on: June 05, 2006, 10:34:10 AM »
Hi all

I need to know how can i do a fall call to an ISR

I've tried with:
CALL FAR DWORD [direction]

But it crashed... :-(

There's a posibility with
JMP FAR [direction]

But I don't want it, because i need a far call, not a far jump.

There's another posibility with:
DB 9Ah
farlabel DD [direction]

┬┐How can i put my direction in "[direction]"

Nevertheless I'd like something like "CALL FAR DWORD"

Thank you


  • Guest
Re: far call
« Reply #1 on: June 05, 2006, 01:22:55 PM »
Not enough information. What's our environment? Looks like 32 bit? Homemade? Or some existing OS? What are you using for target cs?

I would have said that existing OSen wouldn't let you do a far call at all (from userland), but I just tried it, and if I use *same* cs - 23h - it works! Rather pointless, but it works. Something like:

target dd subbie
       dw 23h

call far [target]

(say hi)

Pushing flags first ought to "fake" an isr - I didn't try that.

I think you're on the right track with your first try, and something else is wrong...

If all else fails, post the code (and may God forgive SF for what they do to it :)


Alfonso V

  • Guest
Re: far call
« Reply #2 on: June 06, 2006, 10:06:20 AM »
Hello, Frank

I'm working in a 16 bit MS-DOS system and I'm trying when a BIOS int is working. I'm using this procedure:

    INC       BYTE [CS:InBios]            ; Increment InBios flag
    CALL      FAR DWORD [CS:INT10+IsrAnterior]; Call to old Int 10h ISR
;     DB        2Eh,0FFh,1Eh,21h,01h      ; What previos line must be
    DEC       BYTE [CS:InBios]            ; Decrement InBios flag

Where InBios is a byte variable that "knows" if BIOS is working.

I've done this program in MASM yet, but I'm stopped in nasm far call to an ISR.

If I do a far call to a far procedure that ends with "RETF", I can use:
CALL ProcName   ; this push IP

RETF            ; this pop CS:IP

So this work fine. But push cs and call ISR doesn't work with a far call to an ISR.

Before doing a far call to an ISR we need do a PUSHF because IRET do a POPF also.

Thank you


  • Guest
Re: far call
« Reply #3 on: June 06, 2006, 10:30:42 AM »
Ah! 16-bit! The "dword" fooled me (and you). Get rid of that, and I think it'll work. That makes it a 32-bit far call, inserting a 66h byte.