Знаете, вот сколько сижу здесь, никто ни разу не предложил писать сразу мнемоникой в машинном коде, а ведь это так просто и быстро, не нужны никакие компиляторы (я ведь так и начинал писать программы в своё время). Всё сводится к тому, что вы создаёте файл нулевой длины, обозвав его *.com и начинаете заполнять этот com-файл с нуля сами, для чего вам нужен всего лишь hex-редактор типа HIEW с преобразованием машинных кодов в мнемонику. Поверьте так можно программировать. Единственная сложность будет там, где нет относительной адресации (адреса придётся прописывать ручками). Но этого вполне достаточно чтобы понять как работает программа на ассемблере и не спрашивать при этом какой компилятор ассемблера выбрать, потому как вы и без них можете обойтись.
ток это характерно для доса (а точнее для com программ, где код загружается с адреса 100h и начинает исполняться). а для винды линуха создали директвы, format pe, format elf, которые прописывают шапку pe сами, делают макросами секцию ресурсов, итд