Hazar | Дата: Четверг, 10.05.2018, 06:36 | Сообщение # 1 |
80h
Группа: Пользователи
Сообщений: 231
Статус: Offline
| Лучшая книга по программированию Дж. Хардман, Э. Хьюзон. Перевод Тихоновой Н.А.
Книга содержит полезные примеры программирования в машинном коде с подробным описанием принципа работы. (Формат Word 2003. в архиве)
******************************************************************
Сдвиг вниз на один символ.Длина: 73 Количество переменных: 0
Контрольная сумма: 7987
Назначение: Эта программа сдвигает содержимое дисплейного файла вниз на 8 пикселей.
Вызов подпрограммы:RANDOMIZE USR X адрес Контроль ошибок: Нет Комментарий: Нет
ЛИСТИНГ МАШИННЫХ КОДОВ МЕТКА АССЕМБЛЕР ЧИСЛА ДЛЯ ВВОДА (DEC) LD HL,22527 /33 255 87 LD DE,22495 /17 223 87 SAVE PUSH HL /229 PUSH DE /213 LD C,23 /14 23 NEXT_L LD B,32 /6 32 COPY_B LD A,(DE) /26 LD (HL),A /119 LD A,C /121 AND 7 /230 7 CP 1 /254 1 JR NZ,NEXT_B /32 2 SUB A /151 LD (DE),A /18 NEXT_B DEC HL /43 DEC DE /27 DJNZ COPY_B /16 241 DEC C /13 JR Z,REST /40 21 LD A,C /121 AND 7 /230 7 CP 0 /254 0 JR Z,N_BLOCK /40 24 CP 7 /254 7 JR NZ,NEXT_L /32 225 PUSH DE /213 LD DE,1792 /17 0 7 AND A /167 SBC HL,DE /237 82 POP DE /209 JR NEXT_L /24 215 REST POP DE /209 POP HL /225 DEC D /21 DEC H /37 LD A,H /124 CP 79 /254 79 RET Z /200 JR SAVE /24 201 N_BLOCK PUSH HL /229 LD HL,1792 /33 0 7 EX DE,HL /235 AND A /167 SBC HL,DE /237 82 EX DE,HL /235 POP HL /225 JR NEXT_L /24 193
Как она работает:В пару регистров HL загружается адрес последнего байта дисплейного файла, а в DE загружается адрес байта, соответствующего изображению, отстоящему на восемь линий вверх. HL и DE сохраняются на стеке. В C регистр загружается число, на 1 меньшее, чем число строк на экране. Затем в B регистр загружается количество байтов на одной линии дисплея он используется, как счетчик. В аккумулятор загружается байт с адресом DE и это значение пересылается в ячейку по адресу HL. В аккумулятор загружается (для проверки) содержимое регистра C и, если оно равно 1, 9 или 17, то в ячейку по адресу DE помещается0.HL и DE уменьшаются на единицу, указывая на следующий байт дисплея. Счетчик байтов в регистре B уменьшается и, если и он не равен 0, происходит переход к COPY_В. Далее уменьшается счетчик строк в регистре C. Если он равен0,происходит переход к процедуре 'REST'. Если C содержит 8 или 16, то происходит переход к процедуре 'N_BLOCK'. Если C не содержит 7 или 15, подпрограмма переходит к 'NEXT_L'. Затем из HL вычитается 1792 теперь HL указывает на следующую треть экрана и подпрограмма переходит к 'NEXT_L'. В процедуре REST значения DE и HL берутся из стека и из них вычитается число 256. В итоге DE и HL указывают на строку, позиция которой выше, чем та, что была в предыдущем цикле. Если HL содержит 20479, подпрограмма возвращается в BASIC, иначе происходит переход к процедуре SAVE.Впроцедуре N_BLOCK,1792 вычитается из DE т.е. после этого DE указывает на следующий блок экрана. Подпрограмма затем переходит к NEXT_L.
Spectrum жив в нашей душе навсегда
Сообщение отредактировал Hazar - Четверг, 10.05.2018, 06:47 |
|
| |