Как думаете, реально ли написать с нуля свой ассемблер? Компиляторы языков высокого уровня написать очень сложно, ассемблера так же сложно или нет?
А смысл в том, что во-первых, я хочу узнать реально ли это написать одному человеку и смогу ли в частности я (тоесть хватит ли опыта программирования), во-вторых, узнать каким образом пишутся такие вещи, ну и в-третьих, хочу изобрести велосипед Надеюсь понятно объяснил смысл для меня создания ассемблера.
По большой обкурке))) А если серьезно, то это геморрой, который ни к чему хорошему не приведет - нужно будет написать кучу однообразного и неинтересного кода по формированию машинной команды. Лучше бы ты просто научился строить самостоятельно машинную команду, поможет потом.
Ну на данный момент общие принципы и формат машинных команд процессора x86 я знаю. Вот мне и интересно как программнм путем я буду их формировать А по большой обкурке пишутся скорее компиляторы C++
Veles Не понял прикола. В исходниках fasm'а в файле с таблицами есть какие-то таблицы с опкодами, так вот я не пойму нафига они нужны? Например вот часть: Code (Text): instruction_set5: db 'adc',0,0x80,2,0x10 db 'add',0,0x80,0,0x00 db 'and',0,0x80,4,0x20 db 'cmp',0,0x80,7,0x38 db 'or',0,0x80,1,0x08 db 'sbb',0,0x80,3,0x18 db 'sub',0,0x80,5,0x28 db 'xor',0,0x80,6,0x30
это таблицы размещения команд для эффективной расстановке префиксов оснований и суфиксов команд, а в случае add еще и окончания. там также есть таблицы предлогов и приставок, а также способов конвертации одной инструкции в другую
FreeManCPM Че-то я не понял. Ну префиксы команд я еще знаю, а вот где у команды предлог, приставка, суффикс и окончание? Это же не русский язык (тогда ты забыл добавить еще корень) )) Great
Кстати я где-то год назад ради прикола написал небольшой "компилятор"=) Правда во входном языке было всего 3 команды: ПИИСК - звук из системного динамика ПАУЗА - остановка до нажатия клавиши ВЫХОД - ээ... int 20h Он создавал этакие небольшие СОМ-файлы. А насчёт прикола, "Н!" это типа int 21h в символьном виде
Veles, вы неправы! CD 21, насчёт ! согласен, но Н не в тему Компилятор написать реально. Сам писАл, вроде работал
мои две копейки: я-б начал с теории. Например Ахо - "Генератор Компиляторов". В принципе написать компилятор не так уж и сложно. Оптимизирующий компилятор - это да ...
Просто я думаю что те принципы, которые изложены в книге Ахо они в основном для языков высокого уровня, а ассемблер по-моему можно написать и без всяких деревьев разбора и т.п. Вот общий алгоритм работы ассемблера как я это себе представляю: 1.Обработка препроцессора 2. 1-проход: читаем весь файл и строим таблицу меток(нужно декодировать каждую команду чтоб узнать их размер, правильно?) 2-проход: читаем файл и декодируем команды(второй раз???) и записываем их(для начала в .com файл)
Че-то я вобщем заглянул в интеловский мануал и увидел сколько там разных форматов ADD, и блин как их всех обрабатывать? А там ведь еще есть MOV, AND, OR такие же большие!........Э...а может ну его [...]? Может дизассемблер написать
На самом деле для некоторых мнемоник существует несколько разных байт кодов. Выбор на совести программистов асма =)