170 похожих чатов

Ребята, я тут пытался найти ответ на данный вопрос, но

толи я не знаю как его сформулировать, толи он слишком очевиден.

Вопрос отчасти не относится к C++:

У меня есть программа написанная на языке C++, пусть это будет стандартный "Hello World". Я собрал её с помощью MSVC в системе на базе процессора Intel. Почему исполняемый файл на выходе работает у моего друга в системе на базе процессора AMD?

Насколько я понимаю у разных процессоров разные op'коды представляют конкретные ассемблерные инструкции, да инструкции врятли у всех одинаковые.

Кроче мой стиль, максимум тупых вопросов. Буду благодарен за ссылки на материал по данной теме.

7 ответов

20 просмотров

потому что собрано скорее всего с дефолтными настройками, которые подразумевают что это не самостоятельный exe, а к нему ещё нужны dll с плюсовым рантаймом чтобы это заработало

они реализуют один и тот же набор инструкций, если в общем

Потому что по дефолту в VS собирается приложение под архитектуру процессора: x86-32 или x86-64 И AMD, и Интел делают свои архитектуры так, чтобы поддержать x86

Было бы грустно перекомпилировать под процессоры отдельной компании софт Кажется, когда начиналась мода 64-битных архитектур, Интел пыталась продвинуть свою архитектуру IA64, но она не имела обратной совместимости с x86-32, и не прижилась, потому что ещё к тому AMD выпустила AMD64, которая сейчас известна как x86-64

Потому, что оба процессора принадлежат к семейству архитектуры x86. Конкретнее - к x86-64, 64-битному расширению x86. Используя флаги компилятора можно задать под какую архитектуру процессора компилировать. К примеру, компилятор под x86_64, (т.е. обычный компилятор, не кросскомпилятор), по умолчанию генерирует под x86-64. У gcc и clang, выбор бекенда компилятора (который пишется для генерации машинных кодов под конкретную платформу), осуществляется посредством флага "-march=${ARCH}", где ARCH - целевая архитектура. "-march=x86-64" Так же существует сокращеный вариант. Через "-m$ARCH". "-m32" "-m64". Но рекомендуется использовать полную версию - march.

Потому что система команд процессов AMD совместима с системой команд процессов Intel x86.

Насколько я понимаю у разных процессоров разные op'коды представляют конкретные ассемблерные инструкции, да инструкции врятли у всех одинаковые. Ты понимаешь неправильно. В принципе да, разные процессоры - разные инструкции. Но AMD наоборот делался совместимым с Intel x86 . Иначе по него не было бы софта. Также делался процессор Эльбрус, например

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта