Нужна скоростная операция:
В HL содержится число (0..447) кратное 3.
Требуется быстро разделить HL на 3 и результат умножить на 4.
HL=(HL/3)*4
Вид для печати
Нужна скоростная операция:
В HL содержится число (0..447) кратное 3.
Требуется быстро разделить HL на 3 и результат умножить на 4.
HL=(HL/3)*4
hl=hl*155h
так?
ага
12f*155=193 9b
447/3*4=254h
447*155h=253 6b
Ситуация какая... буфер для восстановление байта на экране занимает 3 байта буфера на байт экрана (word:adr, byte:data)
А процедура восстановления жрёт 4 байта на восстановление байта экрана... Нужно расчитать точку входа в процедуру по размеру буфера...
В HL у нас размер буфера.
округлять наверное :)
считает то правильно
Подумаю ещё, может чего оптимизирую.
Пример на асме есть? мне циклы нельзя городить в процедуре
а может будет достаточно ld l,h:ld h,a:inc hl
Не совсем понял, всё таки...
---------- Post added at 03:24 ---------- Previous post was at 02:45 ----------
Может задачу иначе поставить?
Вот процедура восстановления циклом:
Поскольку буфер заполняется командой PUSH, то конец буфера фикированный, а начало в HL.
C = конец буфера.
Тормозно, но работает. 4 байта не могу в буфере хранить, нет места.
Стеком выгодно делать, если цикл развернуть... Иначе видимо нет.Код:LD SP,HL ; HL = начало текущего буфера
RES_LN POP DE
DEC SP
POP AF
LD (DE),A
LD HL,#0000
ADD HL,SP
LD A,H
CP C
JP NZ,RES_LN
А чтобы развернуть, нужно расчитать точку входа :)
Код:RES_LN LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD A,(HL)
INC HL
LD (DE),A
LD A,H
CP C
JP NZ,RES_LN
может, посмотреть в сторону последовательности pop de:ldi
байты фона отдельно, адреса отдельно
?