реклама на сайте
подробности

 
 
> Работа с опреативной памятью в AVR ASM
HoboTech
сообщение Jan 18 2011, 09:56
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 27-09-10
Из: Харьков
Пользователь №: 59 762



Здравствуйте, так получилось, что на C/С++ для АВРов начал писать раньше, чем на АСМе. Теперь не совсем понятно как корректно работать с переменными в SRAM.
Если на С задачу копирования адреса я решал так:
Код
unsigned char *ptr1, *ptr2;

ptr2 = ptr1;


и копирование значения (как вариант):
Код
unsigned char *ptr1, *ptr2;

*ptr2 = *ptr1;


то как такие задачи решаются на АСМе?

если написан следующий код:
Код
Tmp1:  .byte 1
Tmp2:  .byte 1

.....

lds r16,SPDR ;для примера взят регистр SPI
st Z+,r16

lds Tmp1,ZH
lds Tmp2,ZL


то что значат последние две строки кода: что я копирую значения старшего и младшего байтов регистра Z или что я копирую новый адрес ячейки памяти, на которую указывает Z после постинкремента?
Вобщем хотелось бы знать как в АСМе скопировать адрес и как скопировать значение.

Надеюсь корректно описал вопрос.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
HoboTech
сообщение Jan 21 2011, 11:19
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 27-09-10
Из: Харьков
Пользователь №: 59 762



И все таки туго что-то до меня доходит работа с адресами...
что означает следующий код:
Код
.DSEG
tmp: .byte 1

...

lds ZL,tmp

что я заношу в регистр ZL значение байта, который находился в памяти по адресу tmp или что я записываю значение младшего байта самого адреса? sad.gif
Go to the top of the page
 
+Quote Post
_Bill
сообщение Jan 22 2011, 06:06
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(HoboTech @ Jan 21 2011, 15:19) *
И все таки туго что-то до меня доходит работа с адресами...
что означает следующий код:
Код
.DSEG
tmp: .byte 1

...

lds ZL,tmp

что я заношу в регистр ZL значение байта, который находился в памяти по адресу tmp или что я записываю значение младшего байта самого адреса? sad.gif

В регистр ZL загружается содержимое ячейки памяти с адресом tmp. Если вы хотите загрузить в ZL адрес ячейки, используйте команду LDI. Все ваши проблемы возникают от того, что вы путаете различные методы адресации. В ассемблере AVR различные методы адресации определяются с помощью различных мнемоник.
Код
    ldi   r16, 5    ; Непосредственная (immediate) адресация - загрузка числа 5
    lds  r16, 5        ; Прямая (direct) адресация - загрузка в регистр r16 содержимого ячейки по адресу 5
    ld    r16, Z    ; Косвенная (indirect) адресация - загрузка в регистр r16 через указатель Z
    ld    r16, Z+     ; Автоинкрементная (post increment) адресация через указатель Z
    ld    r16, Z-      ; Автодекрементная (pre decrement) адресация через указатель Z
    ldd  r16, z+5    ;  Косвенная со смещением (inditect with displscement) адресация через указатель Z
                        ; адрес ячейки памяти определяется как сумма содержимого указателя Z и числа 5

Надеюсь, что немного прояснил ситуацию. Или нет?

Сообщение отредактировал _Bill - Jan 22 2011, 06:07
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jan 24 2011, 11:08
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(_Bill @ Jan 22 2011, 09:06) *
В регистр ZL загружается содержимое ячейки памяти с адресом tmp. Если вы хотите загрузить в ZL адрес ячейки, используйте команду LDI. Все ваши проблемы возникают от того, что вы путаете различные методы адресации. В ассемблере AVR различные методы адресации определяются с помощью различных мнемоник.
Код
        ld    r16, Z-    ; Автодекрементная (pre decrement) адресация через указатель Z
