Re: Problem with fasm
- From: suchi_01 <spamtrap@xxxxxxxxxx>
- Date: Mon, 24 Mar 2008 04:19:06 -0700 (PDT)
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...@xxxxxxxxxx> 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...@xxxxxxxxxx> 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 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;
}
.
- References:
- Problem with fasm
- From: suchi_01
- Re: Problem with fasm
- From: Frank Kotler
- Re: Problem with fasm
- From: suchi_01
- Problem with fasm
- Prev by Date: Re: Problem with fasm
- Next by Date: Re: Profiller for Linux
- Previous by thread: Re: Problem with fasm
- Next by thread: Re: Problem with fasm
- Index(es):
Relevant Pages
|