#include <stdio.h>
#include <stdlib.h>

/* Globalni niz */
char  message[] = "Hello world\n";

int main()
{

/* Asemblerski kod koji poziva funkciju printf() */
__asm__(
"leaq message, %rdi\n\t"
"call printf\n\t"
);

/* 
   S obzirom da gcc prevodilac podrazumevano generise asemblerski kod u
   AT&T sintaksi, moramo da koristimo tu sintaksu, kako bi se ugradjeni
   asemblerski kod uklopio u ono sto prevodilac generise. Kod AT&T 
   sintakse je redosled operanada drugaciji (na kraju se navodi 
   odredisni operand), a ispred registara se mora koristiti prefix %.
   Takodje, instrukcije imaju sufikse koji odredjuju duzinu operanda
   (npr. addl oznacava 32-bitne operande, addb 8-bitne, addw 16-bitne,
   a addq 32-bitne operande. 
   U intel sintaksi se ovi sufiksi ne navode, vec asembler sam zakljucuje
   na osnovu registarskih operanada o kojoj se duzini radi (ako nema 
   registarskih operanada, tada se navodi npr. dword ptr ispred memorijskog
   operanda)). 

   Alternativno, mozemo u inline asembleru koristiti i Intel sintaksu, ali
   je tada prilikom prevodjenja neophodno zadati opciju -masm=intel gcc
   prevodiocu kako bi mu rekli da i on generise kod u toj sintaksi. Ovo
   cemo inlustrovati u sledecem primeru. 
 */
 
return EXIT_SUCCESS;

}
