Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Новый компилятор

424
31 марта 2003 года
(C)dragon
307 / / 04.12.2002
Я вот тут подумал и решил, что может быть полезно написать новый компилятор асма. Может кого то устраивают существующие, но я попробую сейчас что-нибудь сказать(TASM, MASM, NASM, FASM)

TASM: (+)
Очень хорошая поддержка структур и объединений
Мощный препроцессор и макросредства, лучше чем у других
Режим IDEAL, в котором лучше кодить, чем в MASM'е
С помощью например .486 легко писать под какой-нибудь определённый проц

TASM: (-)
Работает только под DOS или WINDOWS
нельзя писать под другие платформы
не поддерживает многомерные массивы
не поддерживает fastcall функции
трудности с написанием Boot сектора
Последняя доступная в сети версия - 5.3 поддерживает только Pentium pro
Нет нормальных include файлов для Windows
В режиме IDEAL под WIndows нельзя напрямую указать тип в секциях данных и неинициализированных данных(можно только db, dw, dd)
сложно использовать 32-битный бинарный формат

MASM: (+)
Доступна последняя версия 7.0, которая поддерживает все инструкции Intel
Хорошая поддержка макросов, структур, массивов и объединений
Также можно писать под какой-нибудь определённый процессор
Есть много средств, упрощающих разработку под Windows

MASM: (-)
Заточен только под DOS/WINDOWS, нельзя ничего делать под другие OS
Не поддерживает многомерных массивов, ни Fastcall функций
Также сложно писать Boot секторы и бинарные 32-битные файлы


NASM: (+)
Многоплатформенный - позволяет писать под DOS, WINDOWS и LINUX
Легко писать любые бинарные файлы

NASM: (-)
Нельзя задать процессор
Нет поддержки структур и массивов
нет встроенной поддержки вызовов функций stdcall и fastcall
не запоминает размерность переменных
только двухпроходной
Неудобно писать под Windows


FASM: (+)
Также многоплатформенный и позволяет легко писать бинарные файлы
Часто обновляется
Есть GUI версия под Windows

FASM: (-)
Нельзя задавать процессор
плохая поддержка структур
нет встроенный поддржки вызова stdcall и fastcall функций
Не запоминает размерность переменных
Нет Include файлов для Windows

Так вот, я предлагаю создать компилятор, который будет иметь все эти приемущества и не иметь этих недостатков. Кто-нибудь поддержит?
1.9K
31 марта 2003 года
kswapd
93 / / 08.02.2003
Посмотри GNU As, имхо assembler of choice :)
1.9K
31 марта 2003 года
SkLite
38 / / 02.12.2002
hi
я бы хотел поучавствовать.
но у меня есть предложение сделать смесь асма и си типа 2в1.
хотя согласен на любой. давно тема интересует. нарыл немного инфы да все ни как руки не доходят.
1.9K
31 марта 2003 года
kswapd
93 / / 08.02.2003
Цитата:
Originally posted by SkLite
hi
я бы хотел поучавствовать.
но у меня есть предложение сделать смесь асма и си типа 2в1.
хотя согласен на любой. давно тема интересует. нарыл немного инфы да все ни как руки не доходят.



А смысл такую смесь делать? В Си есть встроенный ассемблер, его что не достаточно? Да Си и так достаточно низкоуровневый.

GNU as поддерживает кучу архитектур, не только интел, и при этом довольно удобная вещь. Можно даже использовать сишный препроцессор. И зачем тогда изобретать велосипед?

1.9K
31 марта 2003 года
SkLite
38 / / 02.12.2002
я имел в виду с++
но уклон в сторону асма, типа асм++ :)

если не трудно кинь ссылку на этот ас
а во фре он есть? или в Асп линукс? других дистрибутивов нет.

к тому же сам процесс! никогда не писал компилятора :) (если не считать калькулятора (да и то со страуструпа под vс++ 6.0 содрал))
1.9K
31 марта 2003 года
kswapd
93 / / 08.02.2003
Цитата:
Originally posted by SkLite
я имел в виду с++
но уклон в сторону асма, типа асм++ :)

если не трудно кинь ссылку на этот ас
а во фре он есть? или в Асп линукс? других дистрибутивов нет.

к тому же сам процесс! никогда не писал компилятора :) (если не считать калькулятора (да и то со страуструпа под vс++ 6.0 содрал))



гы асм++ это типа с классами? :)))

этот ас должен работать в любом Unix и по идее под Windows заставить можно. В Асп должен быть, проверь есть ли команда as, если нет, поищи пакет binutils на дисках. Когда установишь набираешь info as и читаешь :). Ссылка . А про написание компилятора - асм для обучения не шибко годится (слишком просто :)), лучше что нить посерьезнее написать, типа скриптового языка. На этом сайте вроде инфа по компиляторам есть.

