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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Коственно-регистровая адресация в асме....
Potter
сообщение Jan 24 2007, 21:26
Сообщение #1


Частый гость
**

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



Значит собственно вопрос вот в чем....

В азу находится два байта данных... Как мне их перенести в РОН используя коственно регистровую адресацию? И если не трудно в двух словах преимущества коственно регистровой адресации?

И еще маленький вопрос Как выглядит команда "ИСКЛЮЧАЮЩЕЕ ИЛИ" на асме?

Программировать мегу 16... Писать буду естественно в AVR-studio....

Заранее огромное спасибо за помощь........
Go to the top of the page
 
+Quote Post
Kovrov
сообщение Jan 24 2007, 21:59
Сообщение #2


Мастер-фломастер
****

Группа: Свой
Сообщений: 611
Регистрация: 29-12-05
Пользователь №: 12 700



Пересылка байта по адресу из озу
LDS R16,addr_ram
Теперь коссвенная адресация
адрес в регстровой паре
X,Y,Z
пример;
ldi xl,low(addr_ram)
ldi xh,high(addr_ram)
ld r16,x
;-------
Исключение или
есть команда
EOR Rxx,Rxx


--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
Go to the top of the page
 
+Quote Post
muravei
сообщение Jan 24 2007, 22:00
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Цитата(Potter @ Jan 24 2007, 21:26) *
В азу находится два байта данных... Как мне их перенести в РОН используя коственно регистровую адресацию? И если не трудно в двух словах преимущества коственно регистровой адресации?

Так:
clr r27 ; Clear X high byte
ldi r26,$60 ; Set X low byte to $60
ld r0,X+ ; Load r0 with data space loc. $60(X post inc)
ld r1,X ; Load r1 with data space loc. $61
Один раз загрузил регистр адресом и читай-пиши хоть всю память .

Цитата(Potter @ Jan 24 2007, 21:26) *
И еще маленький вопрос Как выглядит команда "ИСКЛЮЧАЮЩЕЕ ИЛИ" на асме?

Так:
eor r4,r4 ; Clear r4
eor r0,r22 ; Bitwise exclusive or between r0 and r22
Go to the top of the page
 
+Quote Post
bodja74
сообщение Jan 24 2007, 22:02
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



1 Запись в регистр 20 значения ячейки RAM адресс которой находится в регистре Z

ld R20,Z

2 Преимущества такой адрессации ,например так

ld R20,Z+

3 Исключающее ИЛИ

eor R20,R21

4 nix-06.nm.ru там есть таблица команд на асме на русском
Go to the top of the page
 
+Quote Post
Potter
сообщение Jan 24 2007, 22:25
Сообщение #5


Частый гость
**

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



Все понятно с командами.... Понятно как и что выполняется... Огромное спасибо.... Единственное что осталось не совсем мне ясно.... Зачем нужна вообще коственно-регистровая адресация? Почему не можно постоянно использовать прямую адресацию(ведь прямая проще....)? В чем преимущества коственно -регистровой?
Go to the top of the page
 
+Quote Post
Dopler
сообщение Jan 24 2007, 22:38
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Цитата(Potter @ Jan 24 2007, 22:25) *
Все понятно с командами.... Понятно как и что выполняется... Огромное спасибо.... Единственное что осталось не совсем мне ясно.... Зачем нужна вообще коственно-регистровая адресация? Почему не можно постоянно использовать прямую адресацию(ведь прямая проще....)? В чем преимущества коственно -регистровой?


При прямой адресации адрес ячейки ОЗУ записываестя непосредственно в код команды, соответсвенно команды прямой адресации занимают 4 байта в памяти программ вместо 2-х при косвенной.

При косвенной адресации возможен инкремент/декремент указателя ОЗУ, что очень сильно окупается при работе с массивами данных. Вот пример чтения массива из EEPROM (64 байт)

Код
    out     EEARH,     zero

