2009-02-22, 19:43
  #1
Medlem
r det nn som kan lsa fljande problem:

Anta att man skriver ett program i C men vill skriva optimerade funktioner i assembler.
Och d jag menar inte "inline assembler"
Hur kompillerar man ett sdant program?

Hittade exempel som jag ej fr till...
Kod:
//main.c
main()
{
   int i = sqr(11);
   printf("%d\n",i);
}

//sqr.s
.globl sqr
sqr:
   movl 4(%esp), %eax
   imull %eax, %eax
   ret

Eller anropa C frn asm:
Kod:
//print.c
print(int i)
{
   printf("%d\n",i);
}

//main.s
.globl main
main:
   movl $123, %eax
   pushl %eax
   call print
   addl $4, %esp
   ret

Jag kr linux p min dator, Ubuntu -AMD64
Citera
2009-02-22, 21:13
  #2
Medlem
fixiefyllas avatar
edit. opps sg nu att du inte menade "inline assembler" vilket r den enda jag knner till iaf.

mer intressant r vl vilken kompilator du kr. antar att det r typ gcc
s jag har googlat t dig.
http://www.ibiblio.org/gferg/ldp/GCC...bly-HOWTO.html
__________________
Senast redigerad av fixiefylla 2009-02-22 kl. 21:21.
Citera
2009-02-22, 22:37
  #3
Medlem
liqueurs avatar
Citat:
Ursprungligen postat av MiSTerWho
r det nn som kan lsa fljande problem:

Anta att man skriver ett program i C men vill skriva optimerade funktioner i assembler.
Och d jag menar inte "inline assembler"
Hur kompillerar man ett sdant program?

Hittade exempel som jag ej fr till...
Kod:
//main.c
main()
{
   int i = sqr(11);
   printf("%d\n",i);
}

//sqr.s
.globl sqr
sqr:
   movl 4(%esp), %eax
   imull %eax, %eax
   ret

Jag kr linux p min dator, Ubuntu -AMD64

..64 bitar == 8 byte


Felet beror troligen p att du kr en 64bitar installation, d r en long 8 byte, inte 4 som i 32bit,

Kod:
//sqr.s
.globl sqr
sqr:
   movl 8(%rsp), %rax
   imull %eax, %rax
   ret

Edit:

glmde att 64bitars register har andra namn
EAX -> RAX
__________________
Senast redigerad av liqueur 2009-02-22 kl. 22:53.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in