1.9K
31 марта 2003 года
kswapd
93 / / 08.02.2003
Цитата:
Originally posted by SkLite
я имел в виду с++
но уклон в сторону асма, типа асм++ :)

если не трудно кинь ссылку на этот ас
а во фре он есть? или в Асп линукс? других дистрибутивов нет.

к тому же сам процесс! никогда не писал компилятора :) (если не считать калькулятора (да и то со страуструпа под vс++ 6.0 содрал))



гы асм++ это типа с классами? :)))

этот ас должен работать в любом Unix и по идее под Windows заставить можно. В Асп должен быть, проверь есть ли команда as, если нет, поищи пакет binutils на дисках. Когда установишь набираешь info as и читаешь :). Ссылка на исходники http://ftp.gnu.org/gnu/binutils/binutils-2.13.1.tar.gz. А про написание компилятора - асм для обучения не шибко годится (слишком просто :)), лучше что нить посерьезнее написать, типа скриптового языка. На этом сайте вроде инфа по компиляторам есть.

1.8K
31 марта 2003 года
Exfector
74 / / 12.10.2002
Цитата:
Originally posted by (C)dragon
Я вот тут подумал и решил, что может быть полезно написать новый компилятор асма. Может кого то устраивают существующие, но я попробую сейчас что-нибудь сказать(TASM, MASM, NASM, FASM)

TASM: (+)
Очень хорошая поддержка структур и объединений
Мощный препроцессор и макросредства, лучше чем у других
Режим IDEAL, в котором лучше кодить, чем в MASM'е
С помощью например .486 легко писать под какой-нибудь определённый проц

TASM: (-)
Работает только под DOS или WINDOWS
нельзя писать под другие платформы
не поддерживает многомерные массивы
не поддерживает fastcall функции
трудности с написанием Boot сектора
Последняя доступная в сети версия - 5.3 поддерживает только Pentium pro
Нет нормальных include файлов для Windows
В режиме IDEAL под WIndows нельзя напрямую указать тип в секциях данных и неинициализированных данных(можно только db, dw, dd)
сложно использовать 32-битный бинарный формат

MASM: (+)
Доступна последняя версия 7.0, которая поддерживает все инструкции Intel
Хорошая поддержка макросов, структур, массивов и объединений
Также можно писать под какой-нибудь определённый процессор
Есть много средств, упрощающих разработку под Windows

MASM: (-)
Заточен только под DOS/WINDOWS, нельзя ничего делать под другие OS
Не поддерживает многомерных массивов, ни Fastcall функций
Также сложно писать Boot секторы и бинарные 32-битные файлы


NASM: (+)
Многоплатформенный - позволяет писать под DOS, WINDOWS и LINUX
Легко писать любые бинарные файлы

NASM: (-)
Нельзя задать процессор
Нет поддержки структур и массивов
нет встроенной поддержки вызовов функций stdcall и fastcall
не запоминает размерность переменных
только двухпроходной
Неудобно писать под Windows


FASM: (+)
Также многоплатформенный и позволяет легко писать бинарные файлы
Часто обновляется
Есть GUI версия под Windows

FASM: (-)
Нельзя задавать процессор
плохая поддержка структур
нет встроенный поддржки вызова stdcall и fastcall функций
Не запоминает размерность переменных
Нет Include файлов для Windows

Так вот, я предлагаю создать компилятор, который будет иметь все эти приемущества и не иметь этих недостатков. Кто-нибудь поддержит?



hmm .. zachem .. <1> - est', <0> - est', <return> toshe vrode kak imeet'Sya .. chto eshyo nushno coderu chtobi vstretit' starost' ? ;)

443
31 марта 2003 года
REmindER
292 / / 23.03.2003
Цитата:
Originally posted by (C)dragon
Я вот тут подумал и решил, что может быть полезно написать новый компилятор асма. Может кого то устраивают существующие, но я попробую сейчас что-нибудь сказать(TASM, MASM, NASM, FASM)

TASM: (+)
Очень хорошая поддержка структур и объединений
Мощный препроцессор и макросредства, лучше чем у других
Режим IDEAL, в котором лучше кодить, чем в MASM'е
С помощью например .486 легко писать под какой-нибудь определённый проц

TASM: (-)
Работает только под DOS или WINDOWS
нельзя писать под другие платформы
не поддерживает многомерные массивы
не поддерживает fastcall функции
трудности с написанием Boot сектора
Последняя доступная в сети версия - 5.3 поддерживает только Pentium pro
Нет нормальных include файлов для Windows
В режиме IDEAL под WIndows нельзя напрямую указать тип в секциях данных и неинициализированных данных(можно только db, dw, dd)
сложно использовать 32-битный бинарный формат

