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

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

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

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

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

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

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

7 ответов

16 просмотров

потому что собрано скорее всего с дефолтными настройками, которые подразумевают что это не самостоятельный 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 . Иначе по него не было бы софта. Также делался процессор Эльбрус, например

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта