[fpc-pascal] Interface with NASM
    Felipe Monteiro de Carvalho 
    felipemonteiro.carvalho at gmail.com
       
    Thu Sep 16 09:01:18 CEST 2010
    
    
  
Strange, I took a look and no idea why it doesn't work with the linked
.o file =) Maybe disassembling what nasm produces could show
something, but I don't know which GNU tool could be used for that...
The following program works for me:
program driver;
uses asmio;
{$ASMMODE att}
procedure tes2; pascal;
begin
  printc(Char(65));
end;
procedure tes; assembler; [alias:'tes'];
asm
  movl	$65,%eax
  push	%eax
  call printc
end;
begin
  tes2;
  tes;
end.
And here is the assembler generated:
fpc -s driver.pas
edit driver.s
.text
	.align 4
.globl	_P$DRIVER_TES2
_P$DRIVER_TES2:
	pushl	%ebp
	movl	%esp,%ebp
	subl	$24,%esp
	movl	%ebx,-12(%ebp)
	movl	%esi,-8(%ebp)
	movl	%edi,-4(%ebp)
	movl	$65,%eax
	movl	%eax,(%esp)
	call	L_ASMIO_PRINTC$CHAR$stub
	movl	-12(%ebp),%ebx
	movl	-8(%ebp),%esi
	movl	-4(%ebp),%edi
	leave
	ret
.text
	.align 4
.globl	_P$DRIVER_TES
_P$DRIVER_TES:
.reference tes
.globl	tes
tes:
.reference _P$DRIVER_TES
	subl	$12,%esp
	movl	$65,%eax
	pushl	%eax
	call	_ASMIO_PRINTC$CHAR
	addl	$12,%esp
	ret
-- 
Felipe Monteiro de Carvalho
    
    
More information about the fpc-pascal
mailing list