MASM: (+)
Доступна последняя версия 7.0, которая поддерживает все инструкции Intel
Хорошая поддержка макросов, структур, массивов и объединений
Также можно писать под какой-нибудь определённый процессор
Есть много средств, упрощающих разработку под Windows

MASM: (-)
Заточен только под DOS/WINDOWS, нельзя ничего делать под другие OS
Не поддерживает многомерных массивов, ни Fastcall функций
Также сложно писать Boot секторы и бинарные 32-битные файлы


NASM: (+)
Многоплатформенный - позволяет писать под DOS, WINDOWS и LINUX
Легко писать любые бинарные файлы

NASM: (-)
Нельзя задать процессор
Нет поддержки структур и массивов
нет встроенной поддержки вызовов функций stdcall и fastcall
не запоминает размерность переменных
только двухпроходной
Неудобно писать под Windows


FASM: (+)
Также многоплатформенный и позволяет легко писать бинарные файлы
Часто обновляется
Есть GUI версия под Windows

FASM: (-)
Нельзя задавать процессор
плохая поддержка структур
нет встроенный поддржки вызова stdcall и fastcall функций
Не запоминает размерность переменных
Нет Include файлов для Windows

Так вот, я предлагаю создать компилятор, который будет иметь все эти приемущества и не иметь этих недостатков. Кто-нибудь поддержит?


Очень хорошая мысль. А какие у тебя есть мысли по поводу реализации?

424
01 апреля 2003 года
(C)dragon
307 / / 04.12.2002
Смесь асма и C++? Конечно можно, только не использовать полностью синтаксис C(ну типа операторы switch, for). И поддержку объектов надо тоде сделать, а также пространства имён. А в макроопределениях, и других фигнях, где препроцессор используется можно сделать чисто C-синтаксис, что будет гораздо удобнее, чем макроязык TASM. Если кто хочет поучавствовать, то сначала надо решится на чём писать. Есть два варианта - асм и Borland C++Builder, у меня больше ничего нет. На асме может показаться трудно, но весь FASM написан именно на нём. Я больше склоняюсь к тому, что писать надо на асме(TASM), т.к. здесь размер и быстродействие будет иметь значение.

Про gas... Сомневаюсь, что на нём можно например под Windows писать, а я говорил о полность универсальном компиляторе. Т.е. где можно добавить любой выходной формат, например шаблонный файл сделать, чтобы output по нему и создавался.
1.9K
01 апреля 2003 года
kswapd
93 / / 08.02.2003
Цитата:
Originally posted by (C)dragon
Смесь асма и C++? Конечно можно, только не использовать полностью синтаксис C(ну типа операторы switch, for). И поддержку объектов надо тоде сделать, а также пространства имён. А в макроопределениях, и других фигнях, где препроцессор используется можно сделать чисто C-синтаксис, что будет гораздо удобнее, чем макроязык TASM. Если кто хочет поучавствовать, то сначала надо решится на чём писать. Есть два варианта - асм и Borland C++Builder, у меня больше ничего нет. На асме может показаться трудно, но весь FASM написан именно на нём. Я больше склоняюсь к тому, что писать надо на асме(TASM), т.к. здесь размер и быстродействие будет иметь значение.

Про gas... Сомневаюсь, что на нём можно например под Windows писать, а я говорил о полность универсальном компиляторе. Т.е. где можно добавить любой выходной формат, например шаблонный файл сделать, чтобы output по нему и создавался.



Ну gcc под Windows пашет? Пашет. => gas тоже пашет, поскольку без него не пахал бы gcc :). Ну конечно повозиться там придется, cygwin может поставить... А 100% кросс-платформенности и не бывает. В gas она 99% :) И вобще, товарищи программисты, переходите на Linux. Вы поймете, сколько времени вы потратили зря, сидя в Windows :). А если ты имел ввиду писать проги для Windows (с gui), то это, извините, извращение. На асме надо бутсекторы да критические участки кода писАть. 80% времени выполняется 20% кода. А в большинстве случаев даже 90%/10%.

... на асме компилятор писать? Ишшо один Mitja Gladkih? :) В общем не страдайте фигней, а давайте лучше сделаем такую вещь: интерпретатор асма :) Я серъезно. Например вот так это будет выглядеть:

 
Код:
i386vm> printregs
EAX: 0x0000000
EBX: 0x4582455
.... и т.д.
i386vm> mov $1, %eax
i386vm> printregs
EAX: 0x0000001
....


В общем для обучения асму пойдет. У кого какие предложения?
1.9K
01 апреля 2003 года
kswapd
93 / / 08.02.2003
Цитата:
Originally posted by (C)dragon
Я больше склоняюсь к тому, что писать надо на асме(TASM), т.к. здесь размер и быстродействие будет иметь значение.



Вот именно потому что имеет значение быстродействие, писать нужно на Си (если все-таки решитесь).. Но только не на борланде :). А размер... разница в пару кб ничего не решает.

