Как из файла ассемблера (NASM) запустить exe-шник?
Системным вызовом (т.е. вызовом функции ядра ОС, например execve), либо вызовом библиотечной функции, которая сделает этот системный вызов за тебя (например функции библиотеки C system или функции win32 API CreateProcess).
Не отдельно, а как-будто ассемблерский файл это и есть ос?
Загрузить исполняемый файл в память, если он не статически слинкован -- загрузить все его зависимости (и все их зависимости, соответственно), связать вызовы сделанные через таблицы импорта, выполнить релокации для объектов, которые загружены не по адресам для которых они собраны, очистить bss, выделить стек, инициализировать регистры для первого потока, перейти в точку старта. Обычно ядро делает только загрузку исполняемого образа и динамического линковщика, инициализацию bss, выделение стека и запуск первого потока, а дальше динамический линковщик делает всё остальное в юзерспейсе.