2016-01-10 3 views
2

Недавно я прочитал, что магнат 2-го ролевого игра был написан на ассемблере.Запись на языке ассемблера, как работает совместимость?

Я заинтересован в изучении основ ассемблера в основном из любопытства, однако одна вещь, которую я не могу понять, - это то, как она работает на ряде процессоров.

Я правильно понимаю, что язык ассемблера специфичен для набора инструкций? Итак, как эта игра работала на процессорах Intel и AMD, если она была написана на ассемблере?

+0

Либо команда между двумя наборами процессоров достаточно перекрывается, разработчики использовали один из них эмулятор, или этого не произошло. – nicomp

+0

Я только что понял, что это было в эмуляторе. Благодарю. И разве Intel и AMD используют один и тот же набор команд? – Sam

+2

@ Да, да, с годами были небольшие различия, но если вам нужно спросить, ответ да). – Leushenko

ответ

1

По моему мнению, невозможно выполнить машинный код, сгенерированный для одного типа процессора, на несовместимом типе процессора. Тем не менее, virtual machine, также называемый эмулятором, может быть использован для достижения несобственного выполнения машинного кода, который на самом деле имеет тегирование с другим типом процессора.

1

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

Теоретически, у вас может быть один язык ассемблера, который создает машинный код для нескольких архитектур, ограничивая его общим подмножеством очень широко поддерживаемых операций, таких как добавление, умножение, разделение и т. Д. Пока архитектуры достаточно аналогично тому, как они реализуют это подмножество инструкций, и вы можете написать рабочую программу с этим подмножеством, тот же список сборок можно разумно сказать для запуска на всех из них; это может быть необходимо перевести на разные коды операций, но структура двоичного файла будет одинаковой во всех случаях. Это особенно важно, если вы согласитесь принять, например, соответствие 1: N, а не 1: 1 между операциями сборки и машинными инструкциями (где N является переменной между архитектурами, но константой на одном), чтобы разрешить, например, сборка с тремя адресами, которая была бы 1: 1 на ARM, для «сборки» для x86, путем того, чтобы все инструкции по сборке расширялись до двух операционных систем x86 вместо одного.

Одним из возможных примеров такого ассемблера является PicoLisp assembly language, используемый для записи 64-разрядной версии интерпретатора. Он утверждает, что он в основном переносится между ARM, PPC, x86 и C (с некоторым кодом для конкретной платформы, чтобы связать куски вместе).

+1

Есть процессор с именем C? –

+2

Язык программирования C является популярной целью компилятора для многих языков, в то время как многие другие (например, LLVM) используют его как резервный бэкэнд. Обычно вы можете гарантировать, что программа будет работать независимо от того, что вы хотите, делая это, даже если она намного медленнее, чем одноступенчатый компилятор, который знает свою конечную цель машины. – Leushenko

+0

О, так что вы имеете в виду ассемблер, который выводит источник C вместо двоичного машинного кода. Я не думаю, что я бы перечислил это вместе с процессорами без пояснений. –

2

Rollercoaster Tycoon 2 работает только на ПК под управлением Windows. ПК в этом смысле означает совместимость с IBM PC, которая обратно совместима с оригинальным IBM PC, который использовал процессор Intel 8088. 8088 был более дешевой версией 8086, поэтому это означает, что все ПК используют версию набора команд 8086. На протяжении многих лет Intel выпустила процессоры, которые расширили этот набор команд. В первую очередь Intel 80386 добавила 32-разрядную поддержку.

Будучи 32-разрядной игрой Windows с процессором Pentium II, заданным как минимальное требование, RCT2 будет полностью или почти полностью написан с помощью инструкций, поддерживаемых 80386. Не было так много инструкций, добавленных более поздним 80486, Pentium и Pentium II. Заметным исключением были бы инструкции MMX, но они были сложны в использовании и, вероятно, не были полезны для такого рода игр. Кроме того, оригинальный Railroad Tycoon поддерживал процессоры Pentium, но только более поздние версии «MMX» для Pentium поддерживали эти инструкции.

Итак, игра работает на ПК с ОС Windows, которые поддерживают современную версию набора инструкций 8086. Это включает в себя как ПК Intel, так и компьютеры AMD (и через ПК), поскольку на всех ПК есть процессоры, которые используют набор инструкций 8086. Любой ПК с процессором AMD, достаточно быстрый для запуска игры с приемлемой скоростью, будет поддерживать современную версию набора инструкций 8086. Это будет включать все компьютеры AMD, проданные за последние 15 лет.

Обратите внимание, что факт, что игра была написана на ассемблере или нет, на самом деле не имеет никакого значения для конечного пользователя. Игра, полностью написанная на C++, будет скомпилирована в машинный код, прежде чем будет доставлена ​​клиентам. Аналогично, игра, написанная полностью в сборке, собирается в машинный код. Игра Windows, написанная на C++ или сборке, будет работать только на ПК под управлением Windows, который поддерживает современную версию набора инструкций 8086.

Тот факт, что RCT2 был написан на сборке, только существенно влияет на разработчиков и издателей игры. Игра, написанная на C++, может быть легко перенесена на другие платформы. Обычно это не так просто, как перекомпиляция игры для создания машинного кода для другой платформы, но обычно требуется лишь небольшая часть кода на C++. Портирование RCT2 на компьютеры Apple PlayStation 2 или PowerPC потребует полной перезаписи каждой строки исходного кода.

Существует проект под названием OpenRTC2, который эффективно сделал именно это. Они изменили конструкцию игры и переписали ее с нуля на C. Это позволило им выпускать версии своей игры, которые работают на других платформах, чем ПК с ОС Windows.

1

Все x86 microarchitectures (от Intel 386/486/Pentium/P6 семьи (PPro в Nehalem)/P4/SandyBridge семьи/Atom/Silvermont, компании AMD K6/K7/K8/K10/Бульдозеры семьи/Bobcat/Jaguar/etc, Via's Nano, Crusoe Transmeta и т. д. и т. д.) являются реализациями x86 ISA (Instruction Set Architecture).

Это x86 микроархитектуры. У них есть разные внутренние элементы, и вы бы optimize for each one slightly or a lot differently, но такая же последовательность команд будет иметь тот же эффект на их архитектурном состоянии. То есть они запускают один и тот же код, и вы можете думать о них с точки зрения модели машины x86, которую они реализуют, вместо того, чтобы думать о своих внутренних компонентах, что может быть полностью разных, наиболее впечатляюще в случае программного обеспечения Transmeta on-fly-fly -base двоичный перевод на машинный код VLIW. Внутренние процессоры нестандартного исполнения от Intel и AMD также сильно отличаются от архитектурного состояния x86, но они декодируют инструкцию с использованием аппаратных декодеров. Однако процессоры Intel SnB-семейства кэшируют результаты декодирования машинного кода x86 на внутренние процессоры.

Некоторые реализации x86 будут поддерживать расширения инструкций, которые другие не используют, но вы можете написать код, который использует инструкцию CPUID, чтобы решить во время выполнения, какие версии функций использовать на основе возможностей процессора, код работает: например базовая версия, версия SSE2, версия SSSE3 или версия AVX.)

При создании двоичных файлов x86 вы ориентируетесь на ISA x86, стандартизованный Intel. См. Ссылки в wiki. PDF-файлы доступны свободно.

+0

Intel, похоже, так не думает. Они накладывают вето на аппаратное обеспечение AMD x86, даже если набор команд одинаковый. –

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