Написание транслятора языка Ассемблера

Тема в разделе "WASM.ASSEMBLER", создана пользователем SeDoY, 2 фев 2005.

  1. MrHammer

    MrHammer New Member

    Публикаций:
    0
    Регистрация:
    9 июл 2003
    Сообщения:
    197
    в принципе, длина опкода не помеха, ее мона использовать

    в выравнивании, например тел циклов и процедур.

    Кстати, что за ранжирование компилеров. Где-то прочитал анонс типа "...компилер 4 поколения, но оптимизирует как компилер 3 поколения...".

    Если на то пошло, то могу сказать, что при проектировании

    компилеров мона сразу отказаться от консольной версии и сварганить наш компилер в виде библиотеки. Хочешь, подключил к консоли, не нравится, юзаем из гуя.

    И как продолжение, библиотеку мона спроектировать так.

    Експортируем препроцессор, кодогенератор, анализатор.

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

    Смотрю я на исходники дизассемблеров и блевотина подкатывает, стока возни и тока для того чтобы вывести

    листинг на консоль. И что, кто сможет использовать этот листинг в своих целях. И главное, проектируют так , что потом модули друг от друга отодрать невозможно. То там сразу вывод на экран и т.д. пальцем тыкать не буду, так как челы все - таки работали, а не пи..дели как я сейчас.
     
  2. Smile

    Smile New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2004
    Сообщения:
    129
    вот те иходник впомошь



    работают те комманды которые есть в таблице(tbl.c)

    остальные можешь сам дописать, мне влом было :)



    операнды разделять пробелом не запятой



    вместо операнда память использовать b[] или w[] он недоделан доконца



    все числа hex, никаких знаков



    типа воттак

    out dx eax

    mov ax cs

    mov w[] cs

    add al 1A

    add eax d[]

    add d[] eax

    rol ecx cl



    код эта фигня не делает соответсвенно, но до этого недалеко, если ошибок нет пищет "passed"





    [​IMG] _1712190213__crap_lib86.zip
     
  3. Smile

    Smile New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2004
    Сообщения:
    129
    вот те иходник впомошь



    работают те комманды которые есть в таблице(tbl.c)

    остальные можешь сам дописать, мне влом было :)



    операнды разделять пробелом не запятой



    вместо операнда память использовать b[] или w[] он недоделан доконца



    все числа hex, никаких знаков



    типа воттак

    out dx eax

    mov ax cs

    mov w[] cs

    add al 1A

    add eax d[]

    add d[] eax

    rol ecx cl



    код эта фигня не делает соответсвенно, но до этого недалеко, если ошибок нет пищет "passed"





    [​IMG] _1753220820__crap_lib86.zip
     
  4. Smile

    Smile New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2004
    Сообщения:
    129
    хе доделал проверку для операнда память, теперь понимает 16/32 адресацию и (кажется) правильно исключает неправильные ситуации.



    //base index scale disp

    add b[eax ecx*8 1BB] al

    //base index

    add d[eax ecx] eax

    //index scale

    mov w[ecx*4] cs

    //16

    add b[bp si 2233] al

    // esi -> edi

    movs b[esi] b [edi]



    простень single line assembler что-ли написать?

    [​IMG] 819574326__crap_lib86.zip
     
  5. Smile

    Smile New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2004
    Сообщения:
    129
  6. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    да, хорошую тему подняли...

    если товарисч поделица книшкой буду очень признателен.

    кстати например для меня сделать back-end намнога лекше чем front-end. Для бекенда надо всего лишь взять таблицу формирования опкодов и для нее посторить DFA.. и все, вот вам и генератор. ну я при этом опускаю эффективность, аптимизацыю и проч и проч. не об этом речь...

    А вот построить лексический и синтаксический анализаторы с "хорошей" таблицей символов - вот ето сложно(для меня по крайней мере)...

    может у кого уже есть реальный опыт реализации таких штук для языков С и С++?