395
01 апреля 2003 года
RelB
367 / / 09.11.2002
Цитата:
Originally posted by (C)dragon
Я вот тут подумал и решил, что может быть полезно написать новый компилятор асма. Может кого то устраивают существующие, но я попробую сейчас что-нибудь сказать(TASM, MASM, NASM, FASM)

TASM: (+)
Очень хорошая поддержка структур и объединений
Мощный препроцессор и макросредства, лучше чем у других
Режим IDEAL, в котором лучше кодить, чем в MASM'е
С помощью например .486 легко писать под какой-нибудь определённый проц

TASM: (-)
Работает только под DOS или WINDOWS
нельзя писать под другие платформы
не поддерживает многомерные массивы
не поддерживает fastcall функции
трудности с написанием Boot сектора
Последняя доступная в сети версия - 5.3 поддерживает только Pentium pro
Нет нормальных include файлов для Windows
В режиме IDEAL под WIndows нельзя напрямую указать тип в секциях данных и неинициализированных данных(можно только db, dw, dd)
сложно использовать 32-битный бинарный формат

MASM: (+)
Доступна последняя версия 7.0, которая поддерживает все инструкции Intel
Хорошая поддержка макросов, структур, массивов и объединений
Также можно писать под какой-нибудь определённый процессор
Есть много средств, упрощающих разработку под Windows

MASM: (-)
Заточен только под DOS/WINDOWS, нельзя ничего делать под другие OS
Не поддерживает многомерных массивов, ни Fastcall функций
Также сложно писать Boot секторы и бинарные 32-битные файлы


NASM: (+)
Многоплатформенный - позволяет писать под DOS, WINDOWS и LINUX
Легко писать любые бинарные файлы

NASM: (-)
Нельзя задать процессор
Нет поддержки структур и массивов
нет встроенной поддержки вызовов функций stdcall и fastcall
не запоминает размерность переменных
только двухпроходной
Неудобно писать под Windows


FASM: (+)
Также многоплатформенный и позволяет легко писать бинарные файлы
Часто обновляется
Есть GUI версия под Windows

FASM: (-)
Нельзя задавать процессор
плохая поддержка структур
нет встроенный поддржки вызова stdcall и fastcall функций
Не запоминает размерность переменных
Нет Include файлов для Windows

Так вот, я предлагаю создать компилятор, который будет иметь все эти приемущества и не иметь этих недостатков. Кто-нибудь поддержит?


Гы :). Давайте поговорим о ТАСМЕ :). Ну начнем с того, что тасм еще и объекты поддерживает, т.е. асм++ уже есть :). Далее, насчет многомерных массивов... А другие поддерживают? Просто я незнаю, извините уж. Зато можно использовать вложенные структуры или адресоваться к ним через регистры (даже например так: (Descriptor eax+4*ebx+offset).limit0_15 Насчет фасткола, это просто очень легко сделать через макросы (ну просто очень просто) :). Насчет бута... Ну это может быть. Кстати, странно, я всегда думал, что версия 5.3 и Pentium III поддерживает... Может я опять ошибаюсь :). Насчет include-ов, ну это смотря где искать... Хотя эти инклуды мне кажеться только у Майка и есть. Да и на асме писать под винду - конкретный мазохизм :). Да и быстродействия не получишь...

Далее писать этот компилятор можно и даже нужно на Си. На любом Си. Хоть на Борланде... Главное, чтоб выходной код был крутой (я имею ввиду код программы на асме), ничего лишнего. Быстродействие, если учитывать мощность современных процов, особое значение не имеет. Кстати, и не думайте, что это просто - это очень не просто. Во-первых, если вы хотите делать мощные препроцессор и макросы, то это не так просто запрограммировать; во-вторых, компилятор должен не просто тупо подставлять опкоды, а и выбирать самые подходящие и короткие варианты. Дали бы нам исходники TASM-а :)...

1.9K
02 апреля 2003 года
kswapd
93 / / 08.02.2003
Цитата:
Originally posted by RelB

Гы :). Давайте поговорим о ТАСМЕ :). Ну начнем с того, что тасм еще и объекты поддерживает, т.е. асм++ уже есть :). Далее, насчет многомерных массивов... А другие поддерживают? Просто я незнаю, извините уж. Зато можно использовать вложенные структуры или адресоваться к ним через регистры (даже например так: (Descriptor eax+4*ebx+offset).limit0_15 Насчет фасткола, это просто очень легко сделать через макросы (ну просто очень просто) :). Насчет бута... Ну это может быть. Кстати, странно, я всегда думал, что версия 5.3 и Pentium III поддерживает... Может я опять ошибаюсь :). Насчет include-ов, ну это смотря где искать... Хотя эти инклуды мне кажеться только у Майка и есть. Да и на асме писать под винду - конкретный мазохизм :). Да и быстродействия не получишь...

