wsprintf()/MessageBox() are very useful for inline debugging.
Can't tell you how many times I've done something like this:
.data
BuffPtrFmt DB "The buffer pointer is %08X", 0
.code
Something PROC
LOCAL buffPtr:DWORD, buffer[256]:BYTE
... do some stuff w/pointer ...
... now we want to see where the pointer is pointing:
INVOKE wsprintf, ADDR buffer, OFFSET BuffPtrFmt, buffPtr
INVOKE MessageBox, NULL, ADDR buffer, NULL, MB_OK
I've got all that stuff memorized ...