|
asm. как организовать запись в ОЗУ со смещением?, нужно смещать данные для записи новых... |
|
|
|
Jan 17 2009, 23:59
|
Участник

Группа: Участник
Сообщений: 63
Регистрация: 14-01-09
Пользователь №: 43 345

|
Как в асме организовать смещение влево при записи в ОЗУ?
у меня пишется циклом с инкрементом по байту, начиная с адреса ОЗУ 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.
|
|
|
|
|
 |
Ответов
(1 - 7)
|
Jan 18 2009, 05:39
|
Местный
  
Группа: Свой
Сообщений: 256
Регистрация: 3-05-05
Из: г. Волжский
Пользователь №: 4 714

|
Нужно организовать еще один цикл, используя пару 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, где все байты переписываются со смещением по новой. И так повторяется. Конечно, все это можно оптимизировать до нескольких команд, но я специально сделал все вот так, чтобы было наглядно видно, что и как пересылается.
Сообщение отредактировал vvvv - Jan 18 2009, 05:40
|
|
|
|
|
Jan 18 2009, 09:07
|
Участник

Группа: Участник
Сообщений: 63
Регистрация: 14-01-09
Пользователь №: 43 345

|
vvvv- спасибо Цитата(_Pasha @ Jan 18 2009, 11:19)  Организуйте циклический буфер с раздельными указателями для чтения и записи. Размер буфера наверняка будет больше 6-ти байт. Паша, все бы ничего, но т.к. я начинающий, то я даже не представляю о чем вы сейчас сказали, пару примеров можно -поясняющих ваши предложения?
Сообщение отредактировал Alexeus - Jan 18 2009, 09:18
|
|
|
|
|
Jan 18 2009, 10:55
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Alexeus @ Jan 18 2009, 11:07)  Паша, все бы ничего, но т.к. я начинающий, то я даже не представляю о чем вы сейчас сказали Это факт. Но не аргумент. Поиск в гугле или даже яндексе дает кучу ссылок на ключевые слова "циклический буфер". Там вы найдете гораздо больше общей информации для ознакомления, чем _Pasha смог бы изложить тут при всем своем желании. Циклический буфер - одно из основных понятий программирования, как стек или список. На форуме вам могут помочь разобраться в деталях, но навряд-ли кто-нибудь захочет преподавать здесь основы, которые можно найти в сети буквально за 10 секунд.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 18 2009, 12:18
|
Участник

Группа: Участник
Сообщений: 63
Регистрация: 14-01-09
Пользователь №: 43 345

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

Группа: Участник
Сообщений: 63
Регистрация: 14-01-09
Пользователь №: 43 345

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