Далее писать этот компилятор можно и даже нужно на Си. На любом Си. Хоть на Борланде... Главное, чтоб выходной код был крутой (я имею ввиду код программы на асме), ничего лишнего. Быстродействие, если учитывать мощность современных процов, особое значение не имеет. Кстати, и не думайте, что это просто - это очень не просто. Во-первых, если вы хотите делать мощные препроцессор и макросы, то это не так просто запрограммировать; во-вторых, компилятор должен не просто тупо подставлять опкоды, а и выбирать самые подходящие и короткие варианты. Дали бы нам исходники TASM-а :)...



Хм а разве одна команда != одна последовательность байтов? Поправьте меня, если я не прав (с примером если можно :))

424
02 апреля 2003 года
(C)dragon
307 / / 04.12.2002
Цитата:
Originally posted by kswapd


Хм а разве одна команда != одна последовательность байтов? Поправьте меня, если я не прав (с примером если можно :))



Поправляю: push 0 может быть 5 байт, а может быть 2. Просто есть push imm32 и push imm8. Таких ещё много.

Я предложил Borland, т.к. нет у меня других компиляторов. Можно будет достать. Также многие говорят, что писать компилятор на асме, как и писать GUI приложения - извращение. Но FASM - полностью написан на асме, даже его GUI версия. Там есть его исходники. Так кто-нибудь хочет этот компилятор написать?

1.9K
02 апреля 2003 года
kswapd
93 / / 08.02.2003
Цитата:
Originally posted by (C)dragon


Поправляю: push 0 может быть 5 байт, а может быть 2. Просто есть push imm32 и push imm8. Таких ещё много.

Я предложил Borland, т.к. нет у меня других компиляторов. Можно будет достать. Также многие говорят, что писать компилятор на асме, как и писать GUI приложения - извращение. Но FASM - полностью написан на асме, даже его GUI версия. Там есть его исходники. Так кто-нибудь хочет этот компилятор написать?



А мне больше нравится синтаксис AT&T, там нет таких неопределенностей, есть pushb 0, pushw 0 и pushl 0, и во многом он мне кажется логичнее интеловского. В асме вобще вся оптимизация должна оставаться кодеру. Типа сам выбрал :).

А FASM что, лучший пример для подражания? :)

1.9K
03 апреля 2003 года
kswapd
93 / / 08.02.2003
Цитата:
Originally posted by kswapd


А мне больше нравится синтаксис AT&T, там нет таких неопределенностей, есть pushb 0, pushw 0 и pushl 0, и во многом он мне кажется логичнее интеловского. В асме вобще вся оптимизация должна оставаться кодеру. Типа сам выбрал :).

А FASM что, лучший пример для подражания? :)



Упс.. ашипочка :) конечно же, pushb $0, pushw $0 и pushl $0.

1.9K
03 апреля 2003 года
SkLite
38 / / 02.12.2002
hi
Мне кажется, что это должен быть с++ но с возможностью самому выбирать как, через что и когда передавать параметры в функции. где сохранять регистры а где нет. Т.е. немного принизить (сделать более низкоуровневым) с++. В общем это должен быть с++ с некоторыми изменениями (мне так кажется :) )

Возможно даже чтобы он компилил и с++ и асм (например по расширению) и смешаный код (выбрасть один по умолчению, а второй во вставках типа асм{...} или с++{...} ).

Поддержка объектов в тасме недостаточна и не удобна, хотя структуры на уровне.

Писать я могу на асме или на вижал с++. Борланда у меня нет. Но мне кажется на компиляторах под винды мультиосного не получится, хотя...

В общем мне хочется просто написать самому компилятор. Я за!

З.Ы. Только не надо в меня кидатся тухлыми помидорами :)
424
04 апреля 2003 года
(C)dragon
307 / / 04.12.2002
И всё же писать так, чтобы компилятор полноценно обрабатывал код C++ не имеет смысла, всё равно лучше чем существующие(хотя бы Intel C++ или gcc) не получится. Надо писать асм, но с поддержкой таких штук, как многомерные массивы, перечисления, структуры, в том числе и вложенные, объекты, пространства имён, полная поддержкой UNICODE, препроцессор с синтаксисом C++, встроенной поддержекой функций stdcall, cdecl и fastcall, указанием типа процессора, чтобы было легко писать 16 и 32-битные бинарные файлы, а также программы и библиотеки для всех популярных ОС - Windows, DOS, Linux(и ему подобных). Вот так.

Если уметь писать на асме, то это всё будет не сложно. К тому же если писать под Windows на C++, то под Linux всё равно придёться код переделывать.

