Code Comments

Programming Forum and web based access to our favorite programming groups.
For Programmers: Free Programming Magazines | New: Database administration forum
Registration is free! Edit your profileCalendarFind other membersFrequently Asked QuestionsSearch -> 
Post New Thread











Thread
Author

Problem with fasm
Hi All,
There is a complicated issue here. I have downloaded
fasm source of a driver and want to integrate it to my kernel.
However, there is a problem:

1. If i call a FASM function from within C code (kernel), it is not
able to return back to the next line in C Code
2. If i call a NASM function 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 a global keyword or similar stuff in FASM?


Report this thread to moderator Post Follow-up to this message
Old Post
suchi_01
03-22-08 12:58 PM


Re: Problem with fasm
suchi_01 wrote:
> Hi All,
>                   There is a complicated issue here. I have downloaded
> fasm source of a driver and want to integrate it to my kernel.
> However, there is a problem:
>
> 1. If i call a FASM function 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 a NASM function 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 a global keyword or similar stuff in FASM?

"public", AFAIK. We need to tell Fasm a "format", too (in the source,
not on the command line like Nasm). As a test, I just "converted" a Nasm
demo I had to Fasm (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 think Fasm supports OMF. What format are
you using?

Best,
Frank

;---------------
format elf

public getvendor

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;
}


Report this thread to moderator Post Follow-up to this message
Old Post
Frank Kotler
03-22-08 12:58 PM


Re: Problem with fasm
Hi Frank,
Thanks for the reply. Will try it and let you know. This
is precisely what i want to do, but the problem is that the bootsector
code does not have an elf loader yet, so i don't know whether .text
part will be identified and put in the right place or not during boot
process

Suchindra Chandrahas





On Mar 22, 3:24 pm, Frank Kotler  <spamt...@crayne.org> wrote:
> suchi_01 wrote: 
> 
>
> What *does* it do?
>
>
> 
> 
> 
> 
> 
> 
> 
> 
> 
>
> "public", AFAIK. We need to tell Fasm a "format", too (in the source,
> not on the command line like Nasm). As a test, I just "converted" a Nasm
> demo I had to Fasm (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 think Fasm supports OMF. What format are
> you using?
>
> Best,
> Frank
>
> ;---------------
> format elf
>
> public getvendor
>
> 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;
>   }


Report this thread to moderator Post Follow-up to this message
Old Post
suchi_01
03-24-08 08:58 AM


Re: Problem with fasm
suchi_01 wrote:
> Hi Frank,
>             Thanks for the reply. Will try it and let you know. This
> is precisely what i want to do, but the problem is that the bootsector
> code does not have an elf loader yet, so i don't know whether .text
> part will be identified and put in the right place or not during boot
> process

Hi Suchindra,

Doesn't sound like a Fasm/Nasm problem, really. You might want to look
at GRUB, rather than write your own.

http://www.gnu.org/software/grub/

Best,
Frank


Report this thread to moderator Post Follow-up to this message
Old Post
Frank Kotler
03-24-08 08:58 AM


Re: Problem with fasm
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...@crayne.org> wrote:
> suchi_01 wrote: 
> 
>
> What *does* it do?
>
>
> 
> 
> 
> 
> 
> 
> 
> 
> 
>
> "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 thinkFasmsupports 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;
>   }


Report this thread to moderator Post Follow-up to this message
Old Post
suchi_01
03-24-08 08:58 AM


Re: Problem with fasm
suchi_01 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!

Very mysterious. I'm still not sure where the C code begins and ends,
but in any case, the call puts a return address on the stack. If it
finds your assembly function, the "ret" ought to return to the same
place, whether it was generated by Nasm or Fasm. Possible issue with
"bitness"?

If all else fails, converting Fasm source to Nasm shouldn't be too
difficult... but you really shouldn't have to!

Best,
Frank


Report this thread to moderator Post Follow-up to this message
Old Post
Frank Kotler
03-24-08 12:58 PM


Re: Problem with fasm
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...@crayne.org> 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...@crayne.org> wrote:
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 


Report this thread to moderator Post Follow-up to this message
Old Post
suchi_01
03-25-08 03:04 AM


Re: Problem with fasm
On Mar 24, 12:10 pm, Frank Kotler  <spamt...@crayne.org> wrote:
> suchi_01 wrote: 
Hi Frank,
I do agree with grub. It makes things easier. But looking at
the problem,i feel we would still have to call the assembly part from
C when it comes to loading the initial part to Kernel

Suchindra Chandrahas




 
>
> Hi Suchindra,
>
> Doesn't sound like a Fasm/Nasm problem, really. You might want to look
> at GRUB, rather than write your own.
>
> http://www.gnu.org/software/grub/
>
> Best,
> Frank


Report this thread to moderator Post Follow-up to this message
Old Post
suchi_01
03-25-08 03:04 AM


Sponsored Links




Last Thread Next Thread Next
Search this forum -> 
Post New Thread

A86 Assembler archive

Show a Printable Version Send to friend Email This Page to Someone! subscribe to this thread Receive updates to this thread
Computer Consultants
Programming Jobs
Visual Basic Controls
SQL Server Programming
Webservices
Java Security
Visual Studio
C# Programming
Visual J++
Software engineering
Open source Software
Perl Programming
PHP Programming
ASP Programming
ASP .NET Programming
Visual Basic Programming
Windows Scripting Host
Java Programming
Java Help
Java Beans
VBScript
Cobol
MAC Applications
Unix Programming
Forum Jump:
All times are GMT. The time now is 10:46 AM.

 
Free MCSE Braindumps | Real Estate Topics

Programming forum archive

Copyrights CodeComments.com 2004 - 2006

Powered by vBulletin Copyright 2000-2006 Jelsoft Enterprises Limited.