Важная информация

User Tag List

Страница 13 из 13 ПерваяПервая ... 910111213
Показано с 121 по 126 из 126

Тема: ASAM Compiler By Rob F. / Entire Group ...

  1. #121
    Master
    Регистрация
    04.03.2005
    Адрес
    Ukraine, Kiev
    Сообщений
    792
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Higgins Посмотреть сообщение
    1) Надо понимать так, что весь макропроцессор написан через вызовы эмулятора? То есть, непосредственно языком поддерживается только сама возможность определения и использования макросов, но не их раскрытия?
    Нет ... Макропроцессор написан как простоя подмена входных параметров нужными значениями. Именно поэтому нужно писать 0+LOW(xxx), что бы компиллер понял, что это не макрос а цикл, восприняв первый "0" как число. Вообщем макросы раскрываются только в виде подставляемых в них параметров. Простая замена, а уже потом компилятор разбирает это число или команда или ещё один макрос ...

    Цитата Сообщение от Higgins Посмотреть сообщение
    2) Эти вызовы эмулятора происходят на каждом проходе? Если да, то с какими значениями меток, в том числе $, если раскрытие макроса зависит от этих значений?
    Да, на каждом проходе ... Отличие только в окончании ne ... RunEmulZX запустит в любом случае, а RunEmulZXne, только если нет ошибок компиляции ...


    Цитата Сообщение от Higgins Посмотреть сообщение
    Как в этом случае будут вычисляться значения меток? Или во время трансляции мы должны получить ошибку?
    В этом случае будет зацикливание ... Что бы этого не было, нужно сделать так:
    Код:
            ORG #8006-(END-START)
    START   DB "ABC"
            .0+LOW($/#8000)
             DB "X"
            ..
            DB "DEF"
            EQU END=$
            SaveBIN "TEST.BIN",START,END-START
    Зацикливание будет только в случае адреса #8003. Поскольку длина кода будет меняться от адреса куда попадает "Х" !!!

    Эта строчка: "EQU END=$", нужна, что бы метка END была удалена после первого прохода. Таким образом ты объясняешь компилятору, что эта метка точно используется в тексте и не нужно её контролировать на наличие использования. В таком случае не будет ошибки и не будет зацикливаний ...

    ---------- Post added at 14:29 ---------- Previous post was at 14:16 ----------

    Цитата Сообщение от Higgins Посмотреть сообщение
    параметры макросов обозначаются этими странными значками?
    Да - точно ... Я специально выбрал не использованный символ для входного параметра в макрос. А значёт вконце макроса (галочка в дос кодировке), эозначает, что всякие параметры далее запрещены, и если вдруг строчка вызываемая макрос их содердит, ты получишь ошибку. Так же можно создать макрос без значков и окончания. Тогда компилятор через запятую воспримет 10-ть значений макроса.

    Например:
    Код:
     .HELLO
      @.0
      @.1
      @.2
      @.3
     ..
     Далее вызываем макрос:
     HELLO NOP, POP, LDIR
    То есть компилятор первый параметр макроса поймёт как NOP, второй POР, третий LDIR, а четвёртый как пустая строчка. Конечно же в этом случае нужно помнить, что нельзя передать, например - "LD HL,16384", поскольку разделитель есть запятая ... Если нужно передавать более сложные параметры макроса, то лучше иначе его описать и придумать другие разделители.

    ---------- Post added at 14:37 ---------- Previous post was at 14:29 ----------

    Цитата Сообщение от Higgins Посмотреть сообщение
    То есть, сам ассемблер непосредственно сравнения и другие операции не поддерживает?
    Не поддерживает. Чтобы описать 100% IF, тебе нужно писать все вариации IF'ов ... Это не язык высокого уровня и вложенность не поддерживает. То есть в макрос нельзя передать раскрытый макрос прямым путём ! Нелзья сделать макрос ABS(A) и его передать в IF (ABS(A)<0). Отдельно нужно получить значение из ABS и отдельно его передать в IF !
    AAA когда меня режут, я терплю, но когда дополняют, становится нестерпимо.

  2. #121
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #122
    Activist Аватар для Higgins
    Регистрация
    03.05.2007
    Адрес
    St. Petersburg
    Сообщений
    297
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Robus Посмотреть сообщение
    Зацикливание будет только в случае адреса #8003. Поскольку длина кода будет меняться от адреса куда попадает "Х" !!!
    То есть ассемблер не выявляет циклических зависимостей, просто впадая в бесконечный цикл проходов, правильно?

    Тогда такой вопрос: а как он определяет необходимость дополнительного прохода? Я имею в виду формальный критерий.

    Ведь кроме случаев, когда подходящих значений меток нет (как, например, с ORG #8003-(END-START) выше), есть случаи, когда подходящих значений меток несколько. Я не знаю как это записать на ASAM, но схематично это может выглядеть так:

    Код:
            ORG #8008-(END-START)
    START   DB "ABC"
             IF $ = #8000
             DB "XX"
             ELSE
             DB "Y"
             ENDIF
             DB "DEF"
    END
    Будет ли в этом случае какое-нибудь указание от ассемблера на неоднозначность?
    Higgins ZX Spectrum Emulator 8.10 alpha 3 available
    Please write us to report a bug or request a feature.

  4. #123
    Master
    Регистрация
    04.03.2005
    Адрес
    Ukraine, Kiev
    Сообщений
    792
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Wink

    Цитата Сообщение от Higgins Посмотреть сообщение
    То есть ассемблер не выявляет циклических зависимостей, просто впадая в бесконечный цикл проходов, правильно?
    Можно прописать предел циклов, сейчас не скажу, какая команда, прости, я её делал в 2002-ом году и забыл ... А с собой нет описания. Прервать можно ещё ESC ... Сейчас вроде предел по проходам 64 или 128 ...


    Цитата Сообщение от Higgins Посмотреть сообщение
    Тогда такой вопрос: а как он определяет необходимость дополнительного прохода?
    Второй проход происходит тогда, когда адрес метки изменился в отношении к предыдущему проходу и при этом метка использовалась в коде. Повторный проход может быть ещё при экзотических командах ... Например "JZ", Если ты используешь "JZ", то компилятор сам будет выискивать где надо поставить "JR Z" или "JP Z". Тогда применяет другой метод, который сам за тебя определит нужное количество JR/JP, для минимального размера памяти ...


    Цитата Сообщение от Higgins Посмотреть сообщение
    Ведь кроме случаев, когда подходящих значений меток нет (как, например, с ORG #8003-(END-START) выше), есть случаи, когда подходящих значений меток несколько. Я не знаю как это записать на ASAM, но схематично это может выглядеть так:
    Записывать надо так:
    Код:
            ORG #8003-(END-START)
    START   DB "ABC"
            EQU IF_FLAG=LOW($/#8000)
            .IF_FLAG
             DB "XX"
            ..
            .1-IF_FLAG
             DB "Y"
            ..
            DB "DEF"
            EQU END=$
    Главное адресом не попадать на точку когда, который будет при каждом проходе END менять на 8003/8004.

    А почему возникла именно такая задача ? Или просто попытка поймать глюк асма ? Поймать можно, - он не идеален ...
    AAA когда меня режут, я терплю, но когда дополняют, становится нестерпимо.

  5. #124
    Activist Аватар для Higgins
    Регистрация
    03.05.2007
    Адрес
    St. Petersburg
    Сообщений
    297
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Robus Посмотреть сообщение
    Можно прописать предел циклов, сейчас не скажу, какая команда, прости, я её делал в 2002-ом году и забыл ... А с собой нет описания. Прервать можно ещё ESC ... Сейчас вроде предел по проходам 64 или 128 ...
    Да нет, не стоит. Здесь вопрос именно в том, как устроено вычисление меток. Может быть, зацикливание это не не самый плохой вариант для такого кода.

    Цитата Сообщение от Robus Посмотреть сообщение
    А почему возникла именно такая задача ? Или просто попытка поймать глюк асма ?
    В общем да, просто проверка на вшивость. К практике это имеет то отношение, что, с одной стороны, отказ от форвардных ссылок на метки в некоторых контекстах -- это серьезное ограничение, с другой стороны меньше всего хочется быть жертвой непринужденного буйства ассемблера при вычислении таких меток.
    Higgins ZX Spectrum Emulator 8.10 alpha 3 available
    Please write us to report a bug or request a feature.

  6. #125
    Veteran Аватар для perestoronin
    Регистрация
    25.11.2011
    Адрес
    г. Красногорск
    Сообщений
    1,389
    Спасибо Благодарностей отдано 
    16
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Robus Посмотреть сообщение
    Вижу, что люди заинтересовались моим компилятором
    Исходники его, если они не тайна, покажите пожалуйста, адаптирую под своё окружение (Gentoo Linux, gcc 4.8.1).

    Ретрокладовая продажи

    продажи
    [свернуть]

  7. #126
    Veteran Аватар для Hacker VBI
    Регистрация
    05.03.2013
    Адрес
    г. Канев, Украина
    Сообщений
    1,596
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    хочу скомпиленную под 64бита версию
    "наличие готового программного обеспечения для нового компьютера в наши дни имеет мало смысла."
    "Еще вопрос - почему на Спектруме большинство звуков на AY булькающие ? Как это исправить ?"
    (c) zst

Страница 13 из 13 ПерваяПервая ... 910111213

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Colorbok^Phantom Family Group
    от rajdee в разделе Графика
    Ответов: 12
    Последнее: 20.01.2011, 23:32
  2. C compiler
    от vitasam в разделе Программирование
    Ответов: 17
    Последнее: 25.08.2005, 16:42

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •