Body
#07
25 июня 1997 |
|
PUSH HL - Процедура вывода точки.
┌══════════════════════════════════════════════════════════════┐ │▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ PUSH HL ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓│ └══════════════════════════════════════════════════════════════┘ (C)SATSOFT PHN 270-72-36 СЕГОДНЯ Я ПРОДОЛЖАЮ РУБРИКУ ПОД КОДОВЫМ НАЗВАНИЕМ 'PUSH HL' И ПРЕДЛАГАЮ ВАШЕМУ ВНИМАНИЮ ОЧЕНЬ ПРОСТЕНЬКУЮ ПРОЦЕДУРУ ВЫВОДА ТОЧКИ НА ЭКРАН: ;ВЫВОД ТОЧКИ ORG 40000 LD D,10 ;КООРДИНАТА Х LD E,11 ;КООРДИНАТА Y LD A,#AF ;РАСЧЕТ АДРЕСА ПО КООРДИНАТАМ SUB E RET C LD E,A AND A RRA SCF RRA AND A RRA XOR E AND #F8 XOR E LD H,A LD A,D RLCA RLCA RLCA XOR E AND #C7 XOR E RLCA RLCA LD L,A ТЕПЕРЬ МЫ ЗНАЕМ НОМЕР СЕГМЕНТА, РЯДА, СТОЛБЦА И ЛИНИИ. ВСЕ ЭТИ ДАННЫЕ ХРАНЯТСЯ В РЕГИСТРОВОЙ ПАРЕ 'HL'.Т.К. ДАННАЯ ЛИНИЯ В ЗНАКОМЕСТЕ ИМЕЕТ 8 ПИКСЕЛОВ, А ВКЛЮЧИТЬ НУЖНО ТОЛЬКО ОДИН ИЗ НИХ, ТО НЕОБХОДИМО РАССЧИТАТЬ КАКОЙ БИТ ТРЕБУЕТСЯ ВКЛЮЧИТЬ. ФАКТИЧЕСКИ, ЕГО НОМЕР ОПРЕДЕЛЯЕТСЯ ОСТАТКОМ ОТ ДЕЛЕНИЯ КООРДИНАТЫ Х НА 8, А ВЫЧИСЛЯЕТСЯ ЭТОТ ОСТАТОК - ПУТЕМ МАСКИРОВАНИЯ ПЯТИ СТАРШИХ БИТОВ. НО ДЕЛО В ТОМ, ЧТО КООРДИНАТА Х ИЗМЕНЯЕТСЯ СЛЕВА НАПРАВО,Т.Е. 0,1,2,3,...,175, А НОМЕРА БИТОВ В БАЙТЕ, СООТВЕТСТВУЮЩИМ НАЙДЕННОЙ ЛИНИИ ИДУТ НАОБОРОТ,Т.Е. 7,6,5,...,0.ПОЭТОМУ НУЖНО СДЕЛАТЬ ПРЕОБРАЗОВАНИЕ. В РЕГИСТР 'А' ВВОДИТСЯ ЧИСЛО '#FE'(11111110), ПОСЛЕ ЧЕГО ДЕЛАЕТСЯ ВРАЩЕНИЕ ЭТОГО БАЙТА N+1 РАЗ, ГДЕ N - ОСТАТОК ОТ ДЕЛЕНИЯ Х НА 8. LD A,D ;КООРДИНАТА Х AND #07 ;МАСКИРОВАНИЕ LD B,A ;ОСТАТОК ОТ ДЕЛЕНИЯ Х НА 8 INC B ;+1 LD A,#FE ;ВВЕЛИ БАЙТ 11111110 LOOP RRCA ;ВРАЩЕНИЕ N+1 РАЗ DJNZ LOOP LD B,#FF ;ИНВЕРСИЯ,ЧТОБЫ ПЕЧАТЬ ТОЧКИ БЫЛА ЧЕРНЫМ XOR B ; ПО БЕЛОМУ LD B,A ;ЗАПОМНИЛИ В РЕГИСТРЕ 'B' LD A,(HL) ;В 'А' ГРУЗИМ ЗНАЧЕНИЕ ИЗ ЭКРАНА OR B ;ВКЛЮЧЕМ ТРЕБУЕМЫЙ БИТ LD (HL),A ;ГРУЗИМ В ЭКРАН ПОЛУЧЕННЫЙ РЕЗУЛЬТАТ RET ;ВЫХОД ИЗ ПРОЦЕДУРЫ :) ВМЕСТО КОМАНДЫ 'OR B' МОЖНО ИСПОЛЬЗОВАТЬ 'XOR B' И ПЕЧАТЬ БУДЕТ ПРОИЗВОДИТЬСЯ ПО XOR'У.ПО ИДЕЕ, ВСЕ ДОЛЖНО БЫТЬ ПОНЯТНО, Т.К. ПРОГА ОЧЕНЬ ПРОСТАЯ И К НЕЙ В ДОБАВОК ПРЕДОСТАВЛЕНО БОЛЬШОЕ КОЛИЧЕСТВО КОММЕНТАРИЕВ. ПИШИТЕ О ВСЕМ, ЧТО ВАС ИНТЕРЕСУЕТ ПО АССЕМБЛЕРУ В РАЗУМНЫХ ПРЕДЕЛАХ.ПРИСЫЛАЙТЕ СВОИ ПРОГРАММЫ, И Я ИХ ОБЯЗАТЕЛЬНО(!) ОПУБЛИКУЮ.
Другие статьи номера:
Похожие статьи:
В этот день... 14 декабря