Прошу прощения, можно за комментировать
Re: Прошу прощения, можно за комментировать
Нет
есть еще немного ,то что не впихнул, так как смысла просто не видел
если с одним помогут разобраться то там так же
- Реклама
- SubDia
- Держит паяльник хвостом
- Сообщения: 995
- Зарегистрирован: Сб апр 02, 2011 17:59:22
- Откуда: Город-герой Севастополь
Re: Прошу прощения, можно за комментировать
Ясно. Ну в том куске, о котором спрашивалось выше, все просто.
Короче говоря, подпрограмма небольшой задержки. Правда, неясно - чего творит подпрограмма w20ms (но я подозреваю, что ее название расшифровывается как wait 20 ms
). BRNE - команда проверки бита нулевого значения в регистре статуса (если "0" - переход).
Код: Выделить всё
PUSH R16 ;задвигаем содержимое R16 в стек
LDI R16,50 ;записываем в R16 число
V4:
RCALL w20ms ;относительный вызов подпрограммы w20ms
DEC R16 ;уменьшаем R16
BRNE V4 ;условный относительный переход, "сравнение" R16 с нулем
POP R16 ;вытаскиваем из стека содержимое R16 взад
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

Re: Прошу прощения, можно за комментировать
Спасибо большое
Я чуток попожже попробую написать оставшиеся и скинуть то что закоментировал, просмотрите и надеюсь скажите как вышло) щас сижу с книгой сижу и читаю что и как, все же ассемблер не мой язык 
Re: Прошу прощения, можно за комментировать
Точнее, задержки в 1 с путем 50-кратного повторения подпрограммы 20-мс задержки.SubDia писал(а): Короче говоря, подпрограмма небольшой задержки.
- Реклама
- SubDia
- Держит паяльник хвостом
- Сообщения: 995
- Зарегистрирован: Сб апр 02, 2011 17:59:22
- Откуда: Город-герой Севастополь
Re: Прошу прощения, можно за комментировать
Оу, прошу прощения - в моем предыдущем посте ошибка вот здесь:
Командой IN записываем состояние порта С в регистр R17. Командой ANDI выполняем операцию логического И содержимого регистра R17 с числом 0x02(0b00000010) - в результате, если в регистре R17 в единицу установлен первый бит (я начинаю отсчет с нуля, такова привычка), то он и останется установленным, а если в R17 - нули, то результатом R17&&0x02 будет абсолютный ноль. Далее командой BREQ осуществляется условный относительный переход по метке, если число 0x02 и содержимое регистра R17 равны между собой. Очевидно, к выводу 1 порта С подключена или кнопка или еще какая другая хрень, способная давать высокий уровень. Переход - по нажатию кнопки (или любому другому условию, создающему высокий уровень на первой ноге порта).
Я имел в виду если не ноль, то переход.BRNE - команда проверки бита нулевого значения в регистре статуса (если "0" - переход).
А breq - обратная команда (branch if equal). В коде я ее увидел в одном месте, вот здесь:а BREQ что в моем случае делае больше ничего не делает и какие числа он сравнивает ?
Код: Выделить всё
IN R17, pinc ;
ANDI R17, 0x02
BREQ led
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

- SubDia
- Держит паяльник хвостом
- Сообщения: 995
- Зарегистрирован: Сб апр 02, 2011 17:59:22
- Откуда: Город-герой Севастополь
Re:
Ну вот, писал-писал сообщение, а Вы вопрос изменили.Masredis писал(а):извиняюсь )куда содержимое из стека помещается ? в какой именно задPOP R16
Стек вообще используется для хранения временных данных. Вы видите, что перед началом работы с подпрограммой V4 мы записали содержимое R16 в стек, дабы можно было поработать с регистром? После окончания работы с R16 нам нужно вернуть его содержимое назад из стека, дабы вернуться из подпрограммы wls с неизменным содержимым R16 (не смотрел, что там такое важное в нем сидит, но не суть - это зачем-то нужно, значит нужно). Вот командой POP мы и записываем сохраненные ранее в стеке данные обратно в R16. Все просто.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: Прошу прощения, можно за комментировать
Блеск!testerplus писал(а):PUSH - Команда применяется для нажима на регистр (например PUSH R16 - нажать на регистр r16)
RCALL - relative subroutine call - позвать родственную подпрограмму
DEC - (от decimal) первести регистр в десятичную систему (и почему там decrement в коментарии?)
POP - это не знаю, никогда не пользовался
А что касается POP -- так, сразу видно, Вы всё с новенькими процессорами работаете...
А вот если бы с изношенными, потрёпанными пришлось иметь дело, то знали бы, что регистры иногда западают, после нажатия назад сами не возвращаются.
Их тогда назад через дырочку палочкой такой аккуратно выталкивают. Я у знакомого скульптора выпросил. "Стек" называется.
Те, кто с очень потрёпанными процессорами работают, так вообще уверены, что основное правило работы со стеком -- на каждый PUSH обязательно делать POP.
Раньше встречались процессоры, у которых в комплекте стека не было (да хоть бы HP2100, М6000, СОУ-1). Впрочем, у них регистры и не нажимались...
Сейчас, кажется, все им комплектуются. Чтобы спички, скрепки там всякие не совали.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
- testerplus
- Встал на лапы
- Сообщения: 130
- Зарегистрирован: Пн авг 24, 2009 10:41:16
- Откуда: SPb
- Контактная информация:
Re: Прошу прощения, можно за комментировать
Ничего они не новенькие, просто я стираю "Лаской".avreal писал(а):А что касается POP -- так, сразу видно, Вы всё с новенькими процессорами работаете...
Даже тем, кто работают с потрепанными процессорами, никогда не поздно узнать, что это не так. Навскидку два примера:Те, кто с очень потрёпанными процессорами работают, так вообще уверены, что основное правило работы со стеком -- на каждый PUSH обязательно делать POP.
1. Вызов подпрограммы по указателю во многих МК делается связкой PUSH/RETURN (так же в некоторых МК текущий адрес можно получить только связкой CALL/POP)
2. Ваш любимый WinAVR готовит место под локальные переменные (если их немного) не только PUSH'ем, но и CALL'ом, а обратно все делает POP'ами.
Так что баланс стека и баланс PUSH-POPов - это не одно и то же
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: Прошу прощения, можно за комментировать
Если учесть то, что RETURN -- это сокращение (причём часто даже _софтовое_ сокращение, как встроенный в ассемблер синоним для RTS PC) для того, что де-факто есть POP-ом, а CALL ADDR (где есть стек) -- это сокращение для PUSH PC / LOAD PC, ADDR (ну хорошо, у JSR Ri, ADDR немного сложнее)...
Если это всё учесть, то PUSH и POP входит в состав всех этих команд и должно соблюдаться общее их количество.
Ну вносил я полные бутылки в "дипломате", а выносил в мешках с мусором, а некоторые в руках вносил, а какие-то в руках выносил... Главное, что соблюдается соответствие количества полных и пустых.
А то, что там где-то по дороге ещё что-то кому-то присваивается, стеку безразлично.
Так я в макрос заверну PUSH-и, а соответствующие POP-ы вручную напишу и заявлю, что ничего не должно соблюдаться. Хорошо, не в макросы в чистом виде, а как параллакс с асмом для PIC когда-то сделал. Вкомпилирую свои команды в ассемблер.
Ну а в паре branch-and-link / branch по link-решистру push/pop-ов и нет. Хотя они типа call и типа return.
Если это всё учесть, то PUSH и POP входит в состав всех этих команд и должно соблюдаться общее их количество.
Ну вносил я полные бутылки в "дипломате", а выносил в мешках с мусором, а некоторые в руках вносил, а какие-то в руках выносил... Главное, что соблюдается соответствие количества полных и пустых.
А то, что там где-то по дороге ещё что-то кому-то присваивается, стеку безразлично.
Так я в макрос заверну PUSH-и, а соответствующие POP-ы вручную напишу и заявлю, что ничего не должно соблюдаться. Хорошо, не в макросы в чистом виде, а как параллакс с асмом для PIC когда-то сделал. Вкомпилирую свои команды в ассемблер.
Ну а в паре branch-and-link / branch по link-решистру push/pop-ов и нет. Хотя они типа call и типа return.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Прошу прощения, можно за комментировать
Вы чего спорите-то? Железное оно и есть железное, деревянное - деревянное. Я в ауте. Вот столкнулись.
Docendo discimus
- SubDia
- Держит паяльник хвостом
- Сообщения: 995
- Зарегистрирован: Сб апр 02, 2011 17:59:22
- Откуда: Город-герой Севастополь
Re: Прошу прощения, можно за комментировать
А сегодня "спорный" день. Я вот с коллегой только что тоже злобно спорил в курилке (правда, о программной реализации интерфейса USB).pyzh_man писал(а):Вы чего спорите-то? Железное оно и есть железное, деревянное - деревянное. Я в ауте. Вот столкнулись.
Ну конечно же, я работаю с новенькими. Нет, давайте еще 580-й процессор вспомним. А потом как в мультике про Масяню: "дык я так в советские времена так ооо!" -"А я так в советские времена так ууу.."сразу видно, Вы всё с новенькими процессорами работаете...
А вот если бы с изношенными, потрёпанными пришлось иметь дело
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: Прошу прощения, можно за комментировать
Тьху ты, не про это ж речь.SubDia писал(а):Ну конечно же, я работаю с новенькими. Нет, давайте еще 580-й процессор вспомним.
Хотел было сказать, что у новенького 580-го регистры не западали, но одумался, всякое бывало
Имелась ввиду не новизна модели, а потрёпанность экземпляра
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
- testerplus
- Встал на лапы
- Сообщения: 130
- Зарегистрирован: Пн авг 24, 2009 10:41:16
- Откуда: SPb
- Контактная информация:
Re: Прошу прощения, можно за комментировать
Только там, где PC отбражается в РОН (ARM, MSP). А Вы вообще PDP-11 вспомнили. Так что далеко не везде RET является псевдокомандой (и особенно в обсуждаемом AVR)avreal писал(а):Если учесть то, что RETURN -- это сокращение
Мы говорим о мнемониках или о действиях ядра? Никакое CALL не сокращение (если только какой-то совсем специфический потрепанный камень не вспомнить).avreal писал(а):CALL ADDR (где есть стек) -- это сокращение для PUSH PC / LOAD PC, ADDR
Я и говорю: не путайте баланс стека с балансом использования мнемоник PUSH/POP (даже в виде псевдокоманд)avreal писал(а):Ну а в паре branch-and-link / branch по link-решистру push/pop-ов и нет
- SubDia
- Держит паяльник хвостом
- Сообщения: 995
- Зарегистрирован: Сб апр 02, 2011 17:59:22
- Откуда: Город-герой Севастополь
Re: Прошу прощения, можно за комментировать
Ах, вот оно че.avreal писал(а):Имелась ввиду не новизна модели, а потрёпанность экземпляра
Тогды ой и мои глубочайшие извинения. =)
(А тема промеж тем расширила границы обсуждений
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: Прошу прощения, можно за комментировать
О действиях ядра. Там, где о мнемониках -- там я написал "софтовое сокращение"testerplus писал(а):Мы говорим о мнемониках или о действиях ядра? Никакое CALL не сокращение (если только какой-то совсем специфический потрепанный камень не вспомнить).avreal писал(а):CALL ADDR (где есть стек) -- это сокращение для PUSH PC / LOAD PC, ADDR
Берём процессор, где PC не отображается на регистры.
Смотрим описание действий команды PUSH.
Смотрим описание действий команды JUMP.
Смотрим описание действий команды CALL.
Видим, что дейстивя команды CALL состоят из действий (возможно, нескольких) команд PUSH, только с неявно отадресованным PC, и из действий команды JUMP.
Именно это я имел ввиду, когда говорил, что CALL является сокращением PUSH+JUMP. Аппаратным.
Баланс действий PUSH/POP со структурой данных, называемой стеком (иногда реализованной аппаратно, иногда программно), должен сохраняться независимо от того, вызваны эти действия явными командами PUSH/POP либо неявно, как часть исполнения (аппаратного "разворачивания") более "крупных" команд CALL/RET (которые сами могут быть "синонимами" простых вариантов использования более сложных команд JSR/RTS).testerplus писал(а):Я и говорю: не путайте баланс стека с балансом использования мнемоник PUSH/POP (даже в виде псевдокоманд)avreal писал(а):Ну а в паре branch-and-link / branch по link-решистру push/pop-ов и нет
Так сойдёт?
Ах, ну да, там, где SP программно доступен, его ещё можно вручную подвигать...
Но с точки зрения структуры данных "стек" это просто push /dev/random и pop /dev/null
Я не зря упомянул параллаксовский ассемблер для PIC, который одну свою мнемонику мог развернуть в пару "реальных" команд PIC. Человек, взявший в руки только тот ассемблер и не видевший другого -- вполне будет писать программы и не будет знать, что там внутри. Будет использовать LCALL и не знать, что это несколько mov-ов в PCLATH и т.д. Даже будет думать, что PC программно недоступен.
push imm на современном x86 разворачивается внутри в горсть команд внутреннего RISC -- так что, это я не push делаю, а загрузку константы в регистр, сохранение регистра в памяти и декремент регистра?
А если push r0 -- всего лишь синоним ассемблера для mov r0,-(r6) -- тоже push не делаю? Или таки push? А если я так явно и запишу mov -- то уже не push?
Что-то не туда пошло обсуждение.
Я же не начал об’яснять Вам, что DEC -- это уменьшение содержимого регистра на 1 (хм.. и то не везде на 1, если уж начинать...).
Могли бы ещё сказать мне, что POP не заточенной палочкой делается.
Эту тему я могу воспринимать только сквозь смех либо сквозь слёзы.
Смеяться не даёте, а плакать мне сейчас и так от чего хватает. Ухожу.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
- testerplus
- Встал на лапы
- Сообщения: 130
- Зарегистрирован: Пн авг 24, 2009 10:41:16
- Откуда: SPb
- Контактная информация:
Re: Прошу прощения, можно за комментировать
А я о мнемониках опкодов. Потому и сказал, что действия со стеком делаются не только push/pop'ом.avreal писал(а):О действиях ядра. Там, где о мнемониках -- там я написал "софтовое сокращение"
А если не синоним? Если нет mov'а с пре-/пост- декрементом?А если push r0 -- всего лишь синоним ассемблера для mov r0,-(r6)
Ладно, фиг с ним. Признаю, что я просто прицепился к фразе "основное правило работы со стеком -- на каждый PUSH обязательно делать POP". Так что не надо мне рассказывать о том, как бывает в мире МК и что такое микрокод. Сам работаю с разными платформами и все это прекрасно знаю. (Кстати, работая со scenix'ами и pic'ами избегал lcall'ов и прочих макросов. Неаккуратно поставленный sb/snb (или btfss/btfsc) мог привести к редким неуловимым сбоям)
Я сперва подумал, что Вы не поняли, что я просто пошутил над нерадивым студентом.Я же не начал об’яснять Вам, что DEC -- это уменьшение содержимого регистра на 1 (хм.. и то не везде на 1, если уж начинать...).
- andrey_artemov
- Встал на лапы
- Сообщения: 136
- Зарегистрирован: Сб авг 15, 2009 21:26:50
- Откуда: Пенза
- Контактная информация:
Re: Прошу прощения, можно за комментировать
Блин в далёком студенчестве в начале 90х писал на асме для 580вм80, для удешевления не было НИ ОДНОГО БАЙТА оперативной памяти, так, что не командой PUSH/POP ни командой CALL нельзя было пользоваться - только прямая адресация типа JMP? программа записана была в ПЗУ РФ2, выполняла жёсткую логику и выполняла свои функции (работал автоматизированный станок а ля ЧПУ)
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: Прошу прощения, можно за комментировать
avreal писал(а):... регистры иногда западают, после нажатия назад сами не возвращаются.testerplus писал(а):PUSH - Команда применяется для нажима на регистр (например PUSH R16 - нажать на регистр r16)
Их тогда назад через дырочку палочкой такой аккуратно выталкивают. Я у знакомого скульптора выпросил. "Стек" называется.
Те, кто с очень потрёпанными процессорами работают, так вообще уверены, что основное правило работы со стеком -- на каждый PUSH обязательно делать POP.
Честно говоря, мне было очень странно видеть такой разворот от хорошей шутки и попытки её продолжить к принципиальному разбору на полном серьёзе. Я не умею так быстро менять тему и стиль разговора.testerplus писал(а):Потому и сказал, что действия со стеком делаются не только push/pop'ом.
И решили рассказать мне, что такое стекtesterplus писал(а):Так что не надо мне рассказывать о том, как бывает в мире МК и что такое микрокод.
...
Я сперва подумал, что Вы не поняли, что я просто пошутил над нерадивым студентом.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
- testerplus
- Встал на лапы
- Сообщения: 130
- Зарегистрирован: Пн авг 24, 2009 10:41:16
- Откуда: SPb
- Контактная информация:
Re: Прошу прощения, можно за комментировать
Признаю, признаю: придрался не по делу.avreal писал(а):И решили рассказать мне, что такое стек


