TonyWilk:
Yes, although 'code size and efficiency' is somewhat dependant on requirements; simple debug output is one thing, formatting several lines for an LCD is another.
When I did 68HC11 assembler programming, I had good luck formatting and printing text on an LCD display simply by making a "virtual" LCD screen in ram, then placing characters and numbers where I wanted them, then called a simple block copy subroutine to copy the "virtual" LCD screen to the real one.
The 68HC11, BTW, only has 256 bytes of SRAM, 512 bytes of EEPROM and a 64K address space (shared by eeprom, sram and registers).
Now THAT'S a processor where you need to watch each and every byte!