Сначала компьютеры были 8-разрядные и адресовали память в 64 килобайта.
Затем ПК усовершенствовали, в итоге компьютеры и программы к ним стали 16-разрядные.
Затем создали 32-разрядные компьютеры.
Затем сделали 64-разрядные (на них можно суперкомпьютер построить, так как там можно адресовать очень много памяти).
Когда перешли с 16 на 32, 16-разрядных программ была уже куча, а 32-разрядных ещё почти не выпустили. И вот чтобы была пока возможность пользоваться старыми 16-разрядными программами на 32-разрядных ПК, решили сделать программу эмулятор 16-разрядного процессора.
На некоторых (в основном 32-разрядных) Windows для поддержки 16-разрядных программ создали этот эмулятор. Запускается он либо программой "Командная строка" с определённой командой, либо рабочим столом (программой Explorer.exe) когда вы пытаетесь запустить 16-разрядную программу на 32-разрядной Windows.
В диспетчере задач процесс этого 16-разрядного эмулятора можно лицезреть с названием ntvdm.exe.
Я раньше пробовал программировать под 16-разрядные операции, считая, что машинные коды должны выполняться максимально быстро, но когда узнал, что на самом деле мои программы исполняются на 32-разрядном процессоре, то есть сначала эмулятор смотрит коды, а затем интерпретирует и исполняет. Понял, что это не прямые коды, а интерпретатор, а чтобы были прямые, нужно составлять 32-разрядные программы. Когда составил и запустил, действительно скорость выполнения операций значительно повысилась.
А сейчас, в связи с переходом на 64-разрядные машины, даже и не знаю, как там и что интерпретируется (лень опять переучиваться). Легче десятилетиями программировать на каком-нибудь Javascript и не думать что через 5 лет программа устареет и где-нибудь не запустится.