oops! worked fine. Sorry i forgot another fasm file where i had to
insert the same. Sorry for the confusion. What you say is right
On Mar 24, 10:52 am, suchi_01 <spamt...@[EMAIL PROTECTED]
> wrote:
> Hi Frank,
> I am sorry i was not clear about the environment. The code
> (assembly language function) is called during boot time by a
> bootsector code (after enabling protected mode). I am successful in
> calling the function but it does not return back to the C code back
> (ie., next line after the call in C Code). At boot time there is no
> elf loader and it is difficult to point it to where it has to return.
> Mysteriously, using global in nasm does the stuff!
>
> Suchindra Chandrahas
>
> On Mar 22, 3:24 pm, Frank Kotler <spamt...@[EMAIL PROTECTED]
> wrote:
>
> > suchi_01 wrote:
> > > Hi All,
> > > There is a complicated issue here. I have
downloaded
> > >fasmsource of a driver and want to integrate it to my kernel.
> > > However, there is a problem:
>
> > > 1. If i call aFASMfunction from within C code (kernel), it is not
> > > able to return back to the next line in C Code
>
> > What *does* it do?
>
> > > 2. If i call aNASMfunction from within C Code, it works properly (it
> > > returns back to next line in C Code)
>
> > > Here are the code snippets:
>
> > >NASM:
>
> > >global<func name>
>
> > > <func name>:
> > > ret
>
> > >FASM:
>
> > >public<func name>
>
> > > <func name>:
> > > ret
>
> > > Is there aglobalkeyword or similar stuff inFASM?
>
> > "public", AFAIK. We need to tellFasma "format", too (in the source,
> > not on the command line likeNasm). As a test, I just "converted" aNasm
> > demo I had toFasm(just added "format elf", changed "global" to
> > "public" and fixed up the section declaration). Worked fine. The only
> > issue I can see is that I don't thinkFasmsup****ts OMF. What format are
> > you using?
>
> > Best,
> > Frank
>
> > ;---------------
> > format elf
>
> > publicgetvendor
>
> > section ".text" executable
> > getvendor:
> > pusha
> > xor eax, eax
> > cpuid
> > mov eax, [esp + 36]
> > mov [eax], ebx
> > mov [eax + 4], edx
> > mov [eax + 8], ecx
> > mov byte [eax + 12], 0
> > popa
> > xor eax, eax
> > ret
> > ;-----------------
>
> > And the C caller...
>
> > #include <stdio.h>
>
> > void getvendor(char *vendorbuf);
>
> > int main(void)
> > {char vendorbuf[13];
> > getvendor(vendorbuf);
>
> > puts(vendorbuf);
> > return 0;
> > }


|