2014-02-05 6 views
1

Есть ли способ указать, какой процессор мы нацеливаем с кодом, собранным с использованием NASM?Имеет ли NASM целевой процессор по умолчанию?

Например, позволяет сказать, что я хочу предназначаться только 8086, и, следовательно, с помощью этой инструкции должны быть недействительными:

mov eax, cr0 

так eax/cr0 не существует в 8086.

Или что NASM работает для «семейства x86», а затем программист должен убедиться, что код написан для правильного процессора и запущен на тех, где поддерживаются инструкции?

Также, если инструкция поддерживается в одном процессоре, но не в другом. Думаю, пока мы говорим о том же семействе процессоров, этого не произойдет, но что, если такая ситуация возникает в какой-то момент ? У NASM есть функциональные возможности для поддержки этого?

Я проделал поиск по всему этому, но не смог найти ничего, что ответит на это напрямую. Извините, если эти вопросы звучат глупо/рудиментарно.

ответ

3

Вы можете использовать директиву CPU. От fine manual:

The CPU directive restricts assembly to those instructions which are 
available on the specified CPU. 

Options are: 

CPU 8086 Assemble only 8086 instruction set 
CPU 186 Assemble instructions up to the 80186 instruction set 
CPU 286 Assemble instructions up to the 286 instruction set 
CPU 386 Assemble instructions up to the 386 instruction set 
CPU 486 486 instruction set 
CPU 586 Pentium instruction set 
CPU PENTIUM Same as 586 
CPU 686 P6 instruction set 
CPU PPRO Same as 686 
CPU P2 Same as 686 
CPU P3 Pentium III (Katmai) instruction sets 
CPU KATMAI Same as P3 
CPU P4 Pentium 4 (Willamette) instruction set 
CPU WILLAMETTE Same as P4 
CPU PRESCOTT Prescott instruction set 
CPU X64 x86-64 (x64/AMD64/Intel 64) instruction set 
CPU IA64 IA64 CPU (in x86 mode) instruction set 
+1

Я был на этой странице раньше, но думаю, что, возможно, я пропустил это. Большое спасибо за указание на это! – Cygnus

0

Вы можете установить количество битов, как это:

[BITS 16] 

[BITS 32] 

[BITS 64] 

Кроме этого, вы просто не должны использовать инструкции, которые не поддерживаются на целевом процессоре. Например, вы можете использовать инструкции AVX на Pentium D; если вы это сделаете, ваша программа выйдет из строя.

Редактировать: На самом деле, я ошибаюсь. Проверьте ответ Пола Р.

Смежные вопросы