Почему с++ может работать с разными процессорами а на Ассемблере приходится писать код под разные19.08.2020, 10:42. Показов 7592. Ответов 42
Метки нет (Все метки)
Я смотрел библиотеки с++ видел тоже что код заточен под разные процессоры. Хотелось бы получить больше информации по этому поводу.
0
|
|
| 19.08.2020, 10:42 | |
|
Ответы с готовыми решениями:
42
почему может не работать код ? Почему писать на ассемблере опасно? Вход под разными интерфейсами c# (на разные формы) |
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
|
||
| 19.08.2020, 21:37 | ||
|
Нужно больше? Есть исходники компиляторов, того же GCC например, откройте и посмотрите. Но вы вряд ли там что-то поймете.
0
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 19.08.2020, 21:38 | ||
|
Ассемблер это набор команд процессора. Какие-то процессоры совместимы по командам, для них он может быть одинаковым. Но в общем случае он разный, тем более когда ты его используешь в языках высокого уровня, типа с++.
0
|
||
| 19.08.2020, 23:34 [ТС] | ||
|
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|
| 20.08.2020, 00:15 | |
|
0
|
|
|
|
||||||||||||||||||||||||||
| 20.08.2020, 00:20 | ||||||||||||||||||||||||||
|
Nexi99,
Вот пишем, к примеру, исходник:
1
|
||||||||||||||||||||||||||
|
738 / 705 / 110
Регистрация: 29.05.2015
Сообщений: 4,362
|
|
| 20.08.2020, 06:45 | |
|
Компилятор С++ (как и компилятор ассемблера) не создаёт машинные коды. Он создаёт объектный файл .obj. А уже другая программа - редактор связей (линкер) - создаёт из одного или нескольких объектных файлов исполняемый код (для винды файл .exe), который и должен исполняться на нужном типе процессора.
При этом сам текст программы может быть написан на разных языках. В результате компиляции будут созданы объектные файлы, и если линкер не найдёт ошибок (ему всё понравится) - он создаст исполняемый файл. По крайней мере, так раньше работало, как сейчас - не знаю.
0
|
|
|
|
|||||||||||
| 20.08.2020, 08:41 | |||||||||||
|
alexu_007, под компилятором здесь для простоты подразумевается весь toolchain.
Добавлено через 1 час 49 минут Nexi99, а вот тот же исходник после компилятора GCC для AVR
0
|
|||||||||||
|
2692 / 1349 / 485
Регистрация: 08.11.2016
Сообщений: 3,739
|
|||||||
| 20.08.2020, 12:22 | |||||||
|
Процессорная команда имеет следующую структуру
Исполняемый файл программы есть непрерывная последовательность таких структур которая при отправке на исполнение загружается в ОЗУ вычислительной системы и скармливается процессору. Так вот - это и есть ассемблер который пишется в самом лучшем случае в HEX-редакторе непосредственно формирующем двоичный код вооружившись справочником по системе команд конкретного процессора, то есть это самый низкий уровень и переносимость такого кода ограничена этой самой системой команд, то есть если два различных процессора, что называется пуля в пулю, работают в одной системе команд, то такой код будет переносим, если же система команд одного процессора является расширенной относительно другого, то код будет переносим в одну сторону - от "слабого" собрата к "сильному", а вот наоборот только в частных случаях когда код не использует расширенную систему команд. Если же системы команд различаются в корне, например КОП за номером 0x0A одного процессора означает операцию безусловного перехода, а другого инкремент значения аккумулятора или, скажем, КОП одного занимает 7 бит, а другого 8, то... ну Вы поняли. Уровнем выше располагается компилируемый ассемблер который представлен мнемоникой языка (все вот эти вот: mov, div, add, cmp, jmp, etc...) такой код уже редактируется текстовым редактором и компилируется в двоичный исполняемый файл по правилам для конкретной архитектуры, то есть теперь компилятор как бы выполняет роль справочника по системам команд процессоров. Это обеспечивает более гибкую систему переносимости кода, но(!!!) не исполняемого файла который все равно придется компилировать отдельно под разные архитектуры, разными компиляторами. Еще выше уровнем уже располагаются языки высокого уровня которые располагают абстрактными конструкциями снабженными правилами перевода оных в компилируемый ассемблер который компилируется в исполняемый файл, как Вы (я надеюсь) уже поняли, с привязкой к архитектуре процессора.
0
|
|||||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 20.08.2020, 12:27 | ||
|
0
|
||
|
Модератор
|
|||
| 28.08.2020, 23:48 | |||
|
И cfront Страуструпа транслировл код на С++ на другой язык высокого уровня, как некоторые современные компиляторы. Но обычно в результате сборки программы системой программирования на с++ получается платформозависимая программа, котоорая может вообще не работать или работать не так даже на той же самой машине, но, например, в другом режиме функционирования ОС.
0
|
|||
| 29.08.2020, 00:05 [ТС] | ||
|
Также возникает вопрос а что если будут созданы новые процессоры, как компилятор с++ про них узнает чтобы применить все нужные ассемблерные штучки. Так что хоть тут и все умные но толком никто не знает как это происходит. Я на данный момент понял следующее. Компилятор может использовать универсальные команды для перевода кода в машинный язык. В компилятор может быть вшита методика и база процессоров под которые он может этот код собрать. Мне вот интересно если я напишу на Ассемблере функцию и задумаю передать в с++ как мне накрыть её такими возможностями или какую методику придумать чтобы эту функцию приспособить под другой процессор?
0
|
||
|
1359 / 857 / 366
Регистрация: 26.02.2015
Сообщений: 3,831
|
||
| 29.08.2020, 00:24 | ||
|
0
|
||
|
Модератор
|
||||
| 29.08.2020, 01:00 | ||||
|
Компиляторы пока не настолько умные, чтобы скачивать PDFки с описаниями новых инструкций, и себя модифицировать, чтобы их использовать. Когда IBM выпускает очередное поколение своих мейнфреймов: Z14, Z15 etc., она обновляет свои ассемблеры и компиляторы, чтобы использовать новые возможности аппаратуры. А если придумают что-то новое AMD, ARM или Intel, то, чтобы прикладные Windows-программисты могли оптимизировать программы под новые процессоры, программистам Microsoft нужно изучить документацию, доработать ассемблеры и компиляторы, отладить на образцах, представленных разработчиками аппаратуры, и выпустить очередное обновление MS Visual Studio.
0
|
||||
| 29.08.2020, 01:06 [ТС] | ||
|
Значит грубо говоря это правда что под каждый процессор нужно учить программиста для написания кода на Ассемблере.
0
|
||
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
|
||
| 29.08.2020, 01:12 | ||
|
Не по теме: По моему вы вообще не понимаете о чем говорите и что вам нужно... Что скорее всего вызвано сильным недостатком знаний в данной области. Вам бы учебники почитать хотя бы того же С++ прежде чем лезть в assembler...
0
|
||
|
Модератор
|
|
| 29.08.2020, 01:23 | |
|
Можно научить не программиста, а программу на языке высокого уровня генерировать инструкции процессора и складывать их в исполняемые файлы в формате, подходящем для загручика приладных программ ОС.
Большинство современных ассемблеров, компоновщиков, компиляторов и отладчиков написаны на языках высокого уровня, в т.ч и на с++. Если ассемблер умеет формировать коды инструкций, то почему Ваша программа на с++ не сможет? Сложные задачи эффективнее решать, используя оптимизированные высокоуровневые инструменты. Или Вы Ассемблером называете что-то иное?
0
|
|
| 29.08.2020, 02:37 [ТС] | ||
|
0
|
||
|
738 / 705 / 110
Регистрация: 29.05.2015
Сообщений: 4,362
|
||
| 29.08.2020, 07:42 | ||
|
0
|
||
|
Модератор
|
||||||
| 29.08.2020, 07:44 | ||||||
|
Если не хватает гибкости серийных процессоров, изучайте, например, FPGA и программно-языковой инструментарий, используемый для задания их конфигурации. И получите не жалкие 5%, а ещё более 95% для развития мозга.
В некоторых системах ассемблеров вообще нет и не было. Что касается гибкости с++, то подобный код не обязан даже компилироваться, но, на машинах т.н. фон-неймановской(манчестерской) архитектуры, зачастую, работает ожидаемым образом:
0
|
||||||
| 29.08.2020, 07:44 | |
|
Есть ли архиватор, который под разными паролями распаковывал бы разные архивы ? Почему данный код игнорирует 1-ый символ и приходится первую букву дублировать? Как может сервер-сайд код работать или не работать на конкретном компе? Что почитать что бы писать на ассемблере под arm? Может ли компьютер сам писать код и проверять его? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки.
Добавлено:
- Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
|
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы.
Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
|
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|