Немного уточню (8:38 на видео)... инструкция CLR не существует как отдельная группа команд в AVR Это всего лишь мнемонический вариант команды EOR. т.е. CLR R1 и EOR R1,R1 всегда будут откомпилированы в 0x2411 код команды EOR - 0x2400, код R1 в качестве результирующего регистра - 0x0010, код R1 в качестве исходного регистра - 0x0001 получаем 0x2400 & 0x0010 & 0x0001 = 0x2411 продолжу список несуществующих команд... SER R => LDI R,0xFF TST R => AND R,R LSL R => ADD R,R ROL R => ADC R,R CBR R,bit => ANDI R,~bit SBR R,bit => ORI R,bit далее, вся группа условных переходов типа BRNE, BRNC, BRCC... (всего 16 команд) ни что иное, как BRBC и BRBS с указанием флага и метки и еще 16 несуществующих команд сброса и установки флагов в регистре SREG (CLC, SEС и т.д.) выполняются двумя командами BCLR и BSET с указанием необходимого флага
на 3:44 услышал про деление у умножение как циклические операции, да по логике это так, но в том же си алгоритмы используют деление и умножение столбиком, в итоге для процессора это операции сравнения сложения вычитания и сдвига
Спасибо. Когда изучал контроллер 8051, изучил ассемблер, исходную программу 2кб дезасеблировал и потом дописал до 6кб. Когда был выбор между изучением pic или avr ,случайно выбрал avr и вариант написания программ на C - как раз что бы не изучать нюансы и, возможно, портировать код с контроллера на контроллер. А тут, оказывается, такие нюансы...
Здравствуйте. Насколько я понимаю, преимущество risс в том, что имея команды одной длины можно несложно организовать конвеер (по сравнению с cisc). В итоге команды , которые исполняются за 3 такта у avr исполняются за один такт. Если бы команды были разной длины , как в cisc, то смысла в конвеере становилось бы меньше. Тут неправильное значение слова Redused. Не сокращенный набор, а набор команд определенной длины. Это где-то встречалось в литературе. Умножение нужно для организации работы с векторами. (особенно умножение с накоплением). Операция clr это операция исключающее или самим с собой по книге Ю. Ревича.
Как раз сейчас ковыряюсь с эмулятором Z80. Вот думаю, если бы тогда была в тренде RISC, то было бы гораздо проще. А то эти команды с префиксами из которых ещё незапланировано получились двойные и тройные префиксы. Всё это недокументированные возможности и нигде нормально системно не описаны. Вот у меня, например получается, что проц.как честный выбирает один байт после префикса, но если перед префиксом был ещё один префикс, то надо выбирать через один байт, но тот который мы перепрыгиваем тоже учитывается. Короче мозг сломаешь, пока разберёшься. Понятно, почему CISC взлетела - все серьёзные программы писали в ассемблере или в машинных кодах, а на CISC так писать проще. Сейчас же почти всё равно, т.к. компиляторы дофига умные стали. Да и каждый такт никто уже не считает. Время программиста дороже стоит, просто надо брать проц пожирнее, цена в больших партиях всё равно почти одинаковая.
У AVR полезно смотреть листинг дизассемблера, и можно выбрать лучший вариант по длине. Когда то переносил код написанный для PIC12 на TINY13 и он не влазил с тем же функционалом, А у PIC с его минимумом команд ассемблера еще оставалось место!
Когда нужно было переделать прогу с 8к на 4к кристалл, заменял прожорливые команды lds sts на ldd std. Операции сравнения с нолём, загрузки ноля в ОЗУ достойны того, чтобы завести отдельный регистр с сответствующим значением, я делал ZeroReg и иногда OneReg.
Пишу на асме. Часто использую тини 13 как дополнительный контроллер к основному.дешево и сердито. Для ускорения программы к примеру использую один из регистров под нулевое значение.
эта фишка компиляторов Studio да и в Arduino... если дизассемблировать любую результирующую программу состряпанную на СИ, то увидим в коде - в теле инициализации R1 очищается (сбрасывается) и используется в дальнейшем как регистр с нулевым значением
Объясните пожалуйста, на сколько это все актуально в эпоху 32-битных МК? Сразу предупрежу, что я жертва ЕГЭ, хоть и родился в той самой уже не существующей стране
Если у тебя много свободного времени и ты живешь на мамину пенсию это интересное занятие. В реальной жизни нет смысла опускаться на низкий уровень ( это скорее показатель отсутствия профессионализма) , это экономически нецелесообразно.
Видимо потому, что у вас она была "первая". :) У меня кажется тоже. Но это вроде бы усовершенствованный i8080, хотя я с Intel знаком только с 8086 и выше.
те команды, "без которых можно было бы обойтись", в RISC - зачастую просто макросы, для удобства пользователя, реально компилятором может генерироваться тот же двоичный код для DEC, что и для SUB 1, например, просто потому что команды DEC на самом деле не существует.
Потрудитесь посмотреть в наборе инструкций для AVR двоичные коды команд DEC и SUBI, чтобы не утверждать, что одна из них мнемоника другой. Тут товарищ Di Maro в комментах верно выписал многие команды, которые суть мнемоники. Вот сразу видно - "врач". :)
99,99% компиляторов умнее меня, но Ооочень хочу понимать правильно : определения ,,команда,, для процессора. Спросить больше не у кого , ,,Коменда,, это часть электрической схемы ,состоящая из конкретного набора конкретных триггеров , в которую поступают данные и на выходе получим результат именно только от одного конкретного действия, так ли это???
В простейшем случае да, это часть схемы, реагирующая на определенный префикс от декодера команд и знающая, что делать с остальной частью команды (операндом/и). В современных МП (не МК) как правило есть внутренний транслятор, который переводит команды (как правило достаточно высокоуровневые) в более простые низкоуровневые (нередко не 1 к 1), которые уже в силиконе реализованы окончательно. На простых командах проще повышать скорость выполнения (стремясь к 1 такту на команду или даже к нескольким командам за такт) и снижать затраты энергии. Дальше параллельное выполнение, предсказание переходов для кеширования кода и пр. Но это все не про МК! Там чем проще - тем лучше.
@@alexmorozov73Большое СПАСИБО, что пытаетесь разъяснить непутевому. И ещё догадка: если в микроконтроллер ,, засунуть,, много команд для паралельного исполнения кода ,тогда те части эл. схемы которые не используются в данный момент все равно потребляют энергию , и это значит, что для мобильности (по питанию) нужно минимизировать количество этих ,,команд,, в архитектуре МК ?
Автор, если вы не понимаете, почему в микроконтроллере есть команда умножения, но нет команды деления, сразу хочется спросить: а вы точно врач? в смысле а вы точно знаете что-то о микроконтроллерах и процессорах?
Вот вы высрать высрали, а знаниями не блеснули. Если вы знаете что-то то расскажите или не пишите ничего. Ценность вашего коммента в данный момент около нуля.
Это из той серии, что если перевести 0.1 в двоичную систему,переведя обратно в десятичную мы 0.1 уже ни когда не получим.ua-cam.com/video/G-TdIFOHcWY/v-deo.html
Немного уточню (8:38 на видео)... инструкция CLR не существует как отдельная группа команд в AVR
Это всего лишь мнемонический вариант команды EOR.
т.е. CLR R1 и EOR R1,R1 всегда будут откомпилированы в 0x2411
код команды EOR - 0x2400, код R1 в качестве результирующего регистра - 0x0010, код R1 в качестве исходного регистра - 0x0001
получаем 0x2400 & 0x0010 & 0x0001 = 0x2411
продолжу список несуществующих команд...
SER R => LDI R,0xFF
TST R => AND R,R
LSL R => ADD R,R
ROL R => ADC R,R
CBR R,bit => ANDI R,~bit
SBR R,bit => ORI R,bit
далее, вся группа условных переходов типа BRNE, BRNC, BRCC... (всего 16 команд) ни что иное, как BRBC и BRBS с указанием флага и метки
и еще 16 несуществующих команд сброса и установки флагов в регистре SREG (CLC, SEС и т.д.) выполняются двумя командами BCLR и BSET с указанием необходимого флага
Добрый день. Не планируешь серии видео по stm32?
на 3:44 услышал про деление у умножение как циклические операции, да по логике это так, но в том же си алгоритмы используют деление и умножение столбиком, в итоге для процессора это операции сравнения сложения вычитания и сдвига
Спасибо. Когда изучал контроллер 8051, изучил ассемблер, исходную программу 2кб дезасеблировал и потом дописал до 6кб. Когда был выбор между изучением pic или avr ,случайно выбрал avr и вариант написания программ на C - как раз что бы не изучать нюансы и, возможно, портировать код с контроллера на контроллер.
А тут, оказывается, такие нюансы...
Здравствуйте. Насколько я понимаю, преимущество risс в том, что имея команды одной длины можно несложно организовать конвеер (по сравнению с cisc). В итоге команды , которые исполняются за 3 такта у avr исполняются за один такт. Если бы команды были разной длины , как в cisc, то смысла в конвеере становилось бы меньше. Тут неправильное значение слова Redused. Не сокращенный набор, а набор команд определенной длины. Это где-то встречалось в литературе. Умножение нужно для организации работы с векторами. (особенно умножение с накоплением). Операция clr это операция исключающее или самим с собой по книге Ю. Ревича.
Нужен такой же обзор на ISA RISC-V.
Как раз сейчас ковыряюсь с эмулятором Z80. Вот думаю, если бы тогда была в тренде RISC, то было бы гораздо проще. А то эти команды с префиксами из которых ещё незапланировано получились двойные и тройные префиксы. Всё это недокументированные возможности и нигде нормально системно не описаны. Вот у меня, например получается, что проц.как честный выбирает один байт после префикса, но если перед префиксом был ещё один префикс, то надо выбирать через один байт, но тот который мы перепрыгиваем тоже учитывается. Короче мозг сломаешь, пока разберёшься. Понятно, почему CISC взлетела - все серьёзные программы писали в ассемблере или в машинных кодах, а на CISC так писать проще. Сейчас же почти всё равно, т.к. компиляторы дофига умные стали. Да и каждый такт никто уже не считает. Время программиста дороже стоит, просто надо брать проц пожирнее, цена в больших партиях всё равно почти одинаковая.
Может, мышку хотя бы раз в 20 лет стоит менять?)
Читаю "авр - это всегда риск" :)
Так и задумано :)
У AVR полезно смотреть листинг дизассемблера, и можно выбрать лучший вариант по длине. Когда то переносил код написанный для PIC12 на TINY13 и он не влазил с тем же функционалом, А у PIC с его минимумом команд ассемблера еще оставалось место!
Когда нужно было переделать прогу с 8к на 4к кристалл, заменял прожорливые команды lds sts на ldd std. Операции сравнения с нолём, загрузки ноля в ОЗУ достойны того, чтобы завести отдельный регистр с сответствующим значением, я делал ZeroReg и иногда OneReg.
Поколение ЕГЭ пошло в погроммисты.
Пишу на асме. Часто использую тини 13 как дополнительный контроллер к основному.дешево и сердито.
Для ускорения программы к примеру использую один из регистров под нулевое значение.
эта фишка компиляторов Studio да и в Arduino... если дизассемблировать любую результирующую программу состряпанную на СИ, то увидим в коде - в теле инициализации R1 очищается (сбрасывается) и используется в дальнейшем как регистр с нулевым значением
Я ещё под единичку часто использую т.к. inc не изменяет C
а сложение константы с обраткой устанавливает C
Объясните пожалуйста, на сколько это все актуально в эпоху 32-битных МК? Сразу предупрежу, что я жертва ЕГЭ, хоть и родился в той самой уже не существующей стране
Для простых задач простые решения всегда будут эффективнее и дешевле.
Если у тебя много свободного времени и ты живешь на мамину пенсию это интересное занятие. В реальной жизни нет смысла опускаться на низкий уровень ( это скорее показатель отсутствия профессионализма) , это экономически нецелесообразно.
Самая классная архитектура проца и красивая система команд была у Z80!
Видимо потому, что у вас она была "первая". :) У меня кажется тоже. Но это вроде бы усовершенствованный i8080, хотя я с Intel знаком только с 8086 и выше.
риск это stm чуть пин перегрузил и топаеш на новым мк
буферы применить религия не позволяет?
А можно вообще сделать выходные на оптопарах, раз уж так коробит от буферов.
@@igorovcharov7424 это я просто как факт у меня такой проблеммы небыло(потомучьто я не узаю stm)
Это ты смотришь в современных реалиях, на момент создания не все команды были одноактные.
Да бывает туго. Тема норм!
те команды, "без которых можно было бы обойтись", в RISC - зачастую просто макросы, для удобства пользователя, реально компилятором может генерироваться тот же двоичный код для DEC, что и для SUB 1, например, просто потому что команды DEC на самом деле не существует.
Потрудитесь посмотреть в наборе инструкций для AVR двоичные коды команд DEC и SUBI, чтобы не утверждать, что одна из них мнемоника другой.
Тут товарищ Di Maro в комментах верно выписал многие команды, которые суть мнемоники. Вот сразу видно - "врач". :)
99,99% компиляторов умнее меня, но Ооочень хочу понимать правильно : определения ,,команда,, для процессора. Спросить больше не у кого , ,,Коменда,, это часть электрической схемы ,состоящая из конкретного набора конкретных триггеров , в которую поступают данные и на выходе получим результат именно только от одного конкретного действия, так ли это???
В простейшем случае да, это часть схемы, реагирующая на определенный префикс от декодера команд и знающая, что делать с остальной частью команды (операндом/и).
В современных МП (не МК) как правило есть внутренний транслятор, который переводит команды (как правило достаточно высокоуровневые) в более простые низкоуровневые (нередко не 1 к 1), которые уже в силиконе реализованы окончательно. На простых командах проще повышать скорость выполнения (стремясь к 1 такту на команду или даже к нескольким командам за такт) и снижать затраты энергии. Дальше параллельное выполнение, предсказание переходов для кеширования кода и пр. Но это все не про МК! Там чем проще - тем лучше.
@@alexmorozov73Большое СПАСИБО, что пытаетесь разъяснить непутевому. И ещё догадка: если в микроконтроллер ,, засунуть,, много команд для паралельного исполнения кода ,тогда те части эл. схемы которые не используются в данный момент все равно потребляют энергию , и это значит, что для мобильности (по питанию) нужно минимизировать количество этих ,,команд,, в архитектуре МК ?
Автор, если вы не понимаете, почему в микроконтроллере есть команда умножения, но нет команды деления, сразу хочется спросить: а вы точно врач? в смысле а вы точно знаете что-то о микроконтроллерах и процессорах?
Вот вы высрать высрали, а знаниями не блеснули. Если вы знаете что-то то расскажите или не пишите ничего. Ценность вашего коммента в данный момент около нуля.
Благодаря простоте avr дешев и удобен к применению в простых проектах, сейчас микрочип запускает линейку avr da
Еще внимательней присмотрись. Обращая внимание на то, с какими регистрами каждая из этих команд работает.
Ну да, для команд с константой доступна только половина регистрового файла. Но это такие мелочи...
Протестую. Это CISC. Неортогональная система команд. Их слишком много, куча исключений. К сожалению, ядро AVC.
Это из той серии, что если перевести 0.1 в двоичную систему,переведя обратно в десятичную мы 0.1 уже ни когда не получим.ua-cam.com/video/G-TdIFOHcWY/v-deo.html