Hi everyone,
I'm new at the forum and at assembler programming.
I'm actually using a book that can help me guide myself from the start. But I'm having problems with the compiler.
I get this error message in the console when I try to run an assembler program.
[23:55:38] Warning! Errors have occurred in the build:
C:\Users\Edgardo\AppData\Local\Temp\SASM\program.o:C:\Users\Edgardo\A:(.text+0xb): undefined reference to `print_string'
C:\Users\Edgardo\AppData\Local\Temp\SASM\program.o:C:\Users\Edgardo\A:(.text+0x10): undefined reference to `read_int'
C:\Users\Edgardo\AppData\Local\Temp\SASM\program.o:C:\Users\Edgardo\A:(.text+0x1f): undefined reference to `print_string'
C:\Users\Edgardo\AppData\Local\Temp\SASM\program.o:C:\Users\Edgardo\A:(.text+0x24): undefined reference to `read_int'
C:\Users\Edgardo\AppData\Local\Temp\SASM\program.o:C:\Users\Edgardo\A:(.text+0x3d): undefined reference to `sub_dump_regs'
C:\Users\Edgardo\AppData\Local\Temp\SASM\program.o:C:\Users\Edgardo\A:(.text+0x4b): undefined reference to `sub_dump_mem'
C:\Users\Edgardo\AppData\Local\Temp\SASM\program.o:C:\Users\Edgardo\A:(.text+0x55): undefined reference to `print_string'
C:\Users\Edgardo\AppData\Local\Temp\SASM\program.o:C:\Users\Edgardo\A:(.text+0x5f): undefined reference to `print_int'
C:\Users\Edgardo\AppData\Local\Temp\SASM\program.o:C:\Users\Edgardo\A:(.text+0x69): undefined reference to `print_string'
C:\Users\Edgardo\AppData\Local\Temp\SASM\program.o:C:\Users\Edgardo\A:(.text+0x73): undefined reference to `print_int'
C:\Users\Edgardo\AppData\Local\Temp\SASM\program.o:C:\Users\Edgardo\A:(.text+0x7d): undefined reference to `print_string'
C:\Users\Edgardo\AppData\Local\Temp\SASM\program.o:C:\Users\Edgardo\A:(.text+0x84): undefined reference to `print_int'
C:\Users\Edgardo\AppData\Local\Temp\SASM\program.o:C:\Users\Edgardo\A:(.text+0x89): undefined reference to `print_nl'
c:/program files (x86)/sasm/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libmingw32.a(main.o): In function `main':
C:\MinGW\msys\1.0\src\mingwrt/../mingw/main.c:73: undefined reference to `WinMain@16'
This is the assembler program
;
; file: first.asm
; First assembly program. This program asks for two integers as
; input and prints out their sum.
;
; To create executable:
; Using djgpp:
; nasm -f coff first.asm
; gcc -o first first.o driver.c asm_io.o
;
; Using Linux and gcc:
; nasm -f elf first.asm
; gcc -o first first.o driver.c asm_io.o
;
; Using Borland C/C++
; nasm -f obj first.asm
; bcc32 first.obj driver.c asm_io.obj
;
; Using MS C/C++
; nasm -f win32 first.asm
; cl first.obj driver.c asm_io.obj
;
; Using Open Watcom
; nasm -f obj first.asm
; wcl386 first.obj driver.c asm_io.obj
%include "asm_io.inc"
;
; initialized data is put in the .data segment
;
segment .data
;
; These labels refer to strings used for output
;
prompt1 db "Enter a number: ", 0 ; don't forget nul terminator
prompt2 db "Enter another number: ", 0
outmsg1 db "You entered ", 0
outmsg2 db " and ", 0
outmsg3 db ", the sum of these is ", 0
;
; uninitialized data is put in the .bss segment
;
segment .bss
;
; These labels refer to double words used to store the inputs
;
input1 resd 1
input2 resd 1
;
; code is put in the .text segment
;
segment .text
global _asm_main
_asm_main:
enter 0,0 ; setup routine
pusha
mov eax, prompt1 ; print out prompt
call print_string
call read_int ; read integer
mov [input1], eax ; store into input1
mov eax, prompt2 ; print out prompt
call print_string
call read_int ; read integer
mov [input2], eax ; store into input2
mov eax, [input1] ; eax = dword at input1
add eax, [input2] ; eax += dword at input2
mov ebx, eax ; ebx = eax
dump_regs 1 ; dump out register values
dump_mem 2, outmsg1, 1 ; dump out memory
;
; next print out result message as series of steps
;
mov eax, outmsg1
call print_string ; print out first message
mov eax, [input1]
call print_int ; print out input1
mov eax, outmsg2
call print_string ; print out second message
mov eax, [input2]
call print_int ; print out input2
mov eax, outmsg3
call print_string ; print out third message
mov eax, ebx
call print_int ; print out sum (ebx)
call print_nl ; print new-line
popa
mov eax, 0 ; return back to C
leave
ret
I already have the asm_io.inc in the right folder but i don't know what to do next. I'll appreciate any advice of help