Потихоньку осваиваю ассемблер. Просматриваю коды программ. Не могу найти примеры использования команд циклического переноса - RLD и RRD.
Для каких целей их можно использовать?
Вид для печати
Потихоньку осваиваю ассемблер. Просматриваю коды программ. Не могу найти примеры использования команд циклического переноса - RLD и RRD.
Для каких целей их можно использовать?
Я вот сегодня пакер с использованием полубайтов сделал - в память они пихаются как раз через RLD.
Эти команды используются для работы с двоично-десятичной арифметикой в упакованном формате. В этом виде байт содержит 2 десятичные цифры. Так вот, эти команды позволяют работать с цифрами отдельно. Это по прямому назначению. По прикладному - организация сдвига на 4 бита в битовом массиве.
Процедура печати 64-х символов в строке, с использованием RLD
FONT EQU #6000;АДРЕС ШРИФТА НА 64 СИМВОЛА В СТРОКЕ
ORG #8000
LD HL,#4000;АДРЕС ЭКРАНА
LD DE,TEXT;АДРЕС ТЕКСТА
START LD A,(DE)
INC DE
OR A
RET Z
LD C,A
LD A,(DE)
INC DE
PUSH AF
PUSH HL
PUSH DE
LD E,A
LD B,FONT/256
LD D,B
LD A,(BC)
LD (HL),A
LD A,(DE)
RLD
INC H
INC D
INC B
LD A,B
CP FONT/256+8
JR NZ,$-11
POP DE
POP HL
POP AF
INC L
OR A
JR NZ,START
RET
Вставлю и я свои пять копеек. :) Вот быстрая и короткая процедура вычисления следующего трека (перепрыгивание на заданное количество секторов в диапазоне 0-240) с использованием RLD:
По аналогии можно использовать RRD немного изменив алгоритм. ;)Код:IN: LD DE,текущий_трек/сектор
LD A,количество_перепрыгиваемых_секторов
OUT: DE = новые_трек/сектор
LD HL,BUF
ADD A,E
LD (HL),A
AND #F
LD E,A
RLD
ADD A,D
LD D,A
RET
BUF DB 0
:v2_lol:
---------- Post added at 22:57 ---------- Previous post was at 22:53 ----------
Ну не в курсе, твоя, мож, и быстрая, но стандартная, имхо, короче. И диапазон пошире ;)
ld de,nnnn
ld b,n
m1 inc e
ld a,e
cp 16
jr c,m2
inc d
ld e,0
m2 djnz m1
ret
Короче на 1 байт... :) Я ее писал для собственных нужд, меня вполне устраивает данный диапазон, к тому же я ее здесь привел чисто как пример использования RLD/RRD. п.с. Если уж речь зашла о ширине диапазона, то у меня в запасе есть процедура работающая с диапазоном в 65520 секторов.. ;)Цитата:
Ну не в курсе, твоя, мож, и быстрая, но стандартная, имхо, короче. И диапазон пошире ;)