[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [CPROG] inline asm



Jeppe Sorensen <sslug@sslug> wrote:
: In article <sslug@sslug>, "Mads
: Bondo Dydensborg" <sslug@sslug> wrote:


: Meningen var at jeg skulle begynde at skrive kerne kode på længer sigt
: men jeg skal lige først lære c/c++ og asm bedre at kende. Jeg har programmer
: c/c++ i over et året men ikke asm, kender kun lidt til hvordan det virker!

Det du skal have fat i er asm() gcc pragmaet.
Du kan nok finde den præcise dokumentation i GCC info siderne. Og du kan 
kigge i kerne koden for eksempler. Vær advaret om at det er meget skummelt i 
stil med dette:

#define POP_STATE(x) \
asm volatile ("movl %0, %%esp\n\t" \
              "popl %%ebx\n\t"  \
              "popl %%esi\n\t"  \
              "popl %%edi\n\t"  \
              "popl %%ebp\n\t"  \
              : : "m" (x))

Først er der en streng med selve assembler koden, i dette tilfælde kode 
til at gemme tilstand på stakken, derefter 2 specifikationer af hvilke
registre koden benytter, overførsel af parametre (i dette tilfælde x) mm., 
således at oversætteren ved hvordan den skal reagere.  

Det kan være instruktivt at kompilere nogle HelloWorld programmer med gcc -S 
og se hvad der kommer ud af det. At forstå stakrammer og hvad der sker ved 
funktionskald kræver lidt hjernevridning.

Vær opmærksom på at assembler koden der bruges af GAS er i AT&T format, der 
bruger lidt andre symboler, og desuden omvendt rækkefølge af kilde og destination
end Intel standard format, hvilket er det du vil se i DOS/Windows bøger om 
assembler. Men tilgengæld ligner det mere Motorola m68k og MIPS/PowerPC assembler.

: Og man skal jo starte et sted :)

Jep. Man kan dog skrive meget kerne kode uden assembler, da nødvendige 
funktioner er lavet som makroer, og man kan komme langt med C selv, der
jo er kendt som "portabelt assembler" :) 

Mvh Morten
-- 



 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2005-08-10, 20:08 CEST [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *