Страница 146 из 400
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт июл 24, 2012 12:18:17
zero648
Операнды здесь регистры, в регистр ah загружается значение регистра dh, т.е. после такой операции ah=dh.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт июл 24, 2012 13:52:35
Vendein_RaZoR
Упс , я с адресами спутал , забыл что 0 должен быть перед буквой

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт июл 24, 2012 14:14:18
zero648
Даже, если перед dh поставить 0, то все равно значение 0dh загружается регистр ah, а не по адресу со смещением ah
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср июл 25, 2012 09:52:35
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 комманды, разве не так??
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср июл 25, 2012 10:02:13
ploop
Стек, по сути, похож на обойму пистолета. Который патрон последним засунул, тот первым и достанешь.
Хотя они разные бывают... FIFO (First In, First Out), LIFO (Last In, First Out) - тут именно он
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср июл 25, 2012 10:16:40
bfgroup
да да, я вкурсе
"первый вошёл-- последний вышел"
вы не поняли моего вопроса. в указаном примере, последним в стеке оказался адрес следующей после rcall комманды, мы же не только переменные храним в стеке, но и адреса для счётчика программ, дабы организовать возможность возврата из подпрограмм. но как МК различает где адреса, а где переменные в стеке это мне решительно не понятно!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср июл 25, 2012 10:18:55
Alexeyslav
Оно и правда не равно, там первым будет адрес возврата... он наверняка сохраняется где-то еще до того как вызывается первый POP... или этот код дан только для того чтобы понять суть. Примеры не обязаны быть безошибочными.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср июл 25, 2012 10:33:06
bfgroup
Alexeyslav писал(а):Оно и правда не равно, там первым будет адрес возврата... он наверняка сохраняется где-то еще до того как вызывается первый POP... или этот код дан только для того чтобы понять суть. Примеры не обязаны быть безошибочными.
самое интересное, что автор пишет: "Механизм организации локальных переменных с помощью стека иллюстрирует листинг 13.2 (он в точности такой же, как это происходит при компиляции в "настоящих" языках программирования)." и затем приводит этот код.
а, вообще, Юрий Всеволодович как учитель великолепен-- я третий день его книжку читаю, а уже успел семисегментник закрутить сам на асме

до этого с машинными языками дела не имел. боялся я машинных языков.
так значит в примере ошибка??
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср июл 25, 2012 11:04:03
Alexeyslav
Смотря с какой стороны на эту "ошибку" смотреть... с точки зрения практики - ошибка имеется, и довольно грубая... (интересно куда выкинет инструкция RET после всех этих манипуляций) но для иллюстрации - то что надо. Именно приведенный Вами код ошибок не содержит! Все зависит от содержимого подпрограммы, может оно так умело жонглирует стеком, что адрес возврата аккуратненько поднимается и затем ложится на место. Это может быть определено директивой или в виде макроса, который скрыт от глаз а в коде процедуры в начале и в конце всего одна строчка которая делает всю "грязную" работу.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср июл 25, 2012 11:10:30
avreal
Если перед ним написано «вот пример для некоторого воображамеого процессора», то ошибки нет.
По умолчанию в книге по AVR все примеры для AVR, и тогда тут ошибки.
Были бы макросы/директивы, они были бы приведены.
Вот если бы я в теме про квадратный корень из 32-битных чисел на асме AVR привёл пример:
Что бы мне сказали форумчане? Я бы не отмазался тем, что это у меня такие макросы и для иллюстрации я всё классно написал

А ответственность книгописателя (должна быть) повыше, чем нафорумеписателя.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср июл 25, 2012 11:53:21
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+? будут, конечно, другие. Но, как видим, геморра много, потому передача через стек, я думаю, не самая эффективная в данном случае. Я предпочитаю для таких целей держать свободный указатель и через него адресую нужные параметры.
А книгописателю ( в отличие от нас ) за енто деньги плотють, и если по его творениям что-нить сгорит, по репе настучать могут

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср июл 25, 2012 12:18:09
shads
А вообще..... зачем параметры передают через стек? Я не первое десятилетие асму юзаю, никогда так не делал..... Чтоли только если памяти основной не хватает? Или еще причины есть какие.....?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср июл 25, 2012 12:28:35
ILYAUL
Например такая команда , может запросто перенаправить программу по совершенно иному руслу при этом не вызвав коллизий всей программы . И кстати иногда способствует сохранению большого куска FLASH - например в подпрограммах MENU. И вот тут то и используют стек.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср июл 25, 2012 16:39:01
ChipKiller
shads писал(а):А вообще..... зачем параметры передают через стек?
.. причины бывают разные - например связь с С-программой. Стек удобен тем что нет привязки к регистрам ( кроме sp конечно

) и памяти, ну и локальные переменные в функции организовать.
ЗЫ. самое главное не забыть восстановить вершину стека при выходе из процедуры, иначе "сюрпризы" обеспечены
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт июл 27, 2012 12:19:20
juzik
ploop писал(а):Хотя они разные бывают... FIFO (First In, First Out), LIFO (Last In, First Out) - тут именно он
FIFO - это очередь (как в магазин за хлебом), не стэк
LIFO - это стэк
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс июл 29, 2012 13:09:55
КотЭ Мужчина
Здравствуйте, вопрос есть. Как в асме зделать задержку то есть как написать мигалку на светоидиотах? Какие команды использовать и в каком порядке? Данке.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс июл 29, 2012 13:15:27
BOB51
да вообщем как угодно - хош программными средствами, хош аппаратными, а то и то и другое вместе...
вообще-то под конкретную схемку и задачу делается проще

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс июл 29, 2012 13:18:53
pyzhman
BOB51 хотел сказать либо выполнением холостых команд в цикле, либо используя железный таймер(предварительно настроив его), либо все в куче.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс июл 29, 2012 14:18:58
zero648
Железная мигалка попроще будет
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс июл 29, 2012 14:41:18
Alexeyslav
Деталей у нее много...