2010-08-19 9 views
0

Я отвечаю за некоторый код уровня приложения, который я унаследовал, который имеет некоторый x86 ... код сборки Intel на основе 32-битных инструкций и адресации. Я собираюсь сделать предположение, что этот 32-битный ассемблерный код будет запущен при миграции 64-битной ОС Windows. Да?Миграция кода сборки от 32 до 64 бит вопрос

+0

Это встроено в код C++. – ddm

+0

Почему меня интересуют близкие голоса. – Sathya

+0

Возможно, это будет не так просто, как я думал. Я получил ссылку от ответчика (извините - не уверен, кто как этот вопрос переместился) http://msdn.microsoft.com/en-us/library/hb5z4sxd.aspx Это означает, что «Inline ASM не поддерживается для x64 Используйте функции MASM или компилятора (x64 Intrinsics). " – ddm

ответ

0

Скорее всего, он будет работать; 64-разрядная версия Windows поддерживает 32-разрядный режим для приложений и, как правило, очень надежна. (Очевидно, что эти вещи никогда не являются 100%, хотя - предостерегают emptor.)

0

Да. 32-разрядный код будет работать на 64-битных машинах, но они не смогут получить доступ к более чем 4 гигабайтам ОЗУ.

2

Возможно, он будет работать, но он не сможет воспользоваться преимуществами 64-разрядных расширений для x86 asm (x86-64, что и все «64-разрядные» версии Windows) или иметь возможность тесно взаимодействовать с библиотеками x64. Уровень WoW64 очень стабилен и 99,999% 32-разрядных приложений отлично работают в текущих «64-битных» операционных системах.

Если вы хотите перейти на настоящую 64-битную операционную систему (единственные, что я знаю, это Itanium-based, ia64), вам не повезло.

Редактирование: Кроме того, если вы хотите включить широкоэкранный доступ (в состоянии использовать> 4 ГБ ОЗУ), есть флаг заголовка PE, который вы можете перевернуть, который включит его и позволит ему адресовать большие объемы памяти.

+0

Фантастический! Большое спасибо! Я новичок здесь (но имею хорошую репутацию на SO), желая, чтобы у меня была достаточно хорошая репутация, чтобы я мог проголосовать. – ddm

+0

То же самое. Я не беспокоюсь о репутации, поэтому голосование не имеет значения, но если бы я ответил на него за вас, вы могли бы согласиться именно так, как знают люди. :) – ssube

+0

Хорошо согласится, но это не очевидно, как это сделать (по крайней мере для меня). Отправить часто задаваемую ссылку :-) – ddm

0

Это будет запустите, если вы продолжаете строить 32-разрядные приложения x86. Однако, если вам нужно перенести код на 64-разрядный x86, скорее всего, код сборки не будет запускаться (и даже не компилироваться) из коробки.

И в зависимости от вашей цепочки инструментов, и если это встроенный ассемблер в коде C/C++ или нет, вы даже не сможете его вообще скомпилировать.

+0

Не могли бы вы уточнить? Даже не компилировать? Это встроенный код C++. – ddm

+0

Из памяти - по крайней мере, с помощью компилятора MS встроенный ассемблер просто не компилируется на 64-битной инструментальной цепочке, поскольку компилятор не поддерживает '__asm'. Я не знаю, страдают ли другие компиляторы, такие как GCC, от этой проблемы. –

+0

Мы используем VS - возможно, 2010 к моменту передачи кода. Я так не с нетерпением жду повторного написания кода ацети, а не невозможного для меня, но не для задачи, за которую я подписался. – ddm