Сначала надо создать библиотеку с часто вызываемыми функциями - для работы со строками, такими, как определение длины и копирование(ну это само собой), поиском подстрок, выделением подстрок, только с параметром-адресом памяти, куда строку копировать. Почему я не хочу использовать строковые функции Windows? А вы на них под отладчиком посмотрите, вам тоже сразу расхочется!
1.9K
04 апреля 2003 года
kswapd
93 / / 08.02.2003
Цитата:
Originally posted by (C)dragon
И всё же писать так, чтобы компилятор полноценно обрабатывал код C++ не имеет смысла, всё равно лучше чем существующие(хотя бы Intel C++ или gcc) не получится.



"Хотя бы" gcc ? :) ну-ну.

Цитата:

Надо писать асм, но с поддержкой таких штук, как многомерные массивы, перечисления, структуры, в том числе и вложенные, объекты, пространства имён, полная поддержкой UNICODE, препроцессор с синтаксисом C++, встроенной поддержекой функций stdcall, cdecl и fastcall, указанием типа процессора, чтобы было легко писать 16 и 32-битные бинарные файлы, а также программы и библиотеки для всех популярных ОС - Windows, DOS, Linux(и ему подобных). Вот так.



Это все полный бред. Сорри. Но из попытки напихать низкоуровневый язык ВУ-фичами ничего не выйдет. И еще. Нет никакого "препроцессора с синтаксисом C++". И неправильно называть Unix-подобные оси Linux-подобными.

Цитата:

Если уметь писать на асме, то это всё будет не сложно. К тому же если писать под Windows на C++, то под Linux всё равно придёться код переделывать.



Если писать на чистом C++, не придется. Если ты про графику, то есть кросс-платформенные графические библиотеки, и если не писать под MFC, переделывать опять не придется. Абыдна, да? :) А вот если писать на асме, и вдруг придется портировать прогу на другой проц, то придется все писать с нуля.

Цитата:

Сначала надо создать библиотеку с часто вызываемыми функциями - для работы со строками, такими, как определение длины и копирование(ну это само собой), поиском подстрок, выделением подстрок, только с параметром-адресом памяти, куда строку копировать. Почему я не хочу использовать строковые функции Windows? А вы на них под отладчиком посмотрите, вам тоже сразу расхочется!



В общем не понятно, зачем это все асму. Попытка повернуть время вспять? :)

1.8K
04 апреля 2003 года
Lonesome
112 / / 27.01.2003
Цитата:
Originally posted by kswapd


... на асме компилятор писать? Ишшо один Mitja Gladkih? :) В общем не страдайте фигней, а давайте лучше сделаем такую вещь: интерпретатор асма :) Я серъезно. Например вот так это будет выглядеть:

 
Код:
i386vm> printregs
EAX: 0x0000000
EBX: 0x4582455
.... и т.д.
i386vm> mov $1, %eax
i386vm> printregs
EAX: 0x0000001
....


В общем для обучения асму пойдет. У кого какие предложения?



Кстати отличная идея! И не слишком сложна в реализации. А вот и мое первое предложение:

Код:
%{
#include "asmvm.h"
%}

%%
\n return TOKEN_NEWLINE;

\$[0-9xA-Fa-f]+ return TOKEN_NUMBER;
[A-Za-z0-9_]+: return TOKEN_LABEL;
\%[A-Za-z0-9]+ return TOKEN_REGISTER;
[A-Za-z0-9]+ return TOKEN_OPERATION;
\.[A-Za-z0-9_]+ return TOKEN_DIRECTIVE;
\".+\" return TOKEN_STRING;
\[.+\] return TOKEN_MEMORY;
\;.+ /* skip comments */;
[ ]+ /* skip whitespaces */;
[\t]+ /*skip tabs */;
<<EOF>> return TOKEN_EOF;
%%


Лексический анализатор готов :)
1.8K
04 апреля 2003 года
Lonesome
112 / / 27.01.2003
Цитата:
Originally posted by (C)dragon
Я вот тут подумал и решил, что может быть полезно написать новый компилятор асма. Может кого то устраивают существующие, но я попробую сейчас что-нибудь сказать(TASM, MASM, NASM, FASM)

Так вот, я предлагаю создать компилятор, который будет иметь все эти приемущества и не иметь этих недостатков. Кто-нибудь поддержит?



Товарищ, а ты слышал про Sphinx C-- и HLA (High Level Assembler) ?

424
05 апреля 2003 года
(C)dragon
307 / / 04.12.2002
Цитата:
Originally posted by kswapd

Это все полный бред. Сорри. Но из попытки напихать низкоуровневый язык ВУ-фичами ничего не выйдет. И еще. Нет никакого "препроцессора с синтаксисом C++". И неправильно называть Unix-подобные оси Linux-подобными.



