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

User Tag List

Показано с 1 по 4 из 4

Тема: Логическое ИЛИ

  1. #1
    Activist Аватар для Den1982
    Регистрация
    22.03.2011
    Адрес
    Нижний Новгород
    Сообщений
    340
    Благодарностей: 144
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Логическое ИЛИ

    На досуге делаю первые шаги в АСМе, по книжке "Как написать компьютерную игру на ассемблере".
    Вот пример из этой книжки (подпрограмма сдвига символа для эффекта волны):
    "Подпрограмма вертикального скроллинга знакоместа может выглядеть так:

    UP CP 32 ;проверка позиции перемещаемого знакоместа
    RET NC ;выход, если больше или равна 32
    LD HL,(AD_LIN) ;получаем адрес экрана начала строки
    PUSH AF
    OR L
    LD L,A
    PUSH HL
    LD D,H ;копируем адрес в DE
    LD E,L
    LD B,7 ;повторяем 7 раз
    UP1 INC H ;в HL - адрес байта следующего ряда
    LD A,(HL) ;переносим из (HL) в (DE)
    LD (DE),A
    INC D ;переходим к следующему ряду
    DJNZ UP1
    LD (HL),0 ;обнуляем самый нижний ряд
    POP HL
    POP AF
    RET

    Перед обращением к этой (а также и к следующей) подпрограмме в аккумулятор нужно занести горизонтальную позицию знакоместа в строке. "
    Никак не могу понять зачем нужна строка выделенная жирным... Да и что она делает тоже интерестно - складывает побитно содержимое регистра L? А зачем? хелп ми...
    ZX's: ZX Spectrum +2 ZX Evolution Rev.C Speccy 2010 | PC's: Core i3-2120 : Pentium 133 | NoteBooks's: Asus T100 : Samsung R440 | SingleBoard's: CubieBoard2 : Raspberry Pi B| TabletPhone's: PocketBook A10 : ChangJiang N7300 : Samsung GT-I5800 | Console's: Famicom : PSOne : PS2

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

  3. #2
    Member Аватар для Oleg Origin
    Регистрация
    14.12.2010
    Адрес
    Санкт-Петербург
    Сообщений
    183
    Благодарностей: 353
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Этой командой совместно с последующей задается актуальный адрес знакоместа в указанной ранее строке. Тут нужно посмотреть на исходные данные: в (AD_LIN) у нас хранится уже высчитанный адрес начала строки, а в А - горизонтальная позиция знакоместа от 0 до 31. Дальше небольшая хитрость: адреса начала строк на экране выравнены по 32 (см. "строение экрана" в той же книге), и если перевести адрес начала любой строки в двоичный вид, то мы увидим, что "правые" 5 бит младшего байта адреса всегда будут равны нулю. А число в диапазоне от 0 до 31 занимает как раз пять бит. То есть, в данном случае получается, что командой OR L мы к горизонтальной позиции, которая хранится в А, прибавляем младший байт адреса строки. И следующей командой запихиваем его назад в L. А старший байт адреса, который хранится в H, - не изменяется.
    Последний раз редактировалось Oleg Origin; 04.07.2012 в 17:43.
    Новые игры для ZX Spectrum www.olegorigin.org Brand New ZX Spectrum Games

  4. Этот пользователь поблагодарил Oleg Origin за это полезное сообщение:
    Den1982 (04.07.2012)

  5. #3
    Member
    Регистрация
    25.04.2009
    Адрес
    Gomel, Belarus
    Сообщений
    32
    Благодарностей: 16
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Все так, как сказал Oleg Origin.

    Единственно добавлю, что тут "OR L" более логично заменить на "ADD A,L"
    По памяти и тактам тжс, а с точки зрения логики программы смотрелось бы лучше. Кроме того, "ADD A,L" не завязан на нулевые младшие биты HL.

  6. Этот пользователь поблагодарил bsivko за это полезное сообщение:
    Den1982 (04.07.2012)

  7. #4
    Activist Аватар для Den1982
    Регистрация
    22.03.2011
    Адрес
    Нижний Новгород
    Сообщений
    340
    Благодарностей: 144
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от bsivko Посмотреть сообщение
    Единственно добавлю, что тут "OR L" более логично заменить на "ADD A,L"
    Ага, я до ADD еще не дошел еще, но в принципе по смыслу уже понятно что оно делает.-)
    ZX's: ZX Spectrum +2 ZX Evolution Rev.C Speccy 2010 | PC's: Core i3-2120 : Pentium 133 | NoteBooks's: Asus T100 : Samsung R440 | SingleBoard's: CubieBoard2 : Raspberry Pi B| TabletPhone's: PocketBook A10 : ChangJiang N7300 : Samsung GT-I5800 | Console's: Famicom : PSOne : PS2

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

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

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

Ваши права

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