20.10.2012, 10:21
|
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 94 раз(а) в 91 сообщении(ях)
|
Работа с массивом.
Здравствуйте.
Требуется изменять в памяти (из работающей программы) массив из 10-ти ячеек. Я так понимаю, что надо создать в дата сегменте что то такое:
Цитата:
|
.DSEG
massiv: .db 1,2,3,4,5,6,7,8,9,0
|
А вот как получить доступ к произвольной ячейке не могу нагуглить.
Подскажите пожалуйста.
AtMega-8, AVR Studio, ассемблер.
Последний раз редактировалось putmannn; 20.10.2012 в 13:17.
|
|
|
|
20.10.2012, 12:11
|
|
Гражданин KAZUS.RU
Регистрация: 13.06.2005
Адрес: РК г.Павлодар
Сообщений: 866
Сказал спасибо: 99
Сказали Спасибо 216 раз(а) в 140 сообщении(ях)
|
Re: Работа с массивом.
См. косвенная адресация, типа[massiv+n].
А вообще неплохо бы указать среду и камень.
__________________
Не ошибается лишь тот, кто ни чего не делает!
|
|
|
|
20.10.2012, 13:24
|
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 94 раз(а) в 91 сообщении(ях)
|
Re: Работа с массивом.
Полазал по инету, наверное понял.
Только в кодовом сегменте надо написать:
Цитата:
|
ldi ZL,Low(massiv*2)
|
, а в сегменте даты почему то без умножения на 2
Цитата:
|
ldi ZL,Low(massiv)
ldi ZH,High(massiv)
ld temp, Z
inc temp
st Z, temp
|
Так мы обращаемся к первой ячейке памяти.
А что бы обратиться к произвольной ячейке по её номеру, то как я понял надо просто прибавить индекс:
Цитата:
|
ldi temp, "номер элемента массива"
ldi temp2, 0
add ZL, temp
adc ZH, temp2
ld temp, Z
|
|
|
|
|
20.10.2012, 14:24
|
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 94 раз(а) в 91 сообщении(ях)
|
Re: Работа с массивом.
Проверил, всё работает, зря спрашивал.
И всё же может быть как то ещё можно ?
Последний раз редактировалось putmannn; 20.10.2012 в 14:37.
|
|
|
|
20.10.2012, 14:42
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Работа с массивом.
Сообщение от putmannn
|
И всё же может быть как то ещё можно ?
|
Конечно можно. Без напряжений. В любой размерности данных.
А с указателем еще красивее!
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
20.10.2012, 15:15
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,981
Сказал спасибо: 0
Сказали Спасибо 4,939 раз(а) в 2,369 сообщении(ях)
|
Re: Работа с массивом.
putmannn,
у АВР есть команды с авто- инкрементом и декрементом для чтения памяти (для случая с последовательным чтением/записью байтового массива) LD/ST Rd,Rr(X, Y, Z, X+, Y+, Z+, -X, -Y, -Z).
в озу организация байтовая, в флеш-памяти - слово 16бит, поэтому и разные обращения по адресу
|
|
|
|
20.10.2012, 23:46
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Работа с массивом.
Есть и команды со смещением, что позволяет работать с массивом более эффективно:
Код:
|
; единожды
ldi ZL,Low(massiv)
ldi ZH,High(massiv)
; сама работа
; нулевой элемент
ld temp, Z
inc temp
st Z, temp
; четвёртый элемент
ldd temp, Z+4
inc temp
std Z+4, temp |
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Маленькие шрифты массивом
|
MasterMushi |
Микроконтроллеры, АЦП, память и т.д |
2 |
29.11.2010 11:19 |
Дипломная работа
|
Multiplexor |
Поиск схем. Делимся схемами |
5 |
30.09.2010 11:38 |
Часовой пояс GMT +4, время: 01:17.
|
|