![]() |
|
|
![]()
|
|
| Real |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 507 Регистрация: 9.11.2007 Репутация: нет Всего: -1 |
Asm он кроссплатформеный или нет?
Это сообщение отредактировал(а) Real - 4.1.2008, 20:42 |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 1 Всего: 207 |
нет
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: нет Всего: 91 |
Если я задам вопрос: "C++ кроссплатформенный ?", что вы ответите ?
Не язык определяет кроссплатформенность, а компилятор. fasm - кроссплатформенный. Другое дело, что для того чтобы создать кроссплатформенную программу придется писать свою реализацию кода под каждую платформу и с помощью условий делать автоматический или ручной выбор. В большинстве случаев то же самое делается и в C++, стандартные библиотеки C++ я не рассматриваю. |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 4 Всего: 158 |
для начала, стоило бы уточнить: что автор вопроса понимает под "кроссплатформенностью"?
|
|||
|
||||
| rei3er |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 21.9.2007 Репутация: нет Всего: нет |
SABROG,
ЯВУ - это абстракции, которые преобразуются в код на ассемблере для данной архитектуры код на ассемблере - это просто мнемонические обозначения инструкций, а инструкции не переносимы мнемонику и инструкции нельзя поставить во взаимно-однозначное соответствие при переносе на другую платформу FASM тут вообще не в тему если компилятор есть под разные ОС, то это еще не говорит о том, что при переносе его, скажем, на PowerPC, все программы написанные для x86 скомпилируются в этом суть некроссплатформенности ассемблера |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: нет Всего: 91 |
Но и не кроссплатформенным ты его не назовешь. Предположим есть старый компилятор C++, он ничего не знает о новых архитектурах, не знает как преобразовывать мнемонику, значит опять же не C++ не кроссплатформенный, а компилятор. Понятно, что это распространяется и на компилятора ассемблера. Если даже на новой платформе нет аналогу mov, xor, add, imul, то есть другие инструкции. И чтобы сделать программу на ассемблере кроссплатформенной, придется просто написать 2 разных кода. На C++ не нужно будет. А если даже нет компилятора под новую платформу, то можно тупо писать машинными кодами, если в этом спец, любой компилятор ассемблера это схавает.
И можно ли называть язык кроссплатформенным, если он поддерживат всего два процессора ? Или две операционные системы ? Я думаю, что можно. |
|||
|
||||
| rei3er |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 21.9.2007 Репутация: нет Всего: нет |
||||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: нет Всего: 91 |
Если руководствоваться такой логикой, то Firefox не кроссплатформенный, т.к. имеет две версии исходников, одни для винды, другие для линукса. Php, Python, Perl тоже не кроссплатформенные тогда.
У каждой ОС свой набор API функций, ни один кроссплатформенный компилятор не знает о них ничего. А что говорить о MSVC или Delphi, они настолько не кроссплатформенные, что в них нельзя создать приложения win16 (не забыли еще о таких ?) или под ДОС. |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 3 Всего: 121 |
Ты несёшь бред. C/C++ потому кроссплатформенный, что для исполнения программы под другой ОС нужна только перекомпиляция, если ты ограничиваешься только средствами самого языка. Это идеальный случай, в крайности впадать не надо, т.к. везде есть исключения. Скрипты тоже не нуждаются в переписывании, они исполняются на тех платформах, на которых есть интерпретатор. Сами же интерпретаторы не являются КК и их никто такими не считает. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: нет Всего: 91 |
А теперь подумай, если я ограничусь языком одного ассемблера и напишу программу, которая будет складывать 1+1. То чем она будет отличаться от C++ или Php, чем она не кроссплатформенна ? Кстати помимо fasm'a есть еще gas (GNU Assembler), который работает под *nix'aми и в составе mingw под виндой (as.exe). У него синтаксис AT&T. Поэтому я категорически не согласен с тем, что ассемблер не кроссплатформенный. Это сообщение отредактировал(а) SABROG - 11.1.2008, 15:42 |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 3 Всего: 121 |
Хорошо, а теперь представь, что твоя программа должна складывать введённыое пользователем a и 1, а после выводить результат. В чём может быть задача программы, которая ничего не получает и ничего не выдаёт? PS Напиши кроссплатформенный "Hello World" на асме. Это сообщение отредактировал(а) W4FhLF - 11.1.2008, 15:42 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: нет Всего: 91 |
Я писать ничего не буду, но скажу, что в какой ОС не пиши в видеопамять результат один - загараются пикселы на экране. И протокол работы с устройствами через порты (на нулевом кольце) от ОС не меняется никак. Если с этим разобрались, теперь можно попытаться меня припереть к стенке переключением понятия "платформы", начав считать ею процессор, а не ОС. Но даже в этом случае доработав компилятор ассемблер снова становится кроссплатформенным. |
|||
|
||||
| W4FhLF |
|
||||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 3 Всего: 121 |
Я тоже могу много чего сказать, но слова - это всего-лишь слова.
Есть понятие платформозависимых и платформонезависимых приложений. Если ты работаешь с видеопамятью и устройствами напрямую, т.е. не используешь никаких средств ОС, то это платформонезависимое(native) приложение и к нему термин КК вообще не применим. Так, что не мешай всё в кучу, а просто признай, что ошибся. В этом нет ничего смертельного.
Ога, а ещё мы процессор перепаяем, лишь ассемблер у нас кк стал -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
||||
|
|||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: нет Всего: 91 |
Возьми драйвер клавиатуры в линуксе (в свободном доступе лежит) и драйвер клавиатуры Windows (тоже в свободном доступе DDK) и сравни протокол взаимодействия с контроллером. И тогда мои слова сразу перестанут быть просто словами.
Т.е. все-таки ты тянешь в сторону ОС, называя ее Платформой, а не архитектуру. Тогда еще раз спрошу, чем пример с "1+1" тебе не нравится ? Он переносим ? Переносим ! А значит кроссплатформенный. Насчет printf в С++. Ну не имеет компилятор ассемблера таких функций, он что не кроссплатформенным после этого становится ? А может программы которые он создает не должны ничего никому выводить на экран ? Это что обязательное условие кроссплатформенности, кто это утвердил ? Я тоже могу такое условие поставить. Например используя стандартные средства C++ напиши кроссплатформенную программу, которая будет иметь инструкцию вставки любого файла в секцию данных. На фасме
Не сможешь потому, что это особенность компилятора. Если по критерию типа printf ты решаешь кроссплатформенный язык программирования или нет, то в таком случае C++ не кроссплатформенный, т.к. не имеет команд, которые имеют fasm, gas, nasm... |
|||
|
||||
| W4FhLF |
|
||||||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 3 Всего: 121 |
Ну ты танк
Так чё ж ты в дебри лезешь. Вся эта казуистика ни к чему, она бессмысленна. Я прошу самый простейший пример. Напиши исходник на ассемблере, который выводит в консоль строку "Hello World", чтобы я взял этот исходник, спокойно скомпилил его и там, и там, запустил и поверил. Не можешь написать? Почему? Мешают конструктивные особенности ОС? Вот и всё.
Ты не видишь разницы между компилятором и языком? Ассемблер - набор мнемоник, всё остальное - не ассемблер. Си описан официальным стандартом и printf является частью этого стандарта. Добавлено через 2 минуты и 33 секунды
ok, давай возьмём архитектуру. Напиши мне "Hello World" на ассемблере, а я проверю его на x86 и на Mac -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
||||||
|
|||||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |