Page 1 of 1

"Printing to the screen without a db"

Posted: Sat Dec 04, 2010 5:49 pm
by Synon
I was reading this article and noticed the following message:
note, you don't want to use this in a bootloader, it messes with the data section and I don't know how to place the boot signature at the end of the data section and still pad out to 512 bytes
I'm not sure if this is a good or bad idea, but it seems to work; rather than use the code

Code: Select all

%macro print 1+
    section .data    ; At the end of the binary.
%%string:
    db %1,0
    section .text    ; Back to where we were.
 
    mov si,%%string
    call print_string    ; Print it out using the print_string function.
%endmacro
as in the Wiki article, if you remove the section information:

Code: Select all

%macro print 1+
	%%string:	db	%1,	0
	mov	si,	%%string
	call	putstr
%endmacro
you can use it normally. I've tested this and it seems to work if you don't put any section information in your program, and instead let the assembler do this. It works with nasm, I'm not sure about other assemblers (though I think this article only applies to nasm anyway).

I'm not sure if there are any side-effects to doing this, though.

Re: "Printing to the screen without a db"

Posted: Sat Dec 04, 2010 6:20 pm
by Combuster
You're executing data that way. The reason it works is because you are lucky not to screw up the system and align back up before the mov si...

Re: "Printing to the screen without a db"

Posted: Sat Dec 04, 2010 6:31 pm
by Synon
Combuster wrote:You're executing data that way. The reason it works is because you are lucky not to screw up the system and align back up before the mov si...
Oh, right, ok.