User Tag List

Страница 70 из 70 ПерваяПервая ... 6667686970
Показано с 691 по 699 из 699

Тема: SjASMPlus от z00m

  1. #691

    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    5,217
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    708
    Спасибо Благодарностей получено 
    1,654
    Поблагодарили
    574 сообщений
    Mentioned
    50 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я уже всё, что мне нужно сделал. О чём отписался. И, как я понял, на форуме нашлись люди, которые поняли, что что мне требовалось. На всякий случай разъясню ещё раз.

    1. Проверки имени регистра в макросе:

    Макрос (только для примера!)
    Код:
        macro test reg
        if reg == H
            ld h, reg
        else
            ld a, reg
        endif
        endm
    Код:
        test H
    Скомпилироваться должно так:
    Код:
            ld h, H
    2. По поводу разворачивания макросов. Мне хотелось бы получить текст программы, где на месте всех макросов будут подставлены готовые ассемблерные команды. То есть в тексте программы на месте test H я хотел видеть только ld h, H, без всяких if'ов и прочего.

    Но, как я написал выше, это уже неактуально.
    С уважением, Станислав.

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

  3. #692

    Регистрация
    24.07.2018
    Адрес
    г. Москва
    Сообщений
    84
    Спасибо Благодарностей отдано 
    34
    Спасибо Благодарностей получено 
    49
    Поблагодарили
    34 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    И, как я понял, на форуме нашлись люди, которые поняли, что что мне требовалось.
    Оу, ну да, нашлись люди, которые поняли, это я один, такой тупой, непонятливый, все правильно. Но я вам объясняю, что вас понять... трудно, потому что формулируете плохо. Понять-то и я вас понял, но сколько времени на это ушло. У тех людей тоже ушло на это время, просто раньше меня вас прочитали. Сами посмотрите на свой макрос, который вы написали типа для примера. Сколько в нем лишнего мусора, уводящего от сути вопроса. Десять этажей ифов с кучей условий... Ну это банальное неуважение. Сами посмотрите, что вы в ожидании ответа из него написали. Я же не телепат, чтобы угадывать, где вы ошиблись, в макросе, или в описании ожиданий от него. Наверное, найдутся телепаты...

    Актуально это для вас, или нет, теперь не важно, раз уж я уже начал с этим ковыряться, и уже нашел решение. Может кому-то будет интересно, будет похожая задача, и он не захочет писать тонну лишнего мусора. Определяем значения переменных:
    Код:
    B	 equ 0
    C	 equ 1
    D	 equ 2
    E	 equ 3
    H	 equ 4
    L	 equ 5
    A	 equ 7
    b	 equ 0
    c	 equ 1
    d	 equ 2
    e	 equ 3
    h	 equ 4
    l	 equ 5
    a	 equ 7
    BC	 equ 0
    DE	 equ 1
    HL	 equ 2
    SP	 equ 3
    AF	 equ 3
    bc	 equ 0
    de	 equ 1
    hl	 equ 2
    sp	 equ 3
    af	 equ 3
    
    ix	equ #180
    iy	equ #280
    IX	equ #180
    IY	equ #280
    Макрос:
    Код:
    	macro ldrx dst,src
    	 push af
    	 push hl
    	 push bc
    .iyt	 equ src-$280 & $FFFF
    .ixt	 equ src-$180 & $FFFF
    	 if src & $200
    	  ld hl,(rIY)
    	  ld bc,.iyt
    	 elseif src & $100
    	  ld hl,(rIX)
    	  ld bc,.ixt
    	 endif
    	 add hl,bc
    	 ld dst,(hl)
    	 pop bc
    	 pop hl
    	 pop af
    	endm
    Вызов макроса с разными пограничными значениями:
    Код:
    	ldrx c,(IX+1)
    	ldrx a,(IY+1)
    	ldrx d,(IX-1)
    	ldrx e,(IY-1)
    	ldrx h,(IX+127)
    	ldrx l,(IY+127)
    	ldrx b,(IX-128)
    	ldrx d,(IY-128)
    
    rIX    DEFW 0
    rIY    DEFW 0
    Все работает. Пожалуйста, вызов - как вы и хотели, даже еще лучше, максимально аутентично. Тут вам и любые регистры на выходе, и сразу оба индексных регистра на входе... Про no_stack стоит забыть, потому что AF необходимо сохранять, сохраняется через стек, как ни крути. Можно добавить проверку на -128-+127 с выбросом ошибки, но мне лень и не надо, сами справитесь.

    Можно и имена регистров для проверок использовать, ветвления ассемблирования с этим связанные добавить, но мне, как видите, даже не пригодилось для поставленной задачи. И вот как раз поэтому сложно понять, сложно... Не знаешь никогда, что у другого специалиста в голове, что там за поток, и куда этот поток стремится. Поэтому нужно хотя бы стараться понятным языком излагать свои хотелки, чтобы другие люди не тратили время на расшифровку послания.

    - - - Добавлено - - -
    Вот вроде такого:
    Цитата Сообщение от CityAceE Посмотреть сообщение
    В общем, отвечаю сам себе, вдруг ещё кому-нибудь пригодится.

    1. Создал листинг с помощью ключа --lst
    2. Загрузил его в Excel и там разбил на колонки.
    3. Удалил следующие строки, удовлетворяющие следующим условиям по двум колонкам:
    Пустой код && >
    Код ~ && >
    Не пустой код && Пустой текст
    Хотел пошутить, но не буду. Мне вряд ли пригодится. Я даже не понимаю, о чем идет речь, какой-то шифр, а расшифровки нет. И я вряд ли стану ковыряться в Экселе для решения подобных задач. Ну это уже перебор, как по мне. Очевидно, есть другие менее топорные способы:
    Код:
    	OPT listmc
    Файл lst:
    Код:
    # file opened: macro.asm
      1   0000              	DEVICE ZXSPECTRUM48
      2   0000
      3   0000              	ORG 32768
      4   8000
      5   8000              	OPT listmc
    208   8000 41          {	 ld B,C
    208   8001 78          {	 ld a,b
    208   8002 78          {	 LD A,B
    209   8003 63          {	 ld H,E
    209   8004 78          {	 ld a,b
    209   8005 78          {	 LD A,B
    211   8006 F5          {	 push af
    211   8007 E5          {	 push hl
    211   8008 C5          {	 push bc
    211   8009 2A 76 80    {	  ld hl,(rIX)
    211   800C 01 01 00    {	  ld bc,.ixt
    211   800F 09          {	 add hl,bc
    211   8010 4E          {	 ld c,(hl)
    211   8011 C1          {	 pop bc
    211   8012 E1          {	 pop hl
    211   8013 F1          {	 pop af
    212   8014 F5          {	 push af
    212   8015 E5          {	 push hl
    212   8016 C5          {	 push bc
    212   8017 2A 78 80    {	  ld hl,(rIY)
    212   801A 01 01 00    {	  ld bc,.iyt
    212   801D 09          {	 add hl,bc
    212   801E 7E          {	 ld a,(hl)
    212   801F C1          {	 pop bc
    212   8020 E1          {	 pop hl
    212   8021 F1          {	 pop af
    213   8022 F5          {	 push af
    213   8023 E5          {	 push hl
    213   8024 C5          {	 push bc
    213   8025 2A 76 80    {	  ld hl,(rIX)
    213   8028 01 FF FF    {	  ld bc,.ixt
    213   802B 09          {	 add hl,bc
    213   802C 56          {	 ld d,(hl)
    213   802D C1          {	 pop bc
    213   802E E1          {	 pop hl
    213   802F F1          {	 pop af
    214   8030 F5          {	 push af
    214   8031 E5          {	 push hl
    214   8032 C5          {	 push bc
    214   8033 2A 78 80    {	  ld hl,(rIY)
    214   8036 01 FF FF    {	  ld bc,.iyt
    214   8039 09          {	 add hl,bc
    214   803A 5E          {	 ld e,(hl)
    214   803B C1          {	 pop bc
    214   803C E1          {	 pop hl
    214   803D F1          {	 pop af
    215   803E F5          {	 push af
    215   803F E5          {	 push hl
    215   8040 C5          {	 push bc
    215   8041 2A 76 80    {	  ld hl,(rIX)
    215   8044 01 7F 00    {	  ld bc,.ixt
    215   8047 09          {	 add hl,bc
    215   8048 66          {	 ld h,(hl)
    215   8049 C1          {	 pop bc
    215   804A E1          {	 pop hl
    215   804B F1          {	 pop af
    216   804C F5          {	 push af
    216   804D E5          {	 push hl
    216   804E C5          {	 push bc
    216   804F 2A 78 80    {	  ld hl,(rIY)
    216   8052 01 7F 00    {	  ld bc,.iyt
    216   8055 09          {	 add hl,bc
    216   8056 6E          {	 ld l,(hl)
    216   8057 C1          {	 pop bc
    216   8058 E1          {	 pop hl
    216   8059 F1          {	 pop af
    217   805A F5          {	 push af
    217   805B E5          {	 push hl
    217   805C C5          {	 push bc
    217   805D 2A 76 80    {	  ld hl,(rIX)
    217   8060 01 80 FF    {	  ld bc,.ixt
    217   8063 09          {	 add hl,bc
    217   8064 46          {	 ld b,(hl)
    217   8065 C1          {	 pop bc
    217   8066 E1          {	 pop hl
    217   8067 F1          {	 pop af
    218   8068 F5          {	 push af
    218   8069 E5          {	 push hl
    218   806A C5          {	 push bc
    218   806B 2A 78 80    {	  ld hl,(rIY)
    218   806E 01 80 FF    {	  ld bc,.iyt
    218   8071 09          {	 add hl,bc
    218   8072 56          {	 ld d,(hl)
    218   8073 C1          {	 pop bc
    218   8074 E1          {	 pop hl
    218   8075 F1          {	 pop af
    221   8076 00 00       {rIX DEFW 0
    222   8078 00 00       {rIY DEFW 0
    # file closed: macro.asm
    Ну тут я, кстати, соглашусь, что не мешало бы настроечку иметь, чтобы метки заменялись на реальные значения, а не тупо копировался код из исходника.
    Последний раз редактировалось cafedead; 04.07.2025 в 21:52.

  4. #693

    Регистрация
    31.01.2007
    Адрес
    Москва
    Сообщений
    810
    Спасибо Благодарностей отдано 
    11
    Спасибо Благодарностей получено 
    77
    Поблагодарили
    59 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от cafedead Посмотреть сообщение
    211 8010 4E { ld c,(hl)
    211 8011 C1 { pop bc
    ПХАХХАХХАХАХА
    не пей столько кафе

  5. #694

    Регистрация
    24.07.2018
    Адрес
    г. Москва
    Сообщений
    84
    Спасибо Благодарностей отдано 
    34
    Спасибо Благодарностей получено 
    49
    Поблагодарили
    34 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от krt17 Посмотреть сообщение
    ПХАХХАХХАХАХА
    не пей столько кафе
    Ну сорян)) И про старуху бывает порнуха) Ну пускай там как-нибудь разрулит эту ситуацию... А мне надо... Идти... )

    - - - Добавлено - - -

    Цитата Сообщение от krt17 Посмотреть сообщение
    торопыга прям как я в 15 лет, завидую
    Не-не-не... У меня железобетонная уважительная причина. Он же сказал, что все порешал, ему ниче не надо. Вот я и выбросил так, как оно есть.)

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

    - - - Добавлено - - -

    Upd: Ну ладно... Не оставлять же так, а то совесть замучает, спать спокойно не смогу... Вот вам ваши этажи -)
    Код:
    	macro ldrx dst,src
    .iyt	 equ src-$280 & $FFFF
    .ixt	 equ src-$180 & $FFFF
    
    	 if dst != A
    	  push af
    	 endif
    
    	 push hl
    	 push bc
    
    	 if src & $200
    	  ld hl,(rIY)
    	  ld bc,.iyt
    	 elseif src & $100
    	  ld hl,(rIX)
    	  ld bc,.ixt
    	 endif
    
    	 if dst == A
    	  push af
    	  add hl,bc
    	  pop af
    	 else
    	  add hl,bc
    	 endif
    
    	 pop bc
    
    	 if dst == H
    	  ld a,(hl)
    	  pop hl
    	  ld h,a
    	 elseif dst == L
    	  ld a,(hl)
    	  pop hl
    	  ld l,a
    	 else
    	  ld dst,(hl)
    	  pop hl
    	 endif
    
    	 if dst != A
    	  pop af
    	 endif
    	endm
    Вроде все разрулил, теперь все корректно:

    Код:
    # file opened: macro.asm
      1   0000              	OPT listoff
    # listing file suspended...
      7   8000              	OPT reset
      8   8000              	OPT listmc
    241   8000 41          {	 ld B,C
    241   8001 78          {	 ld a,b
    241   8002 78          {	 LD A,B
    242   8003 63          {	 ld H,E
    242   8004 78          {	 ld a,b
    242   8005 78          {	 LD A,B
    244   8006 F5          {	  push af	;LDRX B|C|D|E|H|L
    244   8007 E5          {	  push hl
    244   8008 C5          {	  push bc
    244   8009 2A 78 80    {	  ld hl,(rIX)	;IX
    244   800C 01 01 00    {	  ld bc,.ixt
    244   800F 09          {	  add hl,bc
    244   8010 C1          {	 pop bc
    244   8011 4E          {	  ld c,(hl)
    244   8012 E1          {	  pop hl
    244   8013 F1          {	  pop af
    245   8014 E5          {	  push hl	;LDRX A
    245   8015 C5          {	  push bc
    245   8016 2A 7A 80    {	  ld hl,(rIY)	;IY
    245   8019 01 01 00    {	  ld bc,.iyt
    245   801C F5          {	  push af	;A
    245   801D 09          {	  add hl,bc
    245   801E F1          {	  pop af
    245   801F C1          {	 pop bc
    245   8020 7E          {	  ld a,(hl)
    245   8021 E1          {	  pop hl
    246   8022 F5          {	  push af	;LDRX B|C|D|E|H|L
    246   8023 E5          {	  push hl
    246   8024 C5          {	  push bc
    246   8025 2A 78 80    {	  ld hl,(rIX)	;IX
    246   8028 01 FF FF    {	  ld bc,.ixt
    246   802B 09          {	  add hl,bc
    246   802C C1          {	 pop bc
    246   802D 56          {	  ld d,(hl)
    246   802E E1          {	  pop hl
    246   802F F1          {	  pop af
    247   8030 F5          {	  push af	;LDRX B|C|D|E|H|L
    247   8031 E5          {	  push hl
    247   8032 C5          {	  push bc
    247   8033 2A 7A 80    {	  ld hl,(rIY)	;IY
    247   8036 01 FF FF    {	  ld bc,.iyt
    247   8039 09          {	  add hl,bc
    247   803A C1          {	 pop bc
    247   803B 5E          {	  ld e,(hl)
    247   803C E1          {	  pop hl
    247   803D F1          {	  pop af
    248   803E F5          {	  push af	;LDRX B|C|D|E|H|L
    248   803F E5          {	  push hl
    248   8040 C5          {	  push bc
    248   8041 2A 78 80    {	  ld hl,(rIX)	;IX
    248   8044 01 7F 00    {	  ld bc,.ixt
    248   8047 09          {	  add hl,bc
    248   8048 C1          {	 pop bc
    248   8049 7E          {	  ld a,(hl)	;H
    248   804A E1          {	  pop hl
    248   804B 67          {	  ld h,a
    248   804C F1          {	  pop af
    249   804D F5          {	  push af	;LDRX B|C|D|E|H|L
    249   804E E5          {	  push hl
    249   804F C5          {	  push bc
    249   8050 2A 7A 80    {	  ld hl,(rIY)	;IY
    249   8053 01 7F 00    {	  ld bc,.iyt
    249   8056 09          {	  add hl,bc
    249   8057 C1          {	 pop bc
    249   8058 7E          {	  ld a,(hl)	;L
    249   8059 E1          {	  pop hl
    249   805A 6F          {	  ld l,a
    249   805B F1          {	  pop af
    250   805C F5          {	  push af	;LDRX B|C|D|E|H|L
    250   805D E5          {	  push hl
    250   805E C5          {	  push bc
    250   805F 2A 78 80    {	  ld hl,(rIX)	;IX
    250   8062 01 80 FF    {	  ld bc,.ixt
    250   8065 09          {	  add hl,bc
    250   8066 C1          {	 pop bc
    250   8067 46          {	  ld b,(hl)
    250   8068 E1          {	  pop hl
    250   8069 F1          {	  pop af
    251   806A F5          {	  push af	;LDRX B|C|D|E|H|L
    251   806B E5          {	  push hl
    251   806C C5          {	  push bc
    251   806D 2A 7A 80    {	  ld hl,(rIY)	;IY
    251   8070 01 80 FF    {	  ld bc,.iyt
    251   8073 09          {	  add hl,bc
    251   8074 C1          {	 pop bc
    251   8075 56          {	  ld d,(hl)
    251   8076 E1          {	  pop hl
    251   8077 F1          {	  pop af
    254   8078 00 00       {rIX DEFW 0
    255   807A 00 00       {rIY DEFW 0
    # listing file suspended...
    # file closed: macro.asm
    Upd: И да, можно написать еще более эффективный макрос, выигрывающий еще какие-то копейки для некоторых вариантов, но зачем мне это публиковать, если все всё уже порешали, а я просто всех раздражаю?! Поэтому пошел я на фиг, ищите сами... -)
    Последний раз редактировалось cafedead; 03.09.2025 в 14:02.

  6. #695

    Регистрация
    10.05.2019
    Адрес
    Prague, Czech Republic
    Сообщений
    229
    Спасибо Благодарностей отдано 
    51
    Спасибо Благодарностей получено 
    103
    Поблагодарили
    77 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Dart Alver Посмотреть сообщение
    Ped7g , а можете реализовать поддержку особых макросов с неопределённым количеством параметров, чтоб от ни одного до много-много ?

    ...

    varargs for macro are mentioned few times in various issues, like: https://github.com/z00m128/sjasmplus/issues/150

    You are welcome to check current proposal/notes and add any new suggestion/syntax detail so it's not lost when finally somebody will want to work on it.
    (I'm currently working very little at hobby stuff, too busy with newborn, work and running/fitness, ZX dev time shrink to few hours per month right now)

    - - - Updated - - -

    Цитата Сообщение от CityAceE Посмотреть сообщение
    ...
    Вот так работает, но в итоге имеем лишних 7 байт на константы. Причём в конец кода их перекинуть нельзя, так как они должны находится перед первым вызовом макроса.
    There's no good native support for what you are trying to do.
    You can maybe hack it by doing DEFINE with numeric values, ie. DEFINE A 1 : DEFINE REG_A 1 : IF reg1 == REG_A ... but it will probably bite you badly in other ways because the defines like "A" are too short and generic. Other possible hack is to use lua script to check for value of macro argument reg1, that's less intrusive, but cumbersome.

    Mind you, sjasmplus has the i8080 support the other-way, ie. you can write i8080 code in Zilog syntax and the assembler will warn you when you use Z80-specific instruction by accident. sjasmplus has also support for "M" register as `(hl)` alias.

    You can add to source code:
    Код:
    ; use --i8080 switch to 8080 instructions only
      OPT --syntax=M   ; enable "M" register as (hl) alias
      LD A,B   ; MOV A,B
      LD A,M  ; MOV A,M
      LDIR ; error "Unrecognized instruction: LDIR"
    and assemble it with --i8080 switch to get results like this:
    Код:
    $ sjasmplus --i8080 --msg=lstlab -
    ; use --i8080 switch to 8080 instructions only
      OPT --syntax=M   ; enable "M" register as (hl) alias
      LD A,B   ; MOV A,B
      LD A,M  ; MOV A,M
      LDIR ; error "Unrecognized instruction: LDIR"
    # file opened: <stdin>
    1     0000              ; switch to 8080 instructions only
    2     0000                OPT --syntax=M
    3     0000 78             LD A,B   ; MOV A,B
    4     0001 7E             LD A,M  ; MOV A,M
    <stdin>(5): error: Unrecognized instruction: LDIR
    5     0002                LDIR ; error "Unrecognized instruction: LDIR"
    6     0002
    # file closed: <stdin>
    But to do it the other way, ie. to support original i8080 syntax, you should probably look for other assembler, sjasmplus is not a good choice for that.
    Последний раз редактировалось Ped7g; 08.07.2025 в 13:04.

  7. #696

    Регистрация
    18.07.2021
    Адрес
    г. Хмельницкий, Украина
    Сообщений
    105
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    33
    Поблагодарили
    25 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Есть константы
    iBlue = %00000001
    pYellow = %00110000

    Есть макрос, который вызывается как
    Код:
    MacroName arg1, arg2
    Если вызывать его как
    Код:
    MacroName (iBlue + pYellow), arg2
    в код передается значение #2A (%00101010)
    Если вызывать его как
    Код:
    MacroName iBlue + pYellow, arg2
    в код передается ожидаемое (по крайней мере, для меня), значение #31 (%00110001).
    Почему?
    программирование сильно возрастает!
    https://zx-pk.ru/threads/474-deb-ass...ull=1#post7841

    Этот пользователь поблагодарил 0xDEAD за это полезное сообщение:

    Ped7g(04.11.2025)

  8. #697

    Регистрация
    28.02.2005
    Адрес
    Великий Новгород
    Сообщений
    2,087
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    230
    Поблагодарили
    98 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от 0xDEAD Посмотреть сообщение
    Почему?
    Дай угадаю, в макросе есть ld a, param. Который в первом случае будет ld a, (iBlue + pYellow), а во втором ld a, iBlue + pYellow... Что есмь разные команды
    Все любят гипножабу

    Эти 4 пользователя(ей) поблагодарили SAM style за это полезное сообщение:

    0xDEAD(03.11.2025), Bedazzle(04.11.2025), Ped7g(04.11.2025), Reobne(03.11.2025)

  9. #698

    Регистрация
    18.07.2021
    Адрес
    г. Хмельницкий, Украина
    Сообщений
    105
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    33
    Поблагодарили
    25 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    О как...
    программирование сильно возрастает!
    https://zx-pk.ru/threads/474-deb-ass...ull=1#post7841

  10. #699

    Регистрация
    10.05.2019
    Адрес
    Prague, Czech Republic
    Сообщений
    229
    Спасибо Благодарностей отдано 
    51
    Спасибо Благодарностей получено 
    103
    Поблагодарили
    77 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    yes, macro arguments are text-substituted before the macro line is parsed, evaluated and assembled.

    So `ld a, arg1` will become `ld a, (iBlue + iYellow)` and that will access memory from address #31 (ROM).

    To avoid the similar issues like C macros have, you want to use macro arguments more like:
    `ld a, +(arg1)` -> `ld a, +((iBlue + iYellow))` -> `ld a,#31`

    Having parentheses around arguments in expressions helps to avoid stuff like:
    Код:
      macro m1 arg1, arg2
        ld a, arg1 * arg2
        ld a, +(arg1) * (arg2)
      endm
      m1 4<<2, 1+2
    ; ->
    ; ld a, 4<<2*1+2 -> ld a, #40 ; 4 << (2*1+2) -> 4 << 4 -> 64
    ; ld a, +(4<<2)*(1+2) -> ld a, #30 ; 16 * 3 -> 48
    BTW when in doubt, try listing (--lst --lstlab). You may see the macro lines somewhat substituted there, quick example trying to mimic your question:
    Код:
      macro m1 arg1, arg2
        ld a, arg1
        ld a, +(arg1)
      endm
    iBlue = %00000001
    pYellow = %00110000
      m1 (iBlue + pYellow), 123
      ; btw "=" are not constants but "variables" or DEFL, so you can still modify them later, constants are EQU
    iBlue = %00000010  ; check next result
      m1 (iBlue + pYellow), 123
    does produce this when using stdin as input and --msg=lst option:
    Код:
    $ sjasmplus --msg=lst -
      macro m1 arg1, arg2
        ld a, arg1
        ld a, +(arg1)
      endm
    iBlue = %00000001
    pYellow = %00110000
      m1 (iBlue + pYellow), 123
      ; btw "=" are not constants but "variables" or DEFL, so you can still modify them later, constants are EQU
    iBlue = %00000010  ; check next result
      m1 (iBlue + pYellow), 123
    # file opened: <stdin>
     1    0000                macro m1 arg1, arg2
     2    0000 ~                ld a, arg1
     3    0000 ~                ld a, +(arg1)
     4    0000                endm
     5    0000              iBlue = %00000001
     6    0000              pYellow = %00110000
     7    0000                m1 (iBlue + pYellow), 123
     7    0000 3A 31 00    >    ld a, (iBlue + pYellow)
     7    0003 3E 31       >    ld a, +((iBlue + pYellow))
     8    0005                ; btw "=" are not constants but "variables" or DEFL, so you can still modify them later, constants are EQU
     9    0005              iBlue = %00000010  ; check next result
    10    0005                m1 (iBlue + pYellow), 123
    10    0005 3A 32 00    >    ld a, (iBlue + pYellow)
    10    0008 3E 32       >    ld a, +((iBlue + pYellow))
    11    000A
    # file closed: <stdin>
    So by reading the listing file you have chance to spot unexpected bytes/instructions or evaluation results.
    Последний раз редактировалось Ped7g; 04.11.2025 в 00:56.

    Этот пользователь поблагодарил Ped7g за это полезное сообщение:

    Bedazzle(04.11.2025)

Страница 70 из 70 ПерваяПервая ... 6667686970

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

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

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

Похожие темы

  1. SjASMPlus Z80 кросс ассемблер
    от Aprisobal в разделе Программирование
    Ответов: 1663
    Последнее: 19.06.2021, 01:36
  2. Исходники TR-DOS для SjASMPlus
    от Keeper в разделе Программирование
    Ответов: 20
    Последнее: 11.02.2011, 11:57
  3. Запуск STS из .sna, сгенерированного sjasmplus.
    от siril в разделе Программирование
    Ответов: 7
    Последнее: 11.10.2010, 21:33
  4. Breakpoints в связке Sjasmplus+UnrealSpeccy
    от Kurles в разделе Программирование
    Ответов: 19
    Последнее: 26.01.2009, 12:36
  5. Disturbed COverMAnia ( music disk with z00m music collection)
    от kyv в разделе Музыка
    Ответов: 10
    Последнее: 27.03.2008, 10:01

Ваши права

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