NASM - The Netwide Assembler

NASM Forum => Using NASM => Topic started by: AzAr on October 19, 2008, 10:36:35 PM

Title: nasm problems--not printing
Post by: AzAr on October 19, 2008, 10:36:35 PM
Hello,
I'm rather new to nasm, and wrote this program to print out a message byte-by-byte It's not printing, but it seems to run through the loop with gdb. Thoughts/comments would be great.
code:
section .data
buff db "Hello world!",0 ;the message we're going to print
section .text
global _start:
_start:
mov eax,buff ;moves the buffer address to eax for the call.
call write ;will write what ever is stored at eax byte by byet.
call exit ;exits

write:
mov esi,eax ;get what's stored in eax (hopefully an address) and store it in esi.
jmp .wloop
.wloop: ;the loop.
call pc
mov cl,[esi] ;moves the dereferenced esi to cl.
movzx ecx, byte [esi]
cmp cl,0 ;is the byte a null character?
je .wend
mov eax,4
mov ebx,1
mov edx,1
int 80h ;print the character.
inc esi ;move the pointer to the next char in the buffer.
jmp .wloop ;restart the loop
.wend:
ret

exit:
mov eax,1
mov ebx,1
int 80h
ret

pc:
mov eax,4
mov ebx,1
mov ecx,'d'
mov edx,1
int 80h
ret
Title: Re: nasm problems--not printing
Post by: Frank Kotler on October 20, 2008, 01:50:52 AM
You need the address of the buffer in ecx, not the character to print. Since the address of the buffer is in esi, doing "mov ecx, esi" somewhere before the "int 80h" should fix it.

Better(?) answer on the nasm-users list...

Best,
Frank