Это один из тех забавных вопросов, и, как всегда, ответы вводят в заблуждение.
настоящий файл DOS COM не имеет заголовков и должен помещаться в одном сегменте памяти, поскольку не имел информации о перемещении,DOS должен был поместить файл туда, где он был нужен, и поэтому единственно верным способом совместимости (с x86) было использование 8086-совместимой сборки.Редактировать: Чтобы прояснить выше, это потому, что 8086 не было страниц памяти.
Вы, безусловно, могли бы скомпилировать в 286/386 операндов в, так как после запуска программы, в DOS нет исполнительной среды выполнения дляостановите вас и скажите «нет, вы не можете этого сделать, это инструкция 386.»
Что, как ни странно, является одной из причин того, что COM-файлы не очень часто работают в Windows7 x32 или вообщев Windows 7 x64.
Из-за того, как работал DOS, command.com был выгружен при выполнении файла .com и впоследствии перезагружен, поэтому по сути ваш файл .com мог получить доступ ко всей памяти системы, и теоретическииспользуйте устройства памяти DOS, такие как Phar lap DOS / 4GW и CWSDPMI.
Короче говоря;Вы можете использовать любые команды, которые может поддерживать текущая система, но вы должны использовать только 16-битные x86-совместимые команды, чтобы быть уверенными.
Если вышеприведенное звучит как PITA, это потому, что это было, я помню:) Именно поэтому формат .EXE стал очень популярным очень быстро.