EEPROM_read:    

    out     EEARL,     YL

    sbi     EECR,    EERE    
    in     tmp,    EEDR    
    st    Y+,    tmp

    cpi    YL,    64
    brne    EEPROM_read
Go to the top of the page
 
+Quote Post
Potter
сообщение Jan 24 2007, 22:52
Сообщение #7


Частый гость
**

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



Понятно.... Работа с массивами... Это допустим если в одном и томже месте надо обращаться к озу но адрес ячейки в озу может менятся.... Ясненько..... Огромное спасибо.......
Go to the top of the page
 
+Quote Post
CD_Eater
сообщение Jan 24 2007, 23:03
Сообщение #8


Частый гость
**

Группа: Новичок
Сообщений: 173
Регистрация: 3-09-04
Из: Moscow
Пользователь №: 595



Цитата(Potter @ Jan 24 2007, 22:25) *
Все понятно с командами.... Понятно как и что выполняется... Огромное спасибо.... Единственное что осталось не совсем мне ясно.... Зачем нужна вообще коственно-регистровая адресация? Почему не можно постоянно использовать прямую адресацию(ведь прямая проще....)? В чем преимущества коственно -регистровой?

Неужели Вы никогда писали программы с использованием циклом или подпрограмм ? Там преимущества очевидны.

По-моему, без косвенно-регистровой адресации МК не дотянет даже до машины Тьюринга smile.gif
То есть, машина с бесконечной памятью и набором инструкций как у МК, но без косвенной адресации не сможет реализовать любой алгоритм.
Go to the top of the page
 
+Quote Post
Potter
сообщение Jan 25 2007, 01:24
Сообщение #9


Частый гость
**

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



Дело в том.... Что я практически в совершенстве владею прагроммированием МК на С++. То есть я начал изучение программирования МК с программирования на языке С++. Теперь пришло время опустится немножечко ниже.... Т. е. я хочу разобраться как работет асемблер.... Я не знаю были вы ли в моей ситуации.... Но то что вам очевидно в асемблере мне для человека знающего только принцип програмирования на С все кажется далеко не таким протсым и очевидным.... Я думаю вы понимаете меня......
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 25 2007, 02:03
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



А ассемблер очень важен. Именно потому, что понимаешь как оно изнутри. Понимаешь, что такое массив, к примеру, и как, примерно, компилятор реализует твою конструкцию. Я как то не был бы так уверен в том, что "практически в совершенстве владею прагроммированием МК на С++". Хотя, признаю что уверенность в себе - великая вещь.

Ребята мне помогут если чего запамятовал или попутал. Существуют следующие виды адресации
регистровая
прямая (непосредственная)
косвенная (или относительная)
индексная
базовая

Ну и их модификации, - к примеру
базово-индексная

Из под i80x86 можно напрямую работать с небольшими трёх мерными массивами, хотя компилятор так не делает.

AVR имеет первые три вида.
1) mov r1,r2
2) ldi r16,33
3) ld r1,Z

плюс косвенная со смещением типа
ld r16,Z+5
и косвенная с автоинкрементом/автодекрементом типа
ld r16,Z+


В рамки видов адресации укладывается всё. Так например переход
rjmp PC+5 - есть просто сложение (прямая)
jmp 0x100 - есть простое занесение в PC (прямая)
ijmp - есть косвенная адресация регистра PC
pop r16 - косвенная адресация с автодекрементом относительно SP
Go to the top of the page
 
+Quote Post
Wild007
сообщение Jan 25 2007, 10:10
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672



Чуть-чуть smile.gif добавлю SasaVitebsk
Цитата
В рамки видов адресации укладывается всё. Так например переход
rjmp PC+5 - есть просто сложение (прямая)
jmp 0x100 - есть простое занесение в PC (прямая)
ijmp - есть косвенная адресация регистра PC
pop r16 - косвенная адресация с автодекрементом относительно SP

