[LØST] Assembly: Print to console
Hej allesammen.
Jeg har skrevet et assembly program som kan udregne fibonacci tal. Men nu vil jeg gerne have at programmet udskriver tallene til terminalen.
Nogen der ved hvordan man gør, eller kender nogle gode tutorials? Bruger Gnu assembleren og skriver til x86 arkitekturen.
- Log in to post comments
Kommentarer8
Hvad med at bruge inline
Hvad med at bruge inline code i c?
Systemkald
Her er et eksempel på, hvordan man laver et systemkald til printf:
http://arstechnica.com/phpbb/viewtopic.php?f=20&t=44255
#2
Takker. Kikker lige på
#2
Takker. Kikker lige på det. Vender tilbage hvis jeg ikke kan få det til at virke.
Er nu kommet frem til at
Er nu kommet frem til at bruge inline c code. Jeg laver et kald af printf. Det eneste problem er når jeg linker min object fil, får jeg en undefined reference to `printf'
Hvordan for jeg linkeren (ld) til at kende min c kald?
Mangler du ikke at sætte en
Mangler du ikke at sætte en header fil
#5
tror jeg ikke, men min
#5
tror jeg ikke, men min kode ser sådan ud:
.section .data
string: .ascii "Testing\n\0"
.section .text
.globl main
main:
pushl $string
call printf
addl $4,%esp # remove parameters
movl $0, %ebx # exit code 0
movl $1 , %eax # sys_exit
int $0x80
når jeg linker:
marson@isak:~/test$ as main.s -o main.o
marson@isak:~/test$ ld main.o -o main
ld: warning: cannot find entry symbol _start; defaulting to 0000000008048074
main.o: In function `main':
(.text+0x6): undefined reference to `printf'
Min tanke med inline code i
Min tanke med inline code i c var som det her:
#include
int main(void)
{
int foo = 10, bar = 15;
asm ("addl %%ebx,%%eax"
:"=a"(foo)
:"a"(foo), "b"(bar)
);
printf("foo+bar=%d\n", foo);
return 0;
}
gem fil som c_asm.c
gcc c_asm.c -o mitprogram.exe
kør program ./mitprogram.exe
Kilde:
http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html
Har fundet løsningen.
Har fundet løsningen. Skulle linke mit program på følgende måde:
ld -I/lib/ld-linux.so.2 main.o -lc
og skulle bruge .globl _start istedet for main.