Почему интересно нельзя например пространства имён добавить? А то например хочется внутри какой-нибудь процедуры назвать как-нибудь переменную, а она уже есть - облом. С пространствами будет удобнее. А с объектами - труднее - здесь надо думать, как лучше сделать. Встроенная поддержка stdcall, cdecl и fastcall - это тоже бред? Не зннаю, вот TASM и MASM поддерживают stdcall, гораздо удобнее так работать. Теперь про препроцессор с синтаксисом C++. Ты правильно сказал, что его нет, но сделать можно. Посмотри на большие макросы в TASM'е - совсем удобный синтаксис? Если он будет как в C++, макросы делать будет легче. А поддержка UNICODE сейчас для компилятора необходима, потому что от ANSI постепенно уходят. Вот такой вот бред.

Цитата:

Если писать на чистом C++, не придется. Если ты про графику, то есть кросс-платформенные графические библиотеки, и если не писать под MFC, переделывать опять не придется. Абыдна, да? :) А вот если писать на асме, и вдруг придется портировать прогу на другой проц, то придется все писать с нуля.



MFC - отстой, не знаю, кто там это использует. Если писать под GUI на асме, то пользоваться лучше чистым API. То что нет IDE хорошего - это другое дело. Вот легко ли было на C++ на чистом API писать? Вот так вот. И если на асме написано, то чтобы перенести на другую ОС, то большинство кода менять не надо. Менять надо только вызовы функций ОС.

Цитата:

В общем не понятно, зачем это все асму. Попытка повернуть время вспять? :)



Просто в Windows строковые функции вообще ни хрена не оптимизированы, а их при активной работе столько вызывают... Так наверно со всем API, понятно почему тормозит.

1.9K
05 апреля 2003 года
kswapd
93 / / 08.02.2003
Цитата:
Originally posted by (C)dragon


Почему интересно нельзя например пространства имён добавить? А то например хочется внутри какой-нибудь процедуры назвать как-нибудь переменную, а она уже есть - облом. С пространствами будет удобнее. А с объектами - труднее - здесь надо думать, как лучше сделать. Встроенная поддержка stdcall, cdecl и fastcall - это тоже бред? Не зннаю, вот TASM и MASM поддерживают stdcall, гораздо удобнее так работать. Теперь про препроцессор с синтаксисом C++. Ты правильно сказал, что его нет, но сделать можно. Посмотри на большие макросы в TASM'е - совсем удобный синтаксис? Если он будет как в C++, макросы делать будет легче. А поддержка UNICODE сейчас для компилятора необходима, потому что от ANSI постепенно уходят. Вот такой вот бред.



Добавить можно. Я просто не вижу смсыла делать это все для асма. Есть же ЯВУ, где все это реализовано. Зачем асм для таких целей? Про препроцессор я хотел сказать только что нет препроцессора С++ но есть препроцессор С :). В С++ он такой же. Называйте вещи своими именами. Кстати в gas он используется, и это плюс.

Цитата:
Originally posted by (C)dragon

MFC - отстой, не знаю, кто там это использует. Если писать под GUI на асме, то пользоваться лучше чистым API. То что нет IDE хорошего - это другое дело. Вот легко ли было на C++ на чистом API писать? Вот так вот. И если на асме написано, то чтобы перенести на другую ОС, то большинство кода менять не надо. Менять надо только вызовы функций ОС.



MFC оно конечно отстой, только ведь используют. Полно программ (не самых худших) на нем написано.

Я не понял какая связь между наличием IDE и написанием проги с использованием только API.

Так это на любом языке менять надо только вызовы функций ОС. А если эти вызовы там в корне другие? Или аналогичных вобще нет? А при переносе на другую архитектуру на асме _весь_ код переписывать придется.

Цитата:
Originally posted by (C)dragon

Просто в Windows строковые функции вообще ни хрена не оптимизированы, а их при активной работе столько вызывают... Так наверно со всем API, понятно почему тормозит.



Последнее мое предложение относилось к посту в целом. А что значит "строковые функции Windows"? О чем речь?

1.8K
05 апреля 2003 года
Lonesome
112 / / 27.01.2003
Цитата:
Originally posted by kswapd


Про препроцессор я хотел сказать только что нет препроцессора С++ но есть препроцессор С :). В С++ он такой же. Называйте вещи своими именами. Кстати в gas он используется, и это плюс.



А я его с NASM'ом использую. И ничего, держится :) А вообще для gas'а cpp не родной препроцессор, а родной - GASP

1.8K
05 апреля 2003 года
Lonesome
112 / / 27.01.2003
Цитата:
Originally posted by (C)dragon


Теперь про препроцессор с синтаксисом C++. Ты правильно сказал, что его нет, но сделать можно. Посмотри на большие макросы в TASM'е - совсем удобный синтаксис? Если он будет как в C++, макросы делать будет легче.



Ну и кто тебе мешает использовать другой препроцессор? Да хоть де-фактовый юниксовый M4?

