Страница 1 из 1

ATmega16 проблема с ASM

Добавлено: Пн ноя 16, 2009 22:54:56
Diaborn
Здравствуйте! Появилась проблема - требуется перенести функцию с Атмеги на Пик. С пиком проблем нет, но я не могу понять, что делает ассемблерный код АТмеги )) Вот такая запись, даже с понятным комментарием)) но что он делает - непонятно абсолютно! (в компиляторе WinAVR хз какой версии, т.к. не я писал):

asm volatile (" .set R0,0 ; get register name" ) ;
asm volatile (" .set temp,16 ; get register name" ) ;
asm volatile (" .set mC1,17 ; get register name" ) ;


Сразу скажу - даташиты курил, гуглить гуглил, _http://asm-avr.narod.ru/ смотрел - ничего не нашел, что команда делает - присваивает значение переменной - понял, но у нее синтаксис не такой, и смущает комментарий - что "получение имени регистра". Но если так - то да, регистр R0 и temp есть, но регистра mC1 нету!! Что делает цифра после запятой, в десятичной системе, я так понимаю, т.к. AVR по умолчанию настроен вроде на десятичную систему?? Угробил целый день на выяснение этого дела. Помогите, может, кто знает или сам такой код писал?

Добавлено: Пн ноя 16, 2009 22:56:32
Diaborn
P.S. про директивы asm и volatile я знаю... )

Добавлено: Вт ноя 17, 2009 04:15:07
rime2000
asm volatile (" .set R0,0 ; get register name" ) ; присваивает переменной r0 значение 0
asm volatile (" .set temp,16 ; get register name" ) ; присваивает переменной temp значение 16
asm volatile (" .set mC1,17 ; get register name" ) ;присваивает переменной mC1 значение 17


Директива SET присваивает имени некоторое значение.

Добавлено: Вт ноя 17, 2009 09:03:30
GP1
прежде чем давать советы неплохо бы самому разобраться в вопросе
тут речь идет о создании переменных и привязки их к конкретному регистру, а не присвоение значения.

Добавлено: Вт ноя 17, 2009 09:38:56
Diaborn
GP1 писал(а):прежде чем давать советы неплохо бы самому разобраться в вопросе
тут речь идет о создании переменных и привязки их к конкретному регистру, а не присвоение значения.
Т.е. происходит так: инициализируется регистр R0 и в него заталкивается переменная 17, аналогично с temp, а mC1 просто создание переменной?

Добавлено: Вт ноя 17, 2009 09:43:27
GP1
нет, ни так.
создается указатель.
т.е. R0 будет указывать на яп с адресом 0, что в железе соответсвует регистру R0
temp будет указывать на яп с адресом 16
и т.д.
ни каких значений эта директива не присваивает.
если это облегчит понимание, то в "чистом" ASM AVR это будет выглядеть след. образом:

Код: Выделить всё

.def    R0=R0
.def    temp=R16
.def    mC1=R17

Добавлено: Вт ноя 17, 2009 10:09:22
Diaborn
GP1, спасибо Вам огромное! В "чистом" асме и из объяснения все понятно :beer: