Goalatio 0 Junior Poster in Training

I've run into a bit of a problem with my OS..

Displaying large amounts of information; like so-

mazemsg		db 0x70,"Maze game: How to play--",0
			db 0x74,"-Arrow keys for movement",0
			db 0x7C,"-Move into the red crates to move them",0
			db 0x7E,"-Push a crate onto yellow dots to clear both the crate and the dots",0
			db 0x72,"-Green lines: You can jump over them, but crates cannot",0
			db 0x7C,"-Mines: They can be hidden throughout the level",0
			db 0x7C,"--Step on one to flag it, step on a flagged mine and die",0
			db 0x7C,"--Pushing a crate onto a mine will create an ash cloud (White)",0
			db 0x7F,"Ash cloud- Movement keys are mixed up, mines do not become flagged",0
			db 0x70,"Press any key to start!",0

That adds MANY extra bytes to the compiled binary file.. Is there any way to create a proper print method?
Example; print "Hello, world"
Where no bytes would be defined, that string of bytes "Hello, world" would simply be written to memory 0xB800.

I would know how to do it if I could figure out how to tell it that "Hello, world" was a string, but saying..

%macro print 2
 mov byte[si+0],%1
 mov byte[si+1],%2
 call printstr
%endmacro

print 0x70,"Hello, world"

does not work..
Any thoughts?