1.9K
05 апреля 2003 года
kswapd
93 / / 08.02.2003
Цитата:
Originally posted by Lonesome


А я его с NASM'ом использую. И ничего, держится :) А вообще для gas'а cpp не родной препроцессор, а родной - GASP



Я в курсе, но все равно все .S через cpp прогоняются :) А вот .s - нет.

424
06 апреля 2003 года
(C)dragon
307 / / 04.12.2002
Да, препроцессор действительно с синтаксисом C, не объекты же в нём использовать??? А строковые функции Windows - lstrlen, lstrcpy, lstrcat, lstrcmp - опи должны быть оптимизированы под какой-нибудь процессор, потому что их очень часто вызывают программы. А там мусор, да ещё примитивные циклы, которые где-то за 4 такта обрабатывают байт, а я видел такие функции, где за 3.8 такта обрабатывалось 8 байт(MMX) и за 4 такта 4 байта без MMX. Получается, что можно сделать функцию в 8 раз быстрее. И сделать быстрее наверняка можно все функции, где есть циклы. Вот почему Windows - такой тормоз.
1.8K
06 апреля 2003 года
Lonesome
112 / / 27.01.2003
Ну так что, товарищи кодеры, интерпретатор асма будем лепить? Я тут начал уже, вот исходники:
http://www.lowlevel.ru/asmvm/asmvm.tar.gz

Работает в интерактивном режиме и воспринимает команды mov, and, or, xor, xchg и bswap. В качестве операндов можно использовать регистры общего назначения и непосредственные значения.
Команда .printregs показывает регистры и флаги.
1.9K
06 апреля 2003 года
kswapd
93 / / 08.02.2003
Цитата:
Originally posted by Lonesome
Ну так что, товарищи кодеры, интерпретатор асма будем лепить? Я тут начал уже, вот исходники:
http://www.lowlevel.ru/asmvm/asmvm.tar.gz

Работает в интерактивном режиме и воспринимает команды mov, and, or, xor, xchg и bswap. В качестве операндов можно использовать регистры общего назначения и непосредственные значения.
Команда .printregs показывает регистры и флаги.



Начало положено, так сказать :)

Маленькие замечания по стилю (чур без обид!):
Отступы слишком маленькие, давай по 8 символов (1 таб)?
Еще хорошы бы пробелов побольше, например перед и после операторов, и перед '{'
И отсутствие комментариев. В общем если не возражаешь, я это все пофиксю, ок? :) И комментарии добавлю.

PS. Глядишь, ненароком полный эмулятор i386 вырисуется :D

1.9K
06 апреля 2003 года
kswapd
93 / / 08.02.2003
Кстати, readline туда бы прикрутить не мешало... но это в будущем :))

Давай мыло, вот мое:
omc at nm dot ru
1.8K
06 апреля 2003 года
Lonesome
112 / / 27.01.2003
Цитата:
Originally posted by kswapd

Начало положено, так сказать :)
Маленькие замечания по стилю (чур без обид!):
Отступы слишком маленькие, давай по 8 символов (1 таб)?
Еще хорошы бы пробелов побольше, например перед и после операторов, и перед '{'
И отсутствие комментариев. В общем если не возражаешь, я это все пофиксю, ок? :) И комментарии добавлю.


Ок. Напомни только, плиз, как в емаксе отступ поставить 8 символов :)

Цитата:

PS. Глядишь, ненароком полный эмулятор i386 вырисуется :D



Кстати, была у меня в детстве такая идея, можешь посмотреть, что я тогда накодил (нужны ncurses):
http://www.lowlevel.ru/asmvm/vs001.tar.gz

1.8K
06 апреля 2003 года
Lonesome
112 / / 27.01.2003
Цитата:
Originally posted by kswapd
Кстати, readline туда бы прикрутить не мешало... но это в будущем :))


readline - это что такое?

Цитата:

Давай мыло, вот мое:
omc at nm dot ru


Мое: webmaster, собака, lowlevel, точка, ru

424
08 апреля 2003 года
(C)dragon
307 / / 04.12.2002
Вот тут уже интерпретатор кодить собираются... А компилятор кто нибудь будет делать?
1.8K
08 апреля 2003 года
Lonesome
112 / / 27.01.2003
Цитата:
Originally posted by (C)dragon
Вот тут уже интерпретатор кодить собираются...



Да не только собираются, а уже вовсю кодят :)

4.8K
24 декабря 2005 года
Вася Триллер
149 / / 30.10.2005
...прошло 2 года, 8 месяцев и 18 дней...
И что уже имеется?
424
05 января 2006 года
(C)dragon
307 / / 04.12.2002
Цитата:
Originally posted by Вася Триллер
...прошло 2 года, 8 месяцев и 18 дней...
И что уже имеется?



Да ничего собственно и не имеется, имеющиеся ассемблеры всё-таки устраивают :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог