Assuming that you're using one of the commonly used MIPS simulators such as SPIM or MARS, then the print integer system call expects the value to be printed to be in $a0, not a pointer to the value. You'll need to put the pointer to the memory location into a temporary variable and dereference it into $a0, rather than simply loading the pointer into $a0. Thus, you would want to write it as something like this:
lui $t0, 0x1001
addi $t0, $t0, 0
lw $a0, 0($t0)
addi $v0, $0, 1
syscall
BTW, just as a way of saving some trouble for you as a coder (by letting the assembler do the heavy lifting), does the MIPS assembler your using support the move , la and li pseudo-instructions ? This would let you use a label for the address rather than forcing you to write the address out explicitly:
la $a0, myString
move $v0, 4
syscall Where myString is at some labelled data location.
Even better would be if the assembler allows named constants, as you could give a name for the syscall arguments. This thread discusses the use of equates to simplify coding, and gives the list of the most common constants used (in SPIM specifically; AFAIK, the MARS simulator's assembler does not support equates).