Просто правка  LD R16 ,-Z


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- HoboTech   Работа с опреативной памятью в AVR ASM   Jan 18 2011, 09:56
- - ILYAUL   Кодlds Tmp1,ZH lds Tmp2,ZL Вы считывете в Tmp1- зн...   Jan 18 2011, 10:38
|- - HoboTech   Цитата(ILYAUL @ Jan 18 2011, 12:38) Вы сч...   Jan 18 2011, 11:52
- - ILYAUL   Что бы понять до конца задачу - прерывания идут ...   Jan 18 2011, 13:17
|- - HoboTech   Цитата(ILYAUL @ Jan 18 2011, 15:17) Что б...   Jan 18 2011, 13:51
- - ILYAUL   Код.def R16,temp .def R17,count .def R4,SaveSREG ....   Jan 18 2011, 15:02
|- - HoboTech   Я так понял Ваш код будет работать только в случае...   Jan 18 2011, 15:39
|- - Дмитрий Ветра   Цитата(HoboTech @ Jan 18 2011, 17:39) Я т...   Jan 18 2011, 16:31
||- - HoboTech   Цитата(Дмитрий Ветра @ Jan 18 2011, 18:31...   Jan 18 2011, 17:04
|- - ILYAUL   Цитата(HoboTech @ Jan 18 2011, 18:39) Я т...   Jan 18 2011, 17:26
|- - HoboTech   Про lds и ldi я понял, спасибо. Не понял что именн...   Jan 24 2011, 08:42
||- - _Pasha   Цитата(HoboTech @ Jan 24 2011, 12:42) P.S...   Jan 24 2011, 09:20
||- - demiurg_spb   Цитата(HoboTech @ Jan 24 2011, 11:42) Не ...   Jan 24 2011, 09:57
||- - _Bill   Цитата(HoboTech @ Jan 24 2011, 12:42) Про...   Jan 24 2011, 12:35
- - V_G   Это вы байт загружаете. Адрес - другой командой (д...   Jan 21 2011, 12:22
|- - ILYAUL   Цитата(V_G @ Jan 21 2011, 15:22) Это вы б...   Jan 21 2011, 13:26
- - V_G   Как это в SRAM? LDS - загрузка ИЗ SRAM в регистр (...   Jan 21 2011, 13:50
|- - ILYAUL   Цитата(V_G @ Jan 21 2011, 16:50) Как это ...   Jan 21 2011, 14:28
- - ILYAUL   Можно , так же открыть Ефремова . Почитать главу ...   Jan 24 2011, 13:42
- - HoboTech   Спасибо за ответы. Еще почитаю, наверняка возникну...   Jan 24 2011, 14:06
- - нечитатель   Не считая полезным занятием переписывание собствен...   Jan 26 2011, 00:54
|- - _Bill   Цитата(нечитатель @ Jan 26 2011, 04:54) Н...   Jan 26 2011, 04:02
|- - V_G   Цитата(нечитатель @ Jan 26 2011, 10:54) е...   Jan 26 2011, 05:01
|- - OlegNZH   Цитата(нечитатель @ Jan 26 2011, 03:54) В...   Jan 26 2011, 05:04
||- - _Bill   Цитата(OlegNZH @ Jan 26 2011, 09:04) ну ...   Jan 26 2011, 05:46
||- - OlegNZH   Цитата(_Bill @ Jan 26 2011, 08:46) Ну, во...   Jan 26 2011, 06:02
||- - _Bill   Цитата(OlegNZH @ Jan 26 2011, 10:02) Вооб...   Jan 26 2011, 06:12
||- - ILYAUL   Цитата(OlegNZH @ Jan 26 2011, 09:02) Вооб...   Jan 26 2011, 06:15
|- - _Pasha   Цитата(нечитатель @ Jan 26 2011, 03:54) п...   Jan 26 2011, 06:53
||- - _Bill   Цитата(_Pasha @ Jan 26 2011, 10:53) Это б...   Jan 26 2011, 06:57
||- - нечитатель   Цитата(_Pasha @ Jan 26 2011, 09:53) Это б...   Jan 26 2011, 19:52
||- - _Pasha   Цитата(нечитатель @ Jan 26 2011, 23:52) С...   Jan 27 2011, 04:32
||- - OlegNZH   Цитата(_Pasha @ Jan 27 2011, 07:32) Первы...   Jan 27 2011, 09:19
|- - OlegNZH   Bill Да причём тут целостность инструкции! Уж...   Jan 26 2011, 07:13
|- - _Bill   Цитата(OlegNZH @ Jan 26 2011, 11:13) Bill...   Jan 26 2011, 07:15
||- - OlegNZH   Цитата(_Bill @ Jan 26 2011, 10:15) Что зн...   Jan 26 2011, 07:44
|- - ILYAUL   Цитата(OlegNZH @ Jan 26 2011, 10:13) Bill...   Jan 26 2011, 07:49
- - OlegNZH   О,господи..... Вы мой пост #27 прочитайте. (и #26 ...   Jan 26 2011, 08:31
- - _Bill   Цитата(OlegNZH @ Jan 26 2011, 12:31) О,го...   Jan 26 2011, 09:51
- - ILYAUL   Цитата(OlegNZH @ Jan 26 2011, 11:31) О,го...   Jan 26 2011, 13:01


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 07:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01413 секунд с 7
ELECTRONIX ©2004-2016