Написание своего ассемблера

Тема в разделе "WASM.BEGINNERS", создана пользователем programmist, 7 июл 2007.

  1. programmist

    programmist New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    29
    Как думаете, реально ли написать с нуля свой ассемблер?
    Компиляторы языков высокого уровня написать очень сложно, ассемблера так же сложно или нет?
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    А смысЛ?
     
  3. programmist

    programmist New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    29
    А смысл в том, что во-первых, я хочу узнать реально ли это написать одному человеку и смогу ли в частности я (тоесть хватит ли опыта программирования), во-вторых, узнать каким образом пишутся такие вещи, ну и в-третьих, хочу изобрести велосипед :)
    Надеюсь понятно объяснил смысл для меня создания ассемблера.
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    По большой обкурке))) А если серьезно, то это геморрой, который ни к чему хорошему не приведет - нужно будет написать кучу однообразного и неинтересного кода по формированию машинной команды. Лучше бы ты просто научился строить самостоятельно машинную команду, поможет потом.
     
  5. programmist

    programmist New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    29
    Ну на данный момент общие принципы и формат машинных команд процессора x86 я знаю. Вот мне и интересно как программнм путем я буду их формировать :)
    А по большой обкурке пишутся скорее компиляторы C++ :)
     
  6. Aquila

    Aquila Самурай дзена

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    1.467
    Адрес:
    Russia, Moscow
    programmist
    Написать реально - см flat assembler (FASM) - он был написан одним человеком.
     
  7. programmist

    programmist New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    29
    Aquila
    Я в курсе. Смотрел исходники: нифига не понял :) все так замучено там
     
  8. Veles

    Veles New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2007
    Сообщения:
    2
    примерно вот так "Н!"
     
  9. programmist

    programmist New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    29
    Veles
    Не понял прикола.

    В исходниках fasm'а в файле с таблицами есть какие-то таблицы с опкодами, так вот я не пойму нафига они нужны?

    Например вот часть:

    Код (Text):
    1. instruction_set5:
    2. db 'adc',0,0x80,2,0x10
    3. db 'add',0,0x80,0,0x00
    4. db 'and',0,0x80,4,0x20
    5. db 'cmp',0,0x80,7,0x38
    6. db 'or',0,0x80,1,0x08
    7. db 'sbb',0,0x80,3,0x18
    8. db 'sub',0,0x80,5,0x28
    9. db 'xor',0,0x80,6,0x30
     
  10. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    это таблицы размещения команд для эффективной расстановке префиксов оснований и суфиксов команд, а в случае add еще и окончания. там также есть таблицы предлогов и приставок, а также способов конвертации одной инструкции в другую
     
  11. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Чтобы их понять нужно курить то же, что курил автор
     
  12. programmist

    programmist New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    29
    FreeManCPM
    Че-то я не понял. Ну префиксы команд я еще знаю, а вот где у команды предлог, приставка, суффикс и окончание? Это же не русский язык (тогда ты забыл добавить еще корень) :)))

    Great
    :)
     
  13. Veles

    Veles New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2007
    Сообщения:
    2
    Кстати я где-то год назад ради прикола написал небольшой "компилятор"=)
    Правда во входном языке было всего 3 команды:
    ПИИСК - звук из системного динамика
    ПАУЗА - остановка до нажатия клавиши
    ВЫХОД - ээ... int 20h
    Он создавал этакие небольшие СОМ-файлы.

    А насчёт прикола, "Н!" это типа int 21h в символьном виде
     
  14. programmist

    programmist New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    29
    Надо было пойти дальше :)

    Неее...я не хочу int 21h, я хочу WinAPI :)
     
  15. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Могу посмотреть как выглядит SYSENTER или INT 2E в символьном виде ;)
     
  16. JAPH

    JAPH New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2007
    Сообщения:
    124
    Veles, вы неправы! CD 21, насчёт ! согласен, но Н не в тему :)
    Компилятор написать реально. Сам писАл, вроде работал :)
     
  17. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    мои две копейки: я-б начал с теории. Например Ахо - "Генератор Компиляторов". В принципе написать компилятор не так уж и сложно. Оптимизирующий компилятор - это да ...
     
  18. programmist

    programmist New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    29
    Просто я думаю что те принципы, которые изложены в книге Ахо они в основном для языков высокого уровня, а ассемблер по-моему можно написать и без всяких деревьев разбора и т.п.

    Вот общий алгоритм работы ассемблера как я это себе представляю:
    1.Обработка препроцессора
    2. 1-проход: читаем весь файл и строим таблицу меток(нужно декодировать каждую команду чтоб узнать их размер, правильно?)
    2-проход: читаем файл и декодируем команды(второй раз???) и записываем их(для начала в .com файл)
     
  19. programmist

    programmist New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    29
    Че-то я вобщем заглянул в интеловский мануал и увидел сколько там разных форматов ADD, и блин как их всех обрабатывать? А там ведь еще есть MOV, AND, OR такие же большие!........Э...а может ну его [...]?:)

    Может дизассемблер написать :)
     
  20. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    На самом деле для некоторых мнемоник существует несколько разных байт кодов. Выбор на совести программистов асма =)