Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение zero648 »

Операнды здесь регистры, в регистр ah загружается значение регистра dh, т.е. после такой операции ah=dh.
Vendein_RaZoR
Сверлит текстолит когтями
Сообщения: 1158
Зарегистрирован: Ср июн 22, 2011 21:14:17
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Vendein_RaZoR »

Упс , я с адресами спутал , забыл что 0 должен быть перед буквой :))
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение zero648 »

Даже, если перед dh поставить 0, то все равно значение 0dh загружается регистр ah, а не по адресу со смещением ah
Аватара пользователя
bfgroup
Родился
Сообщения: 10
Зарегистрирован: Чт ноя 17, 2011 11:06:55
Откуда: Novosibirsk

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение bfgroup »

коты, поясните по-хардкору. пытаюсь разобраться в языке ассемблера для AVR. читаю учебник Ревича, и есть там такой код:

push var_1 ;переменная var_1 в программе помещается в стек
push var_2 ;переменная var_2 в программе помещается в стек
rcall procedure ;вызывается процедура
pop var_2 ;после нее результат извлекается из стека
pop var_1 ;второй результат извлекается из стека
. . . . . .
procedure: ;в процедуре извлекается локальная
pop var_loc2 ;переменная var_loc2 со значением var_2
pop var_locl ;и переменная var_loc1 со значением var_1
. . . . . . . ;расчеты, расчеты...
push var_loc1 ;результат — в стек
push var_loc2 ;результат — в стек
ret ;возврат из процедуры

и я не догоняю, когда мы в процедуре первый раз извлекаем что-то из стека, почему это "что-то" равно var_2 ???? ведь последним в стек был занесён адрес следующей после rcall комманды, разве не так??
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

Стек, по сути, похож на обойму пистолета. Который патрон последним засунул, тот первым и достанешь.

Хотя они разные бывают... FIFO (First In, First Out), LIFO (Last In, First Out) - тут именно он
Аватара пользователя
bfgroup
Родился
Сообщения: 10
Зарегистрирован: Чт ноя 17, 2011 11:06:55
Откуда: Novosibirsk

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение bfgroup »

да да, я вкурсе

"первый вошёл-- последний вышел" :)

вы не поняли моего вопроса. в указаном примере, последним в стеке оказался адрес следующей после rcall комманды, мы же не только переменные храним в стеке, но и адреса для счётчика программ, дабы организовать возможность возврата из подпрограмм. но как МК различает где адреса, а где переменные в стеке это мне решительно не понятно!
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Alexeyslav »

Оно и правда не равно, там первым будет адрес возврата... он наверняка сохраняется где-то еще до того как вызывается первый POP... или этот код дан только для того чтобы понять суть. Примеры не обязаны быть безошибочными.
Аватара пользователя
bfgroup
Родился
Сообщения: 10
Зарегистрирован: Чт ноя 17, 2011 11:06:55
Откуда: Novosibirsk

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение bfgroup »

Alexeyslav писал(а):Оно и правда не равно, там первым будет адрес возврата... он наверняка сохраняется где-то еще до того как вызывается первый POP... или этот код дан только для того чтобы понять суть. Примеры не обязаны быть безошибочными.


самое интересное, что автор пишет: "Механизм организации локальных переменных с помощью стека иллюстрирует листинг 13.2 (он в точности такой же, как это происходит при компиляции в "настоящих" языках программирования)." и затем приводит этот код.

а, вообще, Юрий Всеволодович как учитель великолепен-- я третий день его книжку читаю, а уже успел семисегментник закрутить сам на асме :)) до этого с машинными языками дела не имел. боялся я машинных языков.

так значит в примере ошибка??
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Alexeyslav »

Смотря с какой стороны на эту "ошибку" смотреть... с точки зрения практики - ошибка имеется, и довольно грубая... (интересно куда выкинет инструкция RET после всех этих манипуляций) но для иллюстрации - то что надо. Именно приведенный Вами код ошибок не содержит! Все зависит от содержимого подпрограммы, может оно так умело жонглирует стеком, что адрес возврата аккуратненько поднимается и затем ложится на место. Это может быть определено директивой или в виде макроса, который скрыт от глаз а в коде процедуры в начале и в конце всего одна строчка которая делает всю "грязную" работу.
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение avreal »

