The Amiga, and none of the other 16-bit systems had an assembler built in either. They had interpreted BASICs just like the 8-bit systems, except on disk instead of in ROM.
a:\DEBUG < FOO.ASM
-a
(press enter until you reach the end of your source code at whatever address)
(enter a blank opcode to mark end of assembly range)
-g =100
voila, your (naturally, bug-free, right?) code assembles and runs.
It's living about as close to the land as you can get when it comes to an assembler, but it did the job.
from ms-dos 2.0 onwards debug was apparently re-entrant and could read its own binary from disk, "un"assemble it, assemble it again, and run another instance of itself from inside itself. When I first discovered this at 12 or so It felt I stumbled across a tiny doorway to some alternate dimension.