Какая разница между 16-битным и 32-битным приложением? - PullRequest
2 голосов
/ 23 мая 2011

32-битный x86 - расширенный набор 16-битных x86.Предположим, я пишу код в 16-битном x86.В идеале он должен работать на системе с 32-битной x86 без каких-либо помех.Но это не тот случай.Совместимость является проблемой здесь.Но почему именно?Это потому, что 32-разрядная ОС, установленная на 32-разрядной машине x86, по-разному загружает программы в память и по-разному управляет памятью?Являются ли различные требования к управлению памятью реальной разницей между 16-разрядными и 32-разрядными приложениями?

Ответы [ 3 ]

3 голосов
/ 23 мая 2011

В Windows:

Основная проблема с запуском 16-битной программы в 32-битной ОС состоит в том, что большинство 16-битных программ используется для запуска в реальном режиме, который больше не поддерживается (ОС). Эти режимы принципиально отличаются и поэтому требуют программной эмуляции. Кроме того, поскольку все 16-битные заглушки API, функции DOS и вызовы BIOS недоступны, программы не смогут взаимодействовать с операционной системой, что делает их непригодными для использования без какой-либо эмуляции. В случае Windows NTVDM выполняет всю эмуляцию, начиная с Windows NT3.1.

Конечно, если ваша программа не требует какого-либо взаимодействия с ОС, вы сможете запустить ее. Что касается кодов операций и набора команд, то это правда, что 32-битный x86 является расширенным набором 16-битных x86. Просто среда, в которой обычно выполняется код, совершенно другая.

1 голос
/ 03 февраля 2013

Единственное различие между 32-битным и 16-битным адресным режимом заключается в значении и использовании этих префиксов размера операндов и адресов.

что означает 32-битное приложение?

Префикс размера операнда в 16-битном режиме

0 голосов
/ 23 мая 2011

Существует соответствующее (16-битное на 64-битной ОС) обсуждение в суперпользователе здесь .

...