11.13 Calling functions with an address in the register

--------------------------------------------------------

C-- lets you call a function whose address is in a register. The

parameters for this call are transferred only via the stack. The type of

function call for Windows programs is 'stdcall' and for other programs

'pascal'. The address of a function for a 32-bitprogram should be in a

32-bit register, and for a 16-bit program in a 16-bit register. This sort

of call is thought to have a return of type 'unsigned int'. For example:

BX = # proc;

BX (a);

IF ( BX(b) == 0 ) AX=2;

The following code is produced:

test.c-- 8: BX=#proc;

0104 BB1A01 mov bx,11Ah

test.c-- 9: BX(a);

0107 FF76FC push word ptr [bp-4]

010A FFD3 call near bx

test.c-- 10: IF (BX(b) == 0)AX=2;

010C FF76FE push word ptr [bp-2]

010F FFD3 call near bx

0111 85C0 test ax,ax

0113 7503 jne 118h

0115 B80200 mov ax,2