User Tag List

Показано с 1 по 10 из 1128

Тема: ЭТЮДЫ

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    18.02.2005
    Адрес
    Набережные Челны
    Сообщений
    1,574
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вообще то тема уже несколько раз открывалась, посмотреть можно было повнимательнее ;-)
    А посчёт этюдов есть такие вот зарисовки.
    Есть такие замечательные команды как adc и sbc - используют флаг CY

    Например типовая задача уменьшить значение аккумулятора не менее какого то (например 23).
    обычно делают:
    dec a
    cp 23
    jr nc,$+3
    inc a
    а можно вот так аккуратно:
    sub 23
    adc a,22
    работает много элегантнее и что очень важно имеет всегда одну и ту же длительность (что особенно интересно демописателям где каждый раз приходиться пересчитывать такты).
    Или обратная задача - увеличить значение но не более какого то (например 75)
    В этом случае делаем так:
    add a,-75
    sbc a,-1-75
    В этом случае выше 75 ну никак не поднимется с теми же преимуществами.
    Кстати аналогичные вещи можно делать с HL используя те же команды.
    Или задача: в зависимости от значения флага CY заполнить аккумулятор либо значением 23 либо 75:
    sbc a,a
    and 75-23
    add a,23
    В итоге - если включен флаг CY то в аккумуляторе будет 75, иначе будет 23.
    Последний раз редактировалось GriV; 24.12.2008 в 15:14.
    Биты рулят лучше байтов, байты рулят шустрее!
    View, Звук, Цвет

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

    Jukov(12.01.2022)

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

  3. #2

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

    По умолчанию

    Цитата Сообщение от GriV Посмотреть сообщение
    Есть такие замечательные команды как adc и sbc - используют флаг CY

    Например типовая задача уменьшить значение аккумулятора не менее какого то (например 23).
    обычно делают:
    dec a
    cp 23
    jr nc,$+3
    inc a
    а можно вот так аккуратно:
    sub 23
    adc a,22
    работает много элегантнее и что очень важно имеет всегда одну и ту же длительность (что особенно интересно демописателям где каждый раз приходиться пересчитывать такты).
    Или обратная задача - увеличить значение но не более какого то (например 75)
    В этом случае делаем так:
    add a,-75
    sbc a,-1-75
    В этом случае выше 75 ну никак не поднимется с теми же преимуществами.
    Прошло всего-то 14 лет - а кто-то проверял, как это работает? Я проверил (понадобилось). Немного не так работает, как заявлено.

    Код:
    ld a, 23
    sub 23
    adc a, 22
    оставляет в А значение 22, хотя должно быть 23.
    То есть, формула должна быть:

    sub x+1
    adc a, x

    а не

    sub x
    adc a, x-1


    К этому:
    Код:
    add a,-75
    sbc a,-1-75
    претензий нет.
    Последний раз редактировалось 0xDEAD; 08.06.2022 в 19:33.

  4. #3

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,396
    Спасибо Благодарностей отдано 
    765
    Спасибо Благодарностей получено 
    2,368
    Поблагодарили
    1,317 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от 0xDEAD Посмотреть сообщение
    sub x+1
    adc a, x
    При этом
    1. Если исходно Aисх>x, то на выходе A=Aисх-1
    2. Если исходно x>=Aисх>=0, то на выходе A=Aисх

  5. #4

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

    По умолчанию

    Так и я о чём. В этом и был смысл поста 14-летней давности, но оно так не работает, как написано.

  6. #5

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,396
    Спасибо Благодарностей отдано 
    765
    Спасибо Благодарностей получено 
    2,368
    Поблагодарили
    1,317 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от 0xDEAD Посмотреть сообщение
    К этому:
    Код:

    add a,-75
    sbc a,-1-75

    претензий нет.
    Тут похожая ситуация:
    1. Если исходно Aисх<x (в примере x=75), то на выходе A=Aисх+1
    2. Если исходно FF>=Aисх>=x, то на выходе A=Aисх

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

    Цитата Сообщение от 0xDEAD Посмотреть сообщение
    оно так не работает, как написано.
    Автор того поста не упомянул один момент - чтобы эти конструкции работали, надо чтобы исходное значение было "корректным" (>=x в случае декремента и <=x в случае инкремента).

  7. #6

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

    По умолчанию

    Я понимаю.
    Описанный алгоритм с декрементом работает не так, как написано. В приведённом примере, аккумулятор уменьшается до 22, хотя, как написано, он не должен уменьшаться меньше 23. Инкремент работает правильно, к нему претензий нет.

  8. #7

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,396
    Спасибо Благодарностей отдано 
    765
    Спасибо Благодарностей получено 
    2,368
    Поблагодарили
    1,317 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от 0xDEAD Посмотреть сообщение
    Инкремент работает правильно, к нему претензий нет.
    У инкремента тоже есть "мертвая зона", если он правильный, то и декремент тоже.

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

    Если претензия к исходному описанию не в "мертвой зоне", а в не совсем правильном описании порога - могу только согласиться.

  9. #8

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

    По умолчанию

    Код:
            ld a, 30
    err	sub 23
    	adc a, 22
    	jp err
    После 23446557465 итерации оставляет в аккумуляторе 22.

    Код:
            ld a, 30
    err	sub 24
    	adc a, 23
    	jp err
    После 23446557465 итерации оставляет в аккумуляторе 23.

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

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

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

Похожие темы

  1. Этюды: как бы написать поизящнее.
    от AndTorp в разделе Программирование
    Ответов: 5
    Последнее: 17.03.2008, 00:43
  2. Ответов: 0
    Последнее: 18.08.2006, 22:40
  3. Этюды: печать шрифтом 5x5...
    от breeze в разделе Программирование
    Ответов: 12
    Последнее: 27.03.2005, 05:21

Метки этой темы

Ваши права

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