Avatar billede mickni33 Nybegynder
29. marts 2004 - 11:24 Der er 10 kommentarer og
1 løsning

ASM og Klasser

kan man bruge eksterne objekter i et assembler program ?

Jeg  har en Timerklasse som udregner timer minutter og seconder.
jeg kunne nu godt tænke mig at lave en slags getMinutes i mit assembler program men hvordan erklærer man sådanne kald i assembler da metoden getMinutes jo tilhører en klasse?

Jeg har prøvet med extern "C" men kunne godt tænke mig at lave det som C++ kan det lade sig gøre ?

extern _getMinutes:far

og så
call _getMinutes
Avatar billede arne_v Ekspert
29. marts 2004 - 11:57 #1
Selvfølgelig kan det lade sig gøre.

Men om det er nemt/praktisk er en anden sag.

Prøv og compile din C++ med option om at outputte assembler kode og
se hvad den generererer.

Det er compiler specifikt hvordan det virker men jeg vil forvetne at:

class X
{
  public:
      void doit(int a);
};

svarer til:

void X_doit_int(X x, int a)

i de compilede kode.

Men den præcise konvention er som sagt compiler specifik.

Husk at virtual metoder er en function pointer.
Avatar billede mickni33 Nybegynder
29. marts 2004 - 17:25 #2
jeg bruger kommandoline tasm.
Hvilken fil skal jeg kigge i?
Avatar billede mickni33 Nybegynder
29. marts 2004 - 17:25 #3
Har du nogle gode links fra nettet ?
Husk at svare
Avatar billede mickni33 Nybegynder
29. marts 2004 - 17:26 #4
Nåååå jeg skulle vælge nogle options ok det prøver jeg :-)
Avatar billede arne_v Ekspert
29. marts 2004 - 17:28 #5
Jeg mener at du compiler klasse definitionen i C++ med en option der
viser den genererede assembler kode og så koder du din assembler efter det du
kan se.
Avatar billede mickni33 Nybegynder
29. marts 2004 - 17:28 #6
smaaaart
Avatar billede arne_v Ekspert
29. marts 2004 - 17:31 #7
Jeg har lige testet med:

class X
{
  public:
      void doit(int a);
};

void X::doit(int a)
{
}

og med mingw compileren giver:

g++ -S z.cpp

følgende:

    .file    "z.cpp"
    .text
    .align 2
.globl __ZN1X4doitEi
    .def    __ZN1X4doitEi;    .scl    2;    .type    32;    .endef
__ZN1X4doitEi:
LFB1:
    pushl    %ebp
LCFI0:
    movl    %esp, %ebp
LCFI1:
    popl    %ebp
    ret
LFE1:

Og __ZN1X4doitEi lyder *meget* som noget der kan kaldes !
Avatar billede mickni33 Nybegynder
29. marts 2004 - 17:32 #8
jajajajajajaja :-)
Avatar billede mickni33 Nybegynder
29. marts 2004 - 21:35 #9
det er faktisk ret smart at man kan lave noget asssembler kode ud fra noget C når man nu er stærkest i C og skal have assembler med i sit projekt
Avatar billede mickni33 Nybegynder
01. april 2004 - 13:33 #10
Husk at lave svar :-)
Avatar billede arne_v Ekspert
01. april 2004 - 13:36 #11
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester