NASM - The Netwide Assembler
NASM Forum => Using NASM => Topic started by: smaldona on September 28, 2010, 08:01:48 PM
-
hi,
Im Smaldona and I am searching somebody can help me about nasm..
i got a problem, i did a sudoku's generator and i don know how can i call the sudoku's program from other program..
what i wanna do is like do other code (program) who calls the sudokus program for 100 times, and i have this part of other code,,
the sudokus code is ready,
my question is :
how can i call or invoc a code from other code..
jmm... and excuse me for the grammar , im learning english at this moment....
extern printf
extern sudoku
section .data
%macro setup_stack_frame 0
push ebp
mov ebp, esp
push ebx
push esi
push edi
%endmacro
%macro destroy_stack_frame 0
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
%endmacro
section .bss
section .text
global main:
main:
setup_stack_frame
call sudoku
destroy_stack_frame
ret
-
Ah, Sudoku - Hirohito's Revenge. :)
Looks like the Nasm part is about done, Smaldona. You've got "extern sudoku" in your calling program. Have you got "global sudoku" in the called code? That should be all it takes. "gcc -o myprog caller.o callee.o"...
If you're not using gcc in Linux (or so), there may be an issue with underscores on globals and externs. Since you haven't got 'em, I'm ASSuming you don't need 'em. If you do, adding "--prefix _" to Nasm's command line will add them, so you don't have to touch the code. OpenWatcom wants "--postfix _", I understand...
If that isn't working, tell us just what you did, and just what happened. Chances are, if you read any error messages carefully, you can figure it out yourself - did they spell it "main" or "_main"... that kind of thing...
Best,
Frank
-
Hi, Frank
in the called code I´ve got "global main"; so what I have to do is "global _main"?? the prefix??..... yes, I`m using "gcc"..
the sudoku`s file I`ve named it "sudo.asm"
and other file is named "menu.asm"
I wanna do is to call sudo.asm from menu.asm...
somebody told me that I had to generate an object "sudo.o" and that were the way for calling it, but it didnt work!
-
"Didn't work" isn't much to go on...
Probably want to "define out" the "main" in sudo.asm...
; sudo.asm
; let me guess...
extern printf
%ifdef TESTMAIN
global main
main:
call sudoku
ret
%endif
global sudoku
sudoku:
...
Then you can assemble it in "test" mode by adding "-dTESTMAIN" to Nasm's command line. When you're ready to call it from "menu":
nasm -f elf32 sudo.asm
nasm -f elf32 menu.asm
gcc -o outname menu.o sudo.o
Best,
Frank