Oprettet ons. d. 14. januar 2009 kl. 18:42:29

baxos
baxos (11.700 point. Point ude: 495)

Externt kode i fpc

Hej eksperter!
Sidder og skriver noget kode og har brug for at køre noget assembler fra dens egen fil, og tænkte på om det ikke kan lade sig gøre at køre nogle af funktionerne gennem pascal programmet altså externt?

compilere med nasm til en object fil og derefter vil jeg så linke det?

Skrevet ons. d. 14. januar 2009 kl. 18:52:51| #1

arne_v
arne_v (1.016.169 point)
Du spoerger til:
- hvad du skal skrive i Pascal koden for en funktion som du har lavet i assembler
- hvordan du fortaeller FPC at den skal linke en .OBJ fil med ind
?

Skrevet ons. d. 14. januar 2009 kl. 19:10:39| #2

hvilken platform og processor er koden fokuseret på?

./psycosoft-funware :)

Skrevet tor. d. 15. januar 2009 kl. 12:14:26| #3

hrc
hrc (33.287 point)
Har aldrig prøvet, men kan du ikke lave det direkte i BASM, i delphis kode?

Skrevet tor. d. 15. januar 2009 kl. 17:18:11| #4

baxos
baxos (11.700 point)
Arne_v kun det første spørgsmål..
Det er bare på x86
og hrc nej det kan desværre ikke gøres direkte

Skrevet tor. d. 15. januar 2009 kl. 17:29:09| #5

arne_v
arne_v (1.016.169 point)
Der er ikke bare:

procedure foo(v : integer); external;
function bar(v : integer) : integer; external;

?

Skrevet fre. d. 16. januar 2009 kl. 16:50:41| #6

baxos
baxos (11.700 point)
kernel.o: In function `kmain':
kernel.pas:(.text+0x3a): undefined reference to `KERNEL_KTEST'

Får bare denne fejl når jeg linker den så

Skrevet fre. d. 16. januar 2009 kl. 17:11:53| #7

arne_v
arne_v (1.016.169 point)
Calling convention problem maaske ?

Der skere nogle forskellige ting med navn alt efter calling convention.

Skrevet lør. d. 17. januar 2009 kl. 20:27:22| #8

baxos
baxos (11.700 point)
hmm muligvis..
hvordan sker det og hvordan skal jeg løse problemet? :)

Skrevet lør. d. 17. januar 2009 kl. 23:18:54| #9

arne_v
arne_v (1.016.169 point)
Følgende viser noget som virker:

C:\>type add.c
int add_c(int a, int b)
{
    return a + b;
}

C:\>type add.s
        .text
.globl _add_asm
_add_asm:
        pushl  %ebp
        movl    %esp, %ebp
        movl    12(%ebp), %eax
        addl    8(%ebp), %eax
        popl    %ebp
        ret

C:\>type testasm.pas
program testasm;

{$L add_c.obj}
{$L add_asm.obj}

function add_c(a, b : integer) : integer; cdecl; external;
function add_asm(a, b : integer) : integer; cdecl; external;

begin
  writeln(add_c(2, 3));
  writeln(add_asm(2, 3));
end.

C:\>gcc -c add.c -o add_c.obj

C:\>gcc -c add.s -o add_asm.obj

C:\>fpc testasm.pas
Free Pascal Compiler version 2.2.0 [2007/09/09] for i386
Copyright (c) 1993-2007 by Florian Klaempfl
Target OS: Win32 for i386
Compiling testasm.pas
Linking testasm.exe
12 lines compiled, 0.1 sec, 23632 bytes code, 1144 bytes data

C:\>testasm
5
5

Skrevet søn. d. 18. januar 2009 kl. 13:55:12| #10

baxos
baxos (11.700 point)
Det vil jeg straks prøve når jeg lige får mulighed for det :)
Hvis det nu volder problemer skulle jeg måske sige at jeg compilere alle mine pas filer til .obj og derefter linker dem til en elf

Skrevet søn. d. 18. januar 2009 kl. 15:40:28| #11

baxos
baxos (11.700 point)
Hvad er det forresten for noget asm du bruger?

Skrevet søn. d. 18. januar 2009 kl. 15:42:57| #12

