Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: asm. как организовать запись в ОЗУ со смещением?
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Alexeus
Как в асме организовать смещение влево при записи в ОЗУ?

у меня пишется циклом с инкрементом по байту, начиная с адреса ОЗУ 0х200, стоит счетчик на ораничение записи в 6 байт- потом обнуляю регистровую пару с адресом ОЗУ и запись снова начинается с адреса 0х200.

А нужно, что бы по достижению 6го байта все данные смещались влево и следующий байт писался на место 6го и так циклично...

кто знает- подскажите пожалуйста.

Obnulenie:
ldi YL,0x00
ldi YH,0x02
ldi R17,0

Write_in_RAM:
st Y+,R16
inc R17
cpi R17,6
breq Obnulenie
.... тут иду на получение новых данных
jmp Write_in_RAM

Модератор. Давать заголовки и составлять сообщения нужно с умом. О каком именно МК и ASM здесь вопрошается? Переместил сообщение в предположении, что речь идет об AVR.
vvvv
Нужно организовать еще один цикл, используя пару ZH,ZL, для смещения данных в памяти:
Obnulenie:
ldi YL,0x00
ldi YH,0x02
ldi R17,0

Write_in_RAM:
st Y+,R16
inc R17
cpi R17,6
breq Work_Cycle
jmp Write_in_RAM

Work_Cycle:
ldi YL,0x00
ldi YH,0x02
ldi ZL,0x01
ldi ZH,0x02
ldi R17,0
Copy_Cycle:
ld R16,Z+
st Y+,R16
inc R17
cpi R17,5
breq Next_Byte
jmp Copy_Cycle
Next_Byte:
ldi R16,New_Value
st Y+,R16
jmp Work_Cycle

Идея в чем, сначала идет Ваш цикл, который заполняет все шесть байт, затем идет Work_Cycle, в котором сначала переписываются байты
в памяти 0x200...0x205 при помощи двух пар регистров адреса Y и Z, первый байт пишется на место нулевого, второй на место первого
и т.д. пять раз, после чего идет переход на Next_Byte, где в регистр R16 пишется новое значение непосредственно. Я не знаю, откуда
Вы его будете брать, поэтому взял непосредственное присвоение. И после этого, новое значение пишется в шестой байт, потому что
Y к этому моменту как раз будет адресовать именно его. Далее идет переход на Work_Cycle, где все байты переписываются со смещением
по новой. И так повторяется. Конечно, все это можно оптимизировать до нескольких команд, но я специально сделал все вот так, чтобы
было наглядно видно, что и как пересылается.
_Pasha
Организуйте циклический буфер с раздельными указателями для чтения и записи. Размер буфера наверняка будет больше 6-ти байт. 
Alexeus
vvvv- спасибо


Цитата(_Pasha @ Jan 18 2009, 11:19) *
Организуйте циклический буфер с раздельными указателями для чтения и записи. Размер буфера наверняка будет больше 6-ти байт. 


Паша, все бы ничего, но т.к. я начинающий, то я даже не представляю о чем вы сейчас сказали, пару примеров можно -поясняющих ваши предложения? smile.gif
Сергей Борщ
Цитата(Alexeus @ Jan 18 2009, 11:07) *
Паша, все бы ничего, но т.к. я начинающий, то я даже не представляю о чем вы сейчас сказали
Это факт. Но не аргумент. Поиск в гугле или даже яндексе дает кучу ссылок на ключевые слова "циклический буфер". Там вы найдете гораздо больше общей информации для ознакомления, чем _Pasha смог бы изложить тут при всем своем желании. Циклический буфер - одно из основных понятий программирования, как стек или список. На форуме вам могут помочь разобраться в деталях, но навряд-ли кто-нибудь захочет преподавать здесь основы, которые можно найти в сети буквально за 10 секунд.
Alexeus
Цитата(Сергей Борщ @ Jan 18 2009, 13:55) *
Это факт. Но не аргумент. Поиск в гугле или даже яндексе дает кучу ссылок на ключевые слова "циклический буфер". Там вы найдете гораздо больше общей информации для ознакомления, чем _Pasha смог бы изложить тут при всем своем желании. Циклический буфер - одно из основных понятий программирования, как стек или список. На форуме вам могут помочь разобраться в деталях, но навряд-ли кто-нибудь захочет преподавать здесь основы, которые можно найти в сети буквально за 10 секунд.


аа, я не в курсе был что это общепринятое понятие, думал Паша обозвал просто своими словами какую то процедуру, поищу спасибо...
_Pasha
Цитата(Alexeus @ Jan 18 2009, 15:18) *
думал Паша обозвал просто своими словами какую то процедуру

Если что, ответьте - Вам по скорости надо самое супербыстрое исполнение кода, или не обязательно? Если да - тут много людей дельных советов надают. Если нет - сами все найдете без проблем. smile.gif
Alexeus
Цитата(_Pasha @ Jan 18 2009, 15:56) *
Если что, ответьте - Вам по скорости надо самое супербыстрое исполнение кода, или не обязательно? Если да - тут много людей дельных советов надают. Если нет - сами все найдете без проблем. smile.gif


не супербыстрое.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.