Если перед ним написано «вот пример для некоторого воображамеого процессора», то ошибки нет.

По умолчанию в книге по AVR все примеры для AVR, и тогда тут ошибки.
Были бы макросы/директивы, они были бы приведены.

Вот если бы я в теме про квадратный корень из 32-битных чисел на асме AVR привёл пример:

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

    ldq R47, var1
    sqrt R47
    stq R47, var2
Что бы мне сказали форумчане? Я бы не отмазался тем, что это у меня такие макросы и для иллюстрации я всё классно написал :-)
А ответственность книгописателя (должна быть) повыше, чем нафорумеписателя.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Jack_A »

Для приема/передачи параметров через стек можно таким путем :

subor:
push ZL
push ZH
in ZL,SPL
in ZH,SPH
ldd tmp1,z+5
ldd tmp2,z+6

; тут обработка

std z+6,tmp2
std z+5,tmp1
pop ZH
pop ZL
ret
Регистры tmp1,tmp2 само собой, портятся. Если это нежелательно, их надо сохранять в стеке тоже, при этом смещения в z+? будут, конечно, другие. Но, как видим, геморра много, потому передача через стек, я думаю, не самая эффективная в данном случае. Я предпочитаю для таких целей держать свободный указатель и через него адресую нужные параметры.

А книгописателю ( в отличие от нас ) за енто деньги плотють, и если по его творениям что-нить сгорит, по репе настучать могут :)
Аватара пользователя
shads
Опытный кот
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение shads »

А вообще..... зачем параметры передают через стек? Я не первое десятилетие асму юзаю, никогда так не делал..... Чтоли только если памяти основной не хватает? Или еще причины есть какие.....?
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ILYAUL »

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

   
ret

Например такая команда , может запросто перенаправить программу по совершенно иному руслу при этом не вызвав коллизий всей программы . И кстати иногда способствует сохранению большого куска FLASH - например в подпрограммах MENU. И вот тут то и используют стек.
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ChipKiller »

shads писал(а):А вообще..... зачем параметры передают через стек?
.. причины бывают разные - например связь с С-программой. Стек удобен тем что нет привязки к регистрам ( кроме sp конечно :) ) и памяти, ну и локальные переменные в функции организовать.
ЗЫ. самое главное не забыть восстановить вершину стека при выходе из процедуры, иначе "сюрпризы" обеспечены
juzik
Встал на лапы
Сообщения: 128
Зарегистрирован: Пт сен 23, 2011 23:49:20
Откуда: Симферополь, Украина

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение juzik »

ploop писал(а):Хотя они разные бывают... FIFO (First In, First Out), LIFO (Last In, First Out) - тут именно он

FIFO - это очередь (как в магазин за хлебом), не стэк
LIFO - это стэк
Аватара пользователя
КотЭ Мужчина
Открыл глаза
Сообщения: 64
Зарегистрирован: Ср июн 20, 2012 10:49:46
Откуда: Україна, Черкаська область
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение КотЭ Мужчина »

Здравствуйте, вопрос есть. Как в асме зделать задержку то есть как написать мигалку на светоидиотах? Какие команды использовать и в каком порядке? Данке.
Betelgeuse
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15545
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение BOB51 »

да вообщем как угодно - хош программными средствами, хош аппаратными, а то и то и другое вместе... :)
вообще-то под конкретную схемку и задачу делается проще :tea:
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение pyzhman »

BOB51 хотел сказать либо выполнением холостых команд в цикле, либо используя железный таймер(предварительно настроив его), либо все в куче.
Docendo discimus
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение zero648 »

Железная мигалка попроще будет
Вложения
мигалка.JPG
(87.61 КБ) 375 скачиваний
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Alexeyslav »

Деталей у нее много...
Ответить

Вернуться в «AVR»