PDA

Просмотр полной версии : Использование команд RLD и RRD



AndTorp
10.08.2009, 14:27
Потихоньку осваиваю ассемблер. Просматриваю коды программ. Не могу найти примеры использования команд циклического переноса - RLD и RRD.
Для каких целей их можно использовать?

Vitamin
10.08.2009, 16:48
Для каких целей их можно использовать?
Для фаллометрических. Типа "а я знаю, как работают эти команды!" :)

GM BIT
10.08.2009, 17:02
Для каких целей их можно использовать?
RLD (HL) можно использовать для бегущих строчек со скоростью в 4 пиксела. А RLD в чистом виде 100% постом выше :)

SAM style
10.08.2009, 18:39
Я вот сегодня пакер с использованием полубайтов сделал - в память они пихаются как раз через RLD.

Paul_ls
11.08.2009, 13:36
Эти команды используются для работы с двоично-десятичной арифметикой в упакованном формате. В этом виде байт содержит 2 десятичные цифры. Так вот, эти команды позволяют работать с цифрами отдельно. Это по прямому назначению. По прикладному - организация сдвига на 4 бита в битовом массиве.

tiboh
11.08.2009, 20:17
Процедура печати 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

drbars
18.08.2009, 10:51
Процедура печати 64-х символов в строке, с использованием RLD
имхо, только как пример хороша. по скорости не очень оптимально.

Faster
09.06.2010, 23:46
Потихоньку осваиваю ассемблер. Просматриваю коды программ. Не могу найти примеры использования команд циклического переноса - RLD и RRD.
Для каких целей их можно использовать?

Вставлю и я свои пять копеек. :) Вот быстрая и короткая процедура вычисления следующего трека (перепрыгивание на заданное количество секторов в диапазоне 0-240) с использованием RLD:



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
По аналогии можно использовать RRD немного изменив алгоритм. ;)

Slider
09.06.2010, 23:57
Для фаллометрических
: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

Faster
10.06.2010, 00:18
Ну не в курсе, твоя, мож, и быстрая, но стандартная, имхо, короче. И диапазон пошире ;)

Короче на 1 байт... :) Я ее писал для собственных нужд, меня вполне устраивает данный диапазон, к тому же я ее здесь привел чисто как пример использования RLD/RRD. п.с. Если уж речь зашла о ширине диапазона, то у меня в запасе есть процедура работающая с диапазоном в 65520 секторов.. ;)

Shadow Maker
10.06.2010, 00:53
Faster, ты в своей процедуре ничего не пропустил случаем?


LD HL,BUF
LD (HL),A

А из (HL) потом ничего не извлекается?

Faster
10.06.2010, 01:03
Faster, ты в своей процедуре ничего не пропустил случаем?

А из (HL) потом ничего не извлекается?

Нет ;)

Slider
10.06.2010, 21:39
у меня в запасе есть процедура работающая с диапазоном в 65520 секторов.. ;)
Хоть и оффтоп, но - давай!!!

Faster
10.06.2010, 23:13
Написал в личку.:v2_wink2:

Faster
28.03.2013, 09:24
у меня в запасе есть процедура работающая с диапазоном в 65520 секторов.

Оптимизировал и ускорил процедуру, также применив команду RLD.



IN: LD DE,текущий_трек/сектор
LD BC,количество_перепрыгиваем ых_секторов

OUT: DE = новые_трек/сектор

LD HL,BUF
LD A,C
ADD A,E
LD (HL),A
AND #F
LD E,A
RLD
LD (HL),B
RLD
OR (HL)
ADD A,D
LD D,A
RET

BUF DB 0