Все ли ЦП одной и той же архитектуры выполняют одни и те же ассемблерные инструкции?

Недавно я видел видео, где кто-то пишет ASM, они только упомянули, что код предназначен для архитектуры x86_64, без упоминания конкретного процессора. В университете меня учили смотреть на набор инструкций ЦП, код OP, карту памяти и т. д. (В частности, Intel 8051). Поэтому я нашел это странным.

Я заинтересован в написании сборки для моего MacBook M-серии. Работает ли сборка ARM64 на всех процессорах ARM?

Зависит от того, что вы подразумеваете под «архитектурой», и нет стопроцентного согласия по этому поводу, поскольку это такой общий термин. Итак, ответ варьируется от да до нет. Во многих семействах архитектур существует обратная совместимость, так что старые программы могут продолжать работать на ЦП с обновленными наборами инструкций. Хотя для некоторых мелочей существует некоторая «прямая» совместимость, обычно гораздо меньше попыток тех, кто поддерживает и расширяет наборы инструкций.

Erik Eidt 09.05.2023 00:53
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
1
94
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Да исправить. Архитектура набора инструкций (ISA) определяет, как выглядит машинный код и какие инструкции он содержит. Некоторые ISA поддерживают несколько наборов инструкций, и приложения могут между ними переключаться. Например, x86 имеет три набора инструкций: 16-битный, 32-битный и 64-битный набор инструкций. Хотя код, написанный для одного из трех, очень похож, он не может работать на других без повторной сборки и небольших изменений.

Ваш процессор Apple M1 имеет архитектуру набора инструкций ARMv8.4-A. Из трех наборов инструкций (A32, T32, A64), указанных в этой архитектуре, она поддерживает только A64. Код, написанный для Apple M1, в принципе будет работать на любом другом процессоре с таким же набором инструкций, но может дать сбой из-за разных операционных систем и библиотек.

Обратите также внимание на то, что архитектуры набора команд часто имеют расширения. Код, использующий расширения набора инструкций, выполняется только на процессорах, поддерживающих это расширение. Например, x86 имеет популярные расширения SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AVX-512, .... В ARMv8.4 тоже есть расширения, но они не особо актуальны для новичков.

Да в том смысле, что если вы предоставите достаточно подробностей для конкретного набора инструкций, тогда да. Если вы скажете, например, x86, то, конечно, нет, как и большинство наборов инструкций, он развивался с течением времени, поэтому инструкции со временем добавлялись или, возможно, менялись. ARM, безусловно, то же самое, ARM предоставляет больше информации об архитектуре, чтобы знать, на какую спецификацию ссылаться. Сегодня, возможно, если вы скажете что-то вроде arm64, вы сможете выжить, но можно ожидать, что в какой-то момент в будущем это будет неправдой. Уже из ответа fuz «Ваш процессор Apple M1 имеет ARMv8.4-A», aarch64 начался с ARMv8-A ARMv8.4-A — это другая ISA. Теперь может случиться так, что вы используете одни и те же «инструкции», но разница заключается в «архитектуре», я не знаю 64-битную сторону руки, как другие варианты руки. ARM и x86 вы обычно можете создать двоичный файл, который работает для ряда целей, поскольку существует много обратной совместимости, но, очевидно, не каждый ARM будет запускать код «ARM», как x86 и x86.

8051 и некоторые другие (я думаю, 6502, может быть, z80, может быть, но не PIC, вероятно, msp430) по разным причинам исправлены с точки зрения набора инструкций, хотя ... после того, как Intel прекратила их выпуск, 8051 эволюционировал, и на самом деле они есть, забудьте имя, специальные регистры, которые очень сильно не совместимы из одного 8051 в другой. 8051 все еще используются сегодня, через эту веб-страницу прошли, ну, рядом, многие из них различаются между вами и мной. Инструкции могут быть совместимы, но другие части реализации — нет, и все это должно совпадать, чтобы запускать «код» между ними.

Какой язык вы используете, будь то высокоуровневая компиляция в конечном итоге до машинного кода или начиная с языка ассемблера до машинного кода. Является лишь частью уравнения «запуска на всех процессорах». В частности, с ARM. Набор инструкций такой же, как алфавит или язык. Вы можете написать учебник по математике на английском, испанском, русском и т. д. И при этом иметь то же содержание, посыл и полезность. Это та же самая книга, только на другом языке и на другом алфавите. Точно так же вы можете написать книгу по биологии на английском языке, и она может быть совершенно бесполезна на уроке математики. Подавляющее большинство кода не имеет ничего общего с самим ядром процессора, оно связано с вещами вне ядра, частью системы. Периферийные устройства, операционная система и т. д. И они несовместимы с мобильным телефоном, Mac M1 и Raspberry Pi. Таким образом, хотя вы можете использовать точно такой же набор инструкций из той же спецификации arm, полученный код может быть полностью несовместим с процессорами arm BASED с той же архитектурой и не будет «работать» на этих процессорах arm, он выйдет из строя.

С ARMv8 все так же, как и с x86: двоичные файлы ARMv8 работают на ARMv8.1 и так далее. ISA — это базовый набор инструкций с множеством расширений. Каждый уровень архитектуры требует наличия некоторых расширений, но могут быть и дополнительные расширения. Ни один уровень пока ничего не удалил. Однако этого нельзя сказать об изменении формы ARMv7 на ARMv8 или между другими основными уровнями архитектуры.

fuz 21.05.2023 17:02

Другие вопросы по теме