RJMP CONST -- безусловный относительный переход в пределах 2 кВ слов вперед или назад относительно текущего значения счетчика команд;
JMP CONST -- безусловный относительный переход в пределах 64 кВ;
IJMP, -- безусловный косвенный переход. Управление передается на адрес находящийся в регистровой паре Z;
PUSH\POP -- послать\достать регистр в\из стека.
Цитата
плюс косвенная со смещением типа
ld r16,Z+5
и косвенная с автоинкрементом/автодекрементом типа
ld r16,Z+

Еще есть команда очень удобная при работе с таблицами:
LPM пересылает в R0 байт памяти програм на который указывает регистровая пара Z
LPM Rd,Z+ -- пересылает в Rd байт памяти програм на который указывает регистровая пара Z с поседующим инкркментом Z
LPM Rd,Z -- пересылает в Rd байт памяти програм на который указывает регистровая пара Z без изменения Z


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jan 25 2007, 10:46
Сообщение #12


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

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
То есть я начал изучение программирования МК с программирования на языке С++. Теперь пришло время опустится немножечко ниже.... Т. е. я хочу разобраться как работет асемблер....

Ну возможно так и проще. Не зря говорят о С, как о продвинутом ассемблере. Многие вещи переносятся один к одному. Как собственно регистрово-косвенная адресация, которая в терминах С называется указателями и доступ к переменной по указателю так и транслируется в ld r, Z+. А вообще хороший способ врубится в асм - отключить в компиляторе оптимизацию, включить трансляцию в асм и посмотреть на получившися подстрочный перевод.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
muravei
сообщение Jan 25 2007, 10:52
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Цитата(Potter @ Jan 25 2007, 01:24) *
Теперь пришло время опустится немножечко ниже.... Т. е. я хочу разобраться как работет асемблер....

Можно далеко и не опускаться- я бы порекомендовал Algorithm Builder
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jan 25 2007, 11:08
Сообщение #14


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(Potter @ Jan 24 2007, 21:25) *
Зачем нужна вообще коственно-регистровая адресация? Почему не можно постоянно использовать прямую адресацию(ведь прямая проще....)? В чем преимущества коственно -регистровой?

Достаточно посмотреть листинг после компиляции с С или того же С++, чтобы убедиться насколько компактнее и быстрее получается код если применять косвенную адресацию.
При помощи этого типа адресации реализован метод оптимизации известный как "кластеризация переменных". В этом методе рядом расположенные переменные (в общем случае разных типов) рассматриваются как непрерывный массив (кластер) и доступ к ним организовывается косвенной адресацией с однократной установкой адреса начала кластера и дальнейшим доступом к переменным командами ldd/std. Преимущества этого метода перед lds/sts очевидны.
Фокус в том, что кластеризацию переменных полноценно может реализовать только компилятор, вручную писать таким образом чревато коварными ошибками, т. к. придётся опять же вручную отслеживать взаиморасположение переменных.
Go to the top of the page
 
+Quote Post
_Bill
сообщение Jan 25 2007, 12:20
Сообщение #15


Местный
***

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



Цитата(Potter @ Jan 25 2007, 01:24) *
Дело в том.... Что я практически в совершенстве владею прагроммированием МК на С++. То есть я начал изучение программирования МК с программирования на языке С++. Теперь пришло время опустится немножечко ниже.... Т. е. я хочу разобраться как работет асемблер.... Я не знаю были вы ли в моей ситуации.... Но то что вам очевидно в асемблере мне для человека знающего только принцип програмирования на С все кажется далеко не таким протсым и очевидным.... Я думаю вы понимаете меня......

Ну, я начинал с машинных кодов. Потом перешел на ассемблер, процессоры бывали разные. Потом Си, для I8080, PDP-11, .... До плюсплюснутого так и не поднялся.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 19:16
Рейтинг@Mail.ru


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