arne_v
arne_v (1.016.169 point)
Jeg bruger GNU assembler. Mest fordi at jeg har snydt. Jeg fik C compileren
til at outputte assembler for C koden og saa tilrettede jeg den.

:-)

Skrevet søn. d. 18. januar 2009 kl. 15:51:12| #13

baxos
baxos (11.700 point)
haha okay jeg vil lige forsøge det

Skrevet søn. d. 18. januar 2009 kl. 16:02:29| #14

baxos
baxos (11.700 point)
Virker stadig ikke kan sagtens compilere .pas filen uden fejl, men når jeg så linker med ld får jeg fejlen ?

Skrevet søn. d. 18. januar 2009 kl. 21:22:04| #15

arne_v
arne_v (1.016.169 point)
Du har ikke mulighed for ligesom mig at lade fpc kommandoen linke ?

Skrevet søn. d. 18. januar 2009 kl. 21:58:51| #16

baxos
baxos (11.700 point)
Nej desværre ikke da det ikke er til windows den binære fil skal køres

Skrevet søn. d. 18. januar 2009 kl. 22:00:26| #17

arne_v
arne_v (1.016.169 point)
Findes samme mulighed ikke på *nix ?

Skrevet man. d. 19. januar 2009 kl. 16:56:17| #18

baxos
baxos (11.700 point)
Det skal køre på mit eget lille system hehe =)

Skrevet tir. d. 20. januar 2009 kl. 04:30:21| #19

arne_v
arne_v (1.016.169 point)
Nu har jeg smidt fpc på min Linux.

int add_c(int a, int b)
{
    return a + b;
}
        .text
.globl add_asm
add_asm:
        pushl  %ebp
        movl    %esp, %ebp
        movl    12(%ebp), %eax
        addl    8(%ebp), %eax
        popl    %ebp
        ret

program testasm;

{$L add_c.o}
{$L add_asm.o}

function add_c(a, b : integer) : integer; cdecl; external;
function add_asm(a, b : integer) : integer; cdecl; external;

begin
  writeln(add_c(2, 3));
  writeln(add_asm(2, 3));
end.

gcc -c add.c -o add_c.o
gcc -c add.s -o add_asm.o
fpc-2.2.2/bin/fpc testasm.pas
./testasm

5
5

Skrevet tir. d. 20. januar 2009 kl. 16:37:43| #20

baxos
baxos (11.700 point)
Problemet er jo at jeg skal skabe en flad(?) binær fil der skal køres på et helt tredje system ergo jeg bliver nød til at bruge ld til at linke det sammen og det er først der den fejler ikke i selve compileringen af pascal koden

Skrevet søn. d. 01. februar 2009 kl. 19:04:08| #21

arne_v
arne_v (1.016.169 point)
Så bruger du -Cn for at få fpc til kun at compile og ikke linke og -sh for at få genererer
et link script som du kan kalde når du har lyst.

Skrevet tir. d. 03. februar 2009 kl. 17:58:36| #22

baxos
baxos (11.700 point)
Hmm nu har vi fat i noget af det rigtige, men synes stadig ikke jeg kan få det til at virke .. Sh genere heller intet link
script?

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Farve hver 2. linie i DB grid

Oprettet den 19. maj 2012 kl. 14.29
koonz giver 60 point for svar | Giv et svar »

COM- OBJECTER + Delph 7 + Windows XP

Oprettet den 19. maj 2012 kl. 12.47
snestrup2000 giver 30 point for svar | Giv et svar »

DLL + forms = problemer ???

Oprettet den 18. maj 2012 kl. 16.44
snestrup2000 giver 30 point for svar | Giv et svar »



   




Tips & Tricks fra PC World

Teaser billede

Læserne: Her er vores værste it-indkøb

Det er ikke al it-udstyr, som er det rene guld. Her er nogle af læsernes skrækhistorier.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan siger du farvel til Facebook

Læs her, hvordan du dropper Facebook og i stedet anvender nogle brugervenlige alternativer, så du stadig kan være social på nettet.


Nyheder fra Computerworld

Teaser billede

Galleri: De fedeste håndholdte gennem 40 år

Her har du de mest banebrydende håndholdte computere gennem alle tider.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger