User Tag List

Страница 9 из 167 ПерваяПервая ... 5678910111213 ... ПоследняяПоследняя
Показано с 81 по 90 из 1664

Тема: SjASMPlus Z80 кросс ассемблер

  1. #81
    Master Аватар для elf/2
    Регистрация
    14.01.2005
    Адрес
    N.Novgorod
    Сообщений
    803
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от aprisobal
    В SjASM уже похожее есть:
    так может довести это похожее до ума? имхо цифры менее удобны в качестве мнемонических обозначений...
    кроме того остальные плюсы цифровые метки не покрывают

  2. #82
    Master Аватар для Vladimir Kladov
    Регистрация
    09.02.2005
    Адрес
    Новосибирск
    Сообщений
    933
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    17 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    а по-моему достаточно удобно. Когда близко, чего зря имена придумывать. Вот помню в асме PDP, с коим я познакомился еще до спека, были локальные метки вида @nnn (n-цифра), локальность которых ограничивалась метками обычными. Т.е. между двумя обычными метками все метки @nnn были локальными. Хотя слово PROC дает лучше эффект.

  3. #83
    Veteran Аватар для lvd
    Регистрация
    23.01.2005
    Сообщений
    1,113
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vladimir Kladov
    а по-моему достаточно удобно. Когда близко, чего зря имена придумывать. Вот помню в асме PDP, с коим я познакомился еще до спека, были локальные метки вида @nnn (n-цифра), локальность которых ограничивалась метками обычными. Т.е. между двумя обычными метками все метки @nnn были локальными. Хотя слово PROC дает лучше эффект.
    devpac на амиге: локальные метки == .metka, ограничены обычными. Ещё удобнее, чем цифры only - так как можно и .1 .2 .3 писать, так и .label .metka

  4. #84
    Master Аватар для Vladimir Kladov
    Регистрация
    09.02.2005
    Адрес
    Новосибирск
    Сообщений
    933
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    17 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  5. #85
    Activist
    Регистрация
    17.01.2005
    Адрес
    Belarus, Minsk
    Сообщений
    402
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от lvd
    devpac на амиге: локальные метки == .metka, ограничены обычными. Ещё удобнее, чем цифры only - так как можно и .1 .2 .3 писать, так и .label .metka
    В SjASM тоже есть локальные метки. Только, что цифры как локальные метки теперь не поддерживаются - определяются как директива повтора строки (как в Шторм)
    Цитата Сообщение от elf/2
    так может довести это похожее до ума? имхо цифры менее удобны в качестве мнемонических обозначений...
    кроме того остальные плюсы цифровые метки не покрывают
    Реализаций данной функции ассемблеров может быть много, например вот как это сделано в WLA DX:
    Код:
    3.3. Labels
    
    Labels are ordinary strings (which can also end to a ':'). Labels starting
    with "_" are considered to be local labels and do not show outside sections
    where they were defined, or outside object files, if they were not defined
    inside a section.
    
    Here are few examples of different labels:
    
    VBI_IRQ:
    VBI_IRQ2
    _VBI_LOOP:
    main:
    
    Note that when you place ':' in front of the label string when referring to
    it, you'll get the bank number of the label, instead of the label's address.
    Here's an example:
    
    LD A, :LOOP
    .BANK 2 SLOT 0
    LOOP:
    
    Here "LD A, :LOOP" will be replaced with "LD A, 2" as the label LOOP is
    inside the bank number two.
    
    When you are referring to a label and you are adding something to its address
    (or subtracting, any arithmetics apply) the result will always be bytes.
    
    .org 20
    DATA:  .dw 100, 200, 300
           ld  a, DATA+1
                  ^^^^^^ = r
    
    So here the result r will be the address of DATA plus one, here 21. Some x86
    assemblers would give here 22 as the result r as DATA points to an array
    or machine words, but WLA isn't that smart (and some people including me
    think this is the better solution).
    
    You can also use -, --, ---, +, ++, +++, ... as un-named labels.
    Labels consisting of '-' are meant for reverse jumps and labels consisting
    of '+' are meant for forward jumps. You can reuse un-named labels as much
    as you wish inside your source code. Here's an example of this:
    
        dec e
        beq ++      ; jump -> ?
        dec e
        beq +       ; jump -> %
        ld d, 14
    --- ld a, 10    ; !
    --  ld b, c     ; #
    -   dec b       ; *
        jp nz, -    ; jump -> *
        dec c
        jp nz, --   ; jump -> #
        dec d
        jp nz, ---  ; jump -> !
        ld a, 20
    -   dec a       ; $
        jp nz, -    ; jump -> $
    +   halt        ; %
    ++  nop         ; ?
    
    Note that "__" (that's two underline characters) serves also as a un-named
    label. You can refer to this label from both directions. Use "_b" when
    you are jumping backwards and "_f" when you are jumping forwards label "__".
    
    Example:
    
       dec e
       jp z, _f     ; jump -> *
       dec e
    __ ldi a, (hl)  ; *
       dec e
       jp nz, _b    ; jump -> *
    Последний раз редактировалось Aprisobal; 23.12.2005 в 01:40.
    ATW4GS / BIN2SNA / SquareMania <ТИ-3> / Ужасм+
    ATM-Turbo 512 v4.50, Commodore 64G + TAC-2, Retro-Bit Super Retro TRIO

  6. #86
    Master Аватар для elf/2
    Регистрация
    14.01.2005
    Адрес
    N.Novgorod
    Сообщений
    803
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от aprisobal
    например вот как это сделано в WLA DX
    "+++, --, _b" - тоже не плохо. хотя это опять только _метки_. использование скобок позволяет подчеркнуть структуру программы и вложенность блоков. кроме того обозначение '}' для конца блока/цикла лучше отражает смысл чем +.

    опять же, это имхо, настаивать не буду, да и не имею права...

  7. #87
    Activist
    Регистрация
    17.01.2005
    Адрес
    Belarus, Minsk
    Сообщений
    402
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    Exclamation

    Вышла новая версия SjASMPlus - 1.05 RC3. Исправлен небольшой глюк с ENDM, добавлена поддержка скобок {..} и записи любых команд через запятую(INC A,B,C,A). Качать - [...вырезано...]
    Spectre, скобками {..} берётся 1 байт из памяти или 2 байта?
    Последний раз редактировалось Aprisobal; 07.12.2005 в 23:37.
    ATW4GS / BIN2SNA / SquareMania <ТИ-3> / Ужасм+
    ATM-Turbo 512 v4.50, Commodore 64G + TAC-2, Retro-Bit Super Retro TRIO

  8. #88
    Activist Аватар для Spectre
    Регистрация
    26.01.2005
    Адрес
    Минск
    Сообщений
    294
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от aprisobal
    Spectre, скобками {..} берётся 1 байт из памяти или 2 байта?
    Слово.

    А вообще вот фирменное описание Аласма (усеченное Alone Coder'ом до нескольких страниц). Это часть касающаяся команд и синтаксиса:

    Код:
     4. ДИРЕКТИВЫ АССЕМБЛЕРА
    		ORG адрес[,страница]
    Установка адреса компиляции. По умолчанию параметр "страница"
    старый, в начале компиляции =0.
    метка EQU значение
    Присваивает метке значение, эквивалентное параметру "значение".
    		DISP адрес
    Установка адреса, в котором должна работать программа.
    		ENT
    Присвоение адресу работы программы текущего адреса компиляции.
    Пример:
    SCREEN EQU #4000
    		ORG #8000
    		LD HL,BEGIN			 ;Пересылка в область экрана
    		LD DE,SCREEN			;и запуск программы ожидания
    		LD BC,END-BEGIN		 ;[A] прерываний
    		LDIR
    		CALL SCREEN
    		DI
    		HALT
    BEGIN DISP SCREEN
    MARKA DEC A
    		HALT
    		JP NZ,MARKA			 ;JP не случайно
    		RET
    	 ENT
    END
    Текущее смещение компиляции (shift=org-disp) узнают так:
    a	 ORG 0
    		ENT
    shift ORG a+shift
    		DISP a
    		INCLUDE "drv:имя файла"[,страница]
    Включение в компилируемый файл дополнительного исходника,
    лежащего на диске под именем "имя файла". При этом указанный
    файл загружается в страницу, определенную параметром "страница"
    (по умолчанию - текущая). По окончании компиляции включенного
    блока компиляция продолжается со строки, следующей после данной
    директивы. Файл не будет загружаться с диска, если
    он уже находится в необходимой странице. "" - любой файл.
    Пример:
    		LDIR
    		INCLUDE "TOKENIZE",1
    		OTDR
    		INCLUDE "ALASM2"
    		HALT
    Сначала будет откомпилирован LDIR, потом текст "TOKENIZE.H",
    загруженный в страницу 1, потом OTDR, затем в тек.страницу
    будет загружен и откомпилирован текст "ALASM2.H", после чего
    с диска будет считан основной файл и компиляция продолжится
    с команды HALT.
    		MAIN "имя файла"[,страница]
    Указание основного файла компиляции. Директива MAIN должна быть
    первой исполнимой директивой подчиненного файла.
    Символы "." и "*" заменяйте на "?".
    Пример:
    		MAIN "MAKE6?7",6
    		LDIR
    После подачи команды ASSEMBLE компиляция передается
    программе MAKE6*7, находящейся в странице 6,
    затем находящийся в ней INCLUDE вызывает подчиненную
    программу, состоящую из директивы MAIN и команды LDIR.
    Во включаемых файлах MAIN игнорируется, поэтому после
    ассемблирования LDIR происходит возврат назад и
    продолжение компиляции.
    		INCBIN "дисковод:имя файла"[,длина]
    Включение в компилируемую программу кодового блока с диска
    размером "длина" байт или по умолчанию из данных каталога.
    		DUP число
    Указывает начало блока, который необходимо компилировать
    "число" раз подряд
    		EDUP
    Указывает конец повторяемого блока. Возможна вложенная
    конструкция.
    Пример:
    	 DUP 32
    		LDI
    		LD A,B
    		OR C
    		JR Z,$+3
    		LD (HL),D
    	 EDUP
    Блок между DUP и EDUP откомпилируется 32 раза
    		REPEAT
    		<тело>
    		UNTIL <выражение>
    Компилирует <тело> до тех пор, пока <выражение> не 0
    		DB байт[,список байт]
    Пример:
    		DB "У",13,10,"попа",13,10,"была",13,10,"собака",13,10
    		DEFB "она съела",13,10,"попа факу..."
    		DW слово[,список слов]
    Пример:
    		DW ALASKA,BUFFER,12,#BD15,32767,.NUMB1
    		DEFW 12345,34567
    		DS количество повторений[,список байт]
    Список байт (по умолчанию нулевой байт) копируется в текущий
    адрес компиляции. Число циклов = "количество повторений".
    Пример:
    		DS 10,#E5
    		DEFS 32,#ED,#B0
    		DD [#]hexбайт[hexбайты]
    Плотное хранение шестнадцатиричных чисел.
    		DD 1D4FDC42
    эквивалентно
    		DB #1D,#4F,#DC,#42
    		+<нечто>
    ОПАСНО ПРИ ДЛИНЕ СТРОКИ=#2C..#2F!
    При загрузке текста с диска он сканируется на наличие в нем "+"
    в начале каждой строки. В процессе компиляции все встреченные
    "+" будут заменены на "-", что заставит компилятор пропускать
    строки при следующем ассемблировании.
    Пример:
    		LD HL,#DB00
    		 +SAVEADR
    		 + ORG #DB00,7
    +		 INCBIN "sts70r"
    +	 ORG SAVEADR
    		JP (HL)
    отладчик загрузится только при первой компиляции
    метка=выражение
    (Пере)присвоение значения метке.
    Пример:
    SHLUSS=0
    		ORG 32768
    		DUP #4000
    		DEFW SHLUSS
    SHLUSS=SHLUSS+1
    		EDUP
    память выше #8000 заполнится увеличивающимися словами 0..16384
    		IF <выражение>
    		<тело1>
    		ELSE
    		<тело2>
    		ENDIF
    Если <выражение>=0, то компилируется <тело1>, иначе <тело2>
    		IFN <выражение>
    		<тело1>
    		ELSE
    		<тело2>
    		ENDIF
    То же, но наоборот.
    Допускается вложенность условной компиляции (до 254)
    		LOCAL
    		<тело>
    		ENDL
    Объявление локальных меток. Все метки в пределах этой
    операторной скобки будут невидимы вне ее (кроме меток,
    начинающихся с символа @ - это глобальные метки). Допускаются и
    вложенные конструкции.
    Если в пределах локальных меток определять метки с именами,
    к которым обращались раньше этой конструкции, то такие метки
    будут глобальными:
    		LD HL,LABEL
    		LOCAL
    LABEL
    		ENDL
    		MACRO <имя_макросa>
    		<тело>
    		ENDM
    Определение макроса.
    В теле макроса:
    \0..\9 - параметр номер 0,1,2,..9
    \C - текущий символ
    \N - перейти на следующий символ (ничего не выдает)
    \R - установить указатель на начало строки параметров
    \S<char> - строка от текущего символа до символа <char>
    \P - сдвинуть строку параметров на один параметр. Выдает
    съеденный параметр. \R возвращает, как было.
    		<имя_макроса> [параметр1[,параметр2[...]]]
    Использовать макрос.
    Разделитель параметров - запятая
    (заключенная в кавычки не считается).
    		MACRO DOWN
    		LOCAL
    		INC \C
    		LD A,\C
    		AND 7
    		JR NZ,LABEL
    		LD A,\N\C
    		SUB #E0
    		LD \C,A
    		JR NC,LABEL
    		LD A,\R\C
    		SUB 8
    		LD \C,A
    LABEL
    		ENDL
    		ENDM
    Теперь мы можем процедуры DOWN HL и DOWN DE компилировать по их
    именам - DOWN HL, DOWN DE и т.д.
    Пользуясь условиями типа
    		IF " "-" \1"
    или
    		IF ?macroname\1-2
    можмо определять макросы с переменным числом параметров.
    		DISPLAY [/L,]["any text",][[/D|/H|/A,][/T,]выражение]
    Отображает текст или числа в процессе ассемблирования. Ключи
    /D, /H и /A устанавливают формат вывода для одного следующего
    числа. Далее числа выводятся в текущей системе счисления. /D -
    десятичное число, /H - шестнадцатиричное, /A - в обеих
    системах.
    /L указывает, что необходимо печатать не с новой строки.
    /T выводит сначала само выражение, потом его значение.
    Примеры:
    		DISPLAY "code size: ",/D,end-start
    		DISPLAY /A,"abc+xyz=",abc+xyz
    		DISPLAY "simple"," text"
    		DISPLAY "Баран жевал "
    		DISPLAY /L,"травКу"
    		DISPLAY /A,/T,abc+xyz
    эквивалентно
    		DISPLAY /A,"abc+xyz",abc+xyz
    Половинки IX и IY: HX,HY,LX,LY.
    Можно: INF;SLI;OUT (C),0;EXA;EXD;JZ;JNZ;JC;JNC
    LD L,0,H,'fnt и т.п.
    5. Выражения
    Считаются слева направо без приоритетов (кроме скобок).
    a+b
    a-b
    a*b
    a/b
    a&b - AND
    a|b - OR
    a!b - XOR
    a>b - циклич.сдвиг слова a на b бит вправо
    a<b - влево
    () - скобки (сначала рассчитываются они)
    {a} - слово, находящееся в памяти по адресу a
    a~ - инвертирование текущего результата
    ?метка - возвращ. 0, если метка определена, #ffff, если не
    	определена, и 1, если не определена, но к ней было уже
    	обращение. Если метка - название макроса, то 2.
    'a - ст.байт a
    .a - мл.байт a
    %const двоичная
    $$ - текущая страница кода
    Как узнать страничку компилируемого исходника
    и адрес компилируемой строки (из макроса нельзя)
    ORG #C0E1,2
    DISPLAY {$}-#C040,"/pg",.{$+2}
    Как определить, не из mkace ли мы запущены
    ORG #FF32,2
    IF {4>4+{$}}-#BF43
    make		 ;mkace!
    ENDIF
    Во всех операциях, кроме + и -, не допускается использование
    меток, которые будут определены ниже (из-за однопроходности)

  9. #89
    Member Аватар для Yaroslav
    Регистрация
    14.04.2005
    Адрес
    Новосибирск
    Сообщений
    63
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А почему у меня такая фигня
    При использовании INCLUDE вылетает сообщение об ошибке
    ---------- Capture Output ----------
    "C:\ASM\sjasm.exe" My.asm
    SjASMPlus Z80 Cross-Assembler v1.05 RC3
    Terminated with exit code -1073741819

  10. #90
    Veteran
    Регистрация
    04.08.2005
    Адрес
    Nizhnevartovsk
    Сообщений
    1,007
    Спасибо Благодарностей отдано 
    76
    Спасибо Благодарностей получено 
    114
    Поблагодарили
    77 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Да что-то конкретно запарил он с ERROR: Forward reference.
    Может есть какой ключик чтобы он во время второго прохода делал подобное?
    Он что - вообще не умеет ссылаться "вперед"?

    Код:
    len equ start2-end2
    org 30000
    start2
    ret
    end2
    Можно с ума сойти.. невозможно ссылаться на метки инклуженных файлов

    ругается "Bytes lost" если пытаешься использовать -1 (в качестве 65535 или 255, в засивимости от регистра). Никуда ничего не потеряно же!

    Матерится "Label has different value in pass 2"...
    Гы.. автор совсем чтоли не знает как асм должен работать? Лэбелы должны все использоваться из 2го прохода, а на 1м проходе лишь вычисляться, и запоминаться места, где они используются, чтобы во втором проходе их вставить уже скорректированными.

    Короче то ли я туплю, то ли у меня 90% всех исходников вообще не компилятся в sjasm.
    Писаны на TASM. И z80asm их компилит влёт.
    Последний раз редактировалось Dexus; 06.08.2005 в 13:41.

Страница 9 из 167 ПерваяПервая ... 5678910111213 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Кросс-ассемблеры Z80 для Pc
    от Aprisobal в разделе Программирование
    Ответов: 16
    Последнее: 15.01.2011, 22:46
  2. кросс компилятор С для Z80
    от vitasam в разделе Программирование
    Ответов: 24
    Последнее: 04.03.2007, 18:03
  3. Хороший ПЦшный ассемблер - залог успеха!
    от Aprisobal в разделе Программирование
    Ответов: 35
    Последнее: 08.08.2005, 15:25
  4. ZX ассемблер (и не только?) с библиотеками
    от shade в разделе Программирование
    Ответов: 24
    Последнее: 04.03.2005, 19:43

Ваши права

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