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

User Tag List

Страница 42 из 43 ПерваяПервая ... 383940414243 ПоследняяПоследняя
Показано с 411 по 420 из 425

Тема: SjASMPlus от z00m

  1. #411
    Member
    Регистрация
    10.05.2019
    Адрес
    Prague, Czech Republic
    Сообщений
    154
    Спасибо Благодарностей отдано 
    21
    Спасибо Благодарностей получено 
    65
    Поблагодарили
    48 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    а savebin происходит только во время pass 3 ?
    Yes, it's saving bytes from DEVICE memory, which is not used in first passes during assembling, so it's completely zeroed in pass 1/2, and there's nothing to save.

    The machine code production happens in third pass (also for OUTPUT/OUTEND/SAVETAP/... all the others).
    (production = writing it... the machine code is "dry-simulated" in first 2 passes, ie. the assembler calculates how many bytes the instruction takes, to adjust labels, but then it throws away the opcode)

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

    NEO SPECTRUMAN (28.12.2020)

  3. #412
    Member
    Регистрация
    10.05.2019
    Адрес
    Prague, Czech Republic
    Сообщений
    154
    Спасибо Благодарностей отдано 
    21
    Спасибо Благодарностей получено 
    65
    Поблагодарили
    48 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    So in recent weeks I was abusing sjasmplus script a lot (as a form of test/exercise of the scripting implementation, some of the experience went into improving it just before v1.18.0 release)...

    If you are serious about sjasmplus scripting, maybe you can pick up a trick or two from these:
    https://github.com/ped7g/adventofcode

  4. #413
    Guru Аватар для NEO SPECTRUMAN
    Регистрация
    22.05.2011
    Адрес
    Дзержинск
    Сообщений
    5,702
    Спасибо Благодарностей отдано 
    339
    Спасибо Благодарностей получено 
    465
    Поблагодарили
    364 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Код:
    	
    tmp_cnt = 0
    	dup 10
    
    		if ((tmp_cnt = 0) || (tmp_cnt = 5) || (tmp_cnt = 7) || (tmp_cnt = 8))
    			display tmp_cnt," skip"
    		else		
    			display tmp_cnt," ok"
    		endif
    tmp_cnt = tmp_cnt +1
    	edup
    	
    	display " "
    
    tmp_cnt = 0
    	dup 10
    
    		if ((tmp_cnt != 0) || (tmp_cnt != 5) || (tmp_cnt != 7) || (tmp_cnt != 8))
    			display tmp_cnt," ok"
    		else		
    			display tmp_cnt," skip"
    		endif
    tmp_cnt = tmp_cnt +1
    	edup
    
    	display " "
    
    tmp_cnt = 0
    	dup 10
    
    		if ((tmp_cnt =! 0) || (tmp_cnt =! 5) || (tmp_cnt =! 7) || (tmp_cnt =! 8))
    			display tmp_cnt," ok"
    		else		
    			display tmp_cnt," skip"
    		endif
    tmp_cnt = tmp_cnt +1
    	edup
    		
    	display " "
    
    tmp_cnt = 0
    	dup 10
    
    		if ((tmp_cnt <> 0) || (tmp_cnt <> 5) || (tmp_cnt <> 7) || (tmp_cnt <> 8))
    			display tmp_cnt," ok"
    		else		
    			display tmp_cnt," skip"
    		endif
    tmp_cnt = tmp_cnt +1
    	edup

    Код:
    > 0x0000 skip
    > 0x0001 ok
    > 0x0002 ok
    > 0x0003 ok
    > 0x0004 ok
    > 0x0005 skip
    > 0x0006 ok
    > 0x0007 skip
    > 0x0008 skip
    > 0x0009 ok
    >
    > 0x0000 ok
    > 0x0001 ok
    > 0x0002 ok
    > 0x0003 ok
    > 0x0004 ok
    > 0x0005 ok
    > 0x0006 ok
    > 0x0007 ok
    > 0x0008 ok
    > 0x0009 ok
    >
    > 0x0000 ok
    > 0x0001 skip
    > 0x0002 skip
    > 0x0003 skip
    > 0x0004 skip
    > 0x0005 skip
    > 0x0006 skip
    > 0x0007 skip
    > 0x0008 skip
    > 0x0009 skip
    >
    test.asm(52): error: Syntax error: > 0) || (tmp_cnt <> 5) || (tmp_cnt <> 7) || (
    tmp_cnt <> 8))
    test.asm(52): error: ')' expected
    почему не работает != ? o_O
    почему =! дает какой то результат?
    Последний раз редактировалось NEO SPECTRUMAN; 05.01.2021 в 03:33.

  5. #414
    Member
    Регистрация
    10.05.2019
    Адрес
    Prague, Czech Republic
    Сообщений
    154
    Спасибо Благодарностей отдано 
    21
    Спасибо Благодарностей получено 
    65
    Поблагодарили
    48 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    почему не работает != ? o_O
    Looks all correct to me?

    The first part is doing "skip" when cnt is 0 or 5 or 7 or 8

    The second part is doing "ok" every time (first two "(cnt is not 0) or (cnt is not 5)" are enough to be always true for any cnt value)

    The third part "=!" is parsed as: "=" is equivalence operator, "!" is logical not, so 0 becomes -1, and non-zero values become 0
    That leads to "ok" when cnt is -1 or 0

    Fourth is just syntax error, the "<>" operator doesn't exist in sjasmplus.

    Did you want in second block negation of first block? Then: !(A || B) = (!A) && (!B)
    (note the "logical or" becomes "logical and" when whole expression is negated)
    Код:
    tmp_cnt = 0
    	dup 10
    		if ((tmp_cnt != 0) && (tmp_cnt != 5) && (tmp_cnt != 7) && (tmp_cnt != 8))
    			display tmp_cnt," ok"
    		else		
    			display tmp_cnt," skip"
    		endif
    tmp_cnt = tmp_cnt +1
    	edup

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

    NEO SPECTRUMAN (05.01.2021)

  7. #415
    Guru Аватар для NEO SPECTRUMAN
    Регистрация
    22.05.2011
    Адрес
    Дзержинск
    Сообщений
    5,702
    Спасибо Благодарностей отдано 
    339
    Спасибо Благодарностей получено 
    465
    Поблагодарили
    364 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Ped7g Посмотреть сообщение
    Looks all correct to me?
    значит у меня не правильное понимание || и(людское) &&
    и значит (|| людское and &&) != ((людское OR) людское and (людское AND))
    Последний раз редактировалось NEO SPECTRUMAN; 05.01.2021 в 14:55.

  8. #416
    Member
    Регистрация
    10.05.2019
    Адрес
    Prague, Czech Republic
    Сообщений
    154
    Спасибо Благодарностей отдано 
    21
    Спасибо Благодарностей получено 
    65
    Поблагодарили
    48 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    logical or (T = true [-1 in sj], F = false [0 in sj]):
    F || F = F
    T || F = T
    F || T = T
    T || T = T

    logical and:
    F && F = F
    T && F = F
    F && T = F
    T && T = T

    logical not:
    !F = T
    !T = F

    And the general math rules for propagating logical not in complex expressions:
    !(A < B) <=> A >= B
    !(A == B) <=> A != B
    !(A || B) <=> !A && !B
    !(A && B) <=> !A || !B
    ...
    https://en.wikipedia.org/wiki/Negation#Distributivity

    sjamplus treats any non-zero value as true, and zero value as false, but when boolean-true is calculated, it is represented by ~0 (-1).
    value = 4 ; value = 4
    value = !4 ; value = 0
    value = !!4 ; value = -1 (true)

    ( "людское ponimanje" => no idea what you are talking about, the math way is the only way I think about logic, even when talking in human language ... but there are many people not able to correctly negate predicate ... for example they ask you if you like blue colour, and you say "no", they will think you hate blue (which is incorrect negation "!like" is not "hate"))
    Последний раз редактировалось Ped7g; 05.01.2021 в 18:25.

  9. #417
    Guru Аватар для NEO SPECTRUMAN
    Регистрация
    22.05.2011
    Адрес
    Дзержинск
    Сообщений
    5,702
    Спасибо Благодарностей отдано 
    339
    Спасибо Благодарностей получено 
    465
    Поблагодарили
    364 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Ped7g Посмотреть сообщение
    "людское ponimanje" => no idea what you are talking about,
    не знаю как у вас
    у нас когда люди говорят

    если (if)
    A не равно 1
    или (or)
    A не равно 5
    тогда (then)
    Ы = 7
    если нет (else)
    тогда Ы = 0


    это имеется в виду (и это правильно)

    Код:
    if A <> 1
      if A <> 5
      Ы = 7
      else
      Ы = 0
      endif
    else
    Ы = 0  
    endif
    и ожидаемый результат
    1 Ы=0
    2 Ы=7
    3 Ы=7
    4 Ы=7
    5 Ы=0

    такое никогда не имеют в виду

    Код:
    if A <> 1
    temp1 = 1
    else
    temp1 = 0
    endif
    
    if A <> 5
    temp2 = 1
    else
    temp2 = 0
    endif
    
    if temp1 = 1
      Ы = 7
      else
      if temp2 = 1
      Ы = 7
      else
      Ы = 0
      endif
    endif
    и такой рeзультат
    1 temp1=0 or temp2=1 = Ы=7
    2 temp1=1 or temp2=1 = Ы=7
    3 temp1=1 or temp2=1 = Ы=7
    4 temp1=1 or temp2=1 = Ы=7
    5 temp1=1 or temp2=0 = Ы=7
    совершенно неожиданный



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


    к вам претензий нет
    просто это не совсем очевидный аспект
    Последний раз редактировалось NEO SPECTRUMAN; 07.01.2021 в 00:26.

  10. #418
    Veteran Аватар для Bedazzle
    Регистрация
    02.05.2015
    Адрес
    г. Таллин, Эстония
    Сообщений
    1,135
    Спасибо Благодарностей отдано 
    56
    Спасибо Благодарностей получено 
    65
    Поблагодарили
    56 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    это имеется в виду (и это правильно)

    Код:
    if A <> 1
    Ы = 7
    else
      if A <> 5
      Ы = 7
      else
      Ы = 0
      endif
    endif
    Кривой код
    else
    Ы = 0
    никогда не отработает
    Heavy on the disasm
    Eric and the disasm
    Mask 3: Venom strikes disasm
    Bard's disasm

  11. #419
    Guru Аватар для NEO SPECTRUMAN
    Регистрация
    22.05.2011
    Адрес
    Дзержинск
    Сообщений
    5,702
    Спасибо Благодарностей отдано 
    339
    Спасибо Благодарностей получено 
    465
    Поблагодарили
    364 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Bedazzle Посмотреть сообщение
    никогда не отработает
    пофиксил

    поэтому и нужон долбанный список условий по типу if a=1,5,6
    а не трехэтажные IF-ы
    в которых можно чего то просмотреть

    или нужны элементарные for и goto
    чтоб не городить огород из dup-ов и if-ов
    ТУПО пытаясь повторить их функционал

    додо знаю щас ТЫ начнешь мне расказывать что
    компилятор не должен это делать
    это должен делать cpp, линкер, хренкер прочая ересь
    и весь исходник должен состоят из батников
    а компилятор должен только заменять nop на $00 и ничего более
    и даже не должен делать переходы на метки вперед
    и все метки для переходов должны быть предварительно объявлены в начале исходника
    а то ж ведь компилятор еще не знает куда ему переходить когда код выглядит так
    jp l1
    l1
    Последний раз редактировалось NEO SPECTRUMAN; 07.01.2021 в 00:42.

  12. #420
    Member
    Регистрация
    10.05.2019
    Адрес
    Prague, Czech Republic
    Сообщений
    154
    Спасибо Благодарностей отдано 
    21
    Спасибо Благодарностей получено 
    65
    Поблагодарили
    48 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    не знаю как у вас
    у нас когда люди говорят

    если (if)
    A не равно 1
    или (or)
    A не равно 5
    тогда (then)
    Ы = 7
    если нет (else)
    тогда Ы = 0
    yeah, we say "if not equal to 1 and not equal to 5". I guess some people could use "or" there, but they are just using the language wrong, or not understanding the logic expressions. (mind you, while I didn't finish my university studies, I made it far enough to have all exams from math basics, like logic evaluation, so for me it's easy to use the language correctly in logic constructs ... but from my experience with people who didn't study it, it's common they don't understand the rules correctly, and say the wrong thing, while they think something else - very common by non-math people, it's not easy to formulate the rule correctly in human language, even by intelligent people, if they are missing the formal math teaching).

    But I think your example is actually correct if read in certain way, like this: "if A not equal to (1 or 5), then B = 7, else B = 0" -> now this makes some sense also from math point of view, a bit like incomplete distribution of negation, so you end with something like "IF A != (1 || 5)", but if you expand it to simpler statements, it needs the || negation, so "IF A != 1 && A != 5"

    Any way, you can in sjasmplus source always try to pick the "simpler to read", so if you are more familiar with "1 or 5", then do the positive form and negate the final result, like this:
    Код:
      IF !(A == 1 || A == 5 || A == 7)
        ;; other values of A (not 1 or 5 or 7)
      ELSE
        ;; when A is 1 or 5 or 7
      ENDIF
      ;; notice the "!" at beginning of the expression
      ;; flipping the final result of the test

Страница 42 из 43 ПерваяПервая ... 383940414243 ПоследняяПоследняя

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

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

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

Похожие темы

  1. SjASMPlus Z80 кросс ассемблер
    от Aprisobal в разделе Программирование
    Ответов: 1631
    Последнее: 04.08.2020, 21:39
  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

Ваши права

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