10 ноября 2013 в 12:53

Как понять ассемблер. Часть 2. Микроконтроллер

Ну чтож, пора копнуть чуть глубже. Понимание самого ассемблера по мне так не мыслимо без понимания того, как работает микроконтроллер. Оставим наших персонажей в комнате и вновь воспользуемся нашим воображением.
Итак сейчас нужно будет просто представлять то, о чём я напишу.
***
Представь, что ты сидишь внутри микроконтроллера. Скажем внутри ATmega 8. Только микроконтроллер это такая большая прямоугольная белая комната, а ты сидишь в удобном кресле в самом её центре. Эта комната — твой личный центр управления — ты из неё управляешь тем, что снаружи. Пока неважно ЧЕМ — пока важно КАК.

Итак давай пройдёмся по твоей «лаборатории» будем называть эту комнату так.

Справа от тебя стоит Генератор Эдемских Кущ Компактный Тактовой Частоты. Это только кажется что это такая страшная штука со страшным названием. На самом деле это большой звонок, как в школе был на стене. И задачи у него похожие.
Cлева от тебя идёт конвейер — обычный конвейер как на заводе.
Так вот ты скажем сидишь на кресле, никого не трогаешь — и тут звонит звонок… Что это значит? Это значит что тебе самое время проверить — есть ли что-нибудь на конвейере. Ты смотришь — а там конверт, на конверте номер напечатан «0001» — ты его открываешь — а там написано «Нужно сделать такую то вещь» — ты потягиваешься, кладёшь конверт обратно на конвейер, встаёшь из-за стола и идёшь делать эту самую вещь. Сделал, и идёшь обратно, садишься за стол и сидишь себе, куришь CAMEL. Проходит какое то время — опять звонит звонок — ты смотришь — а на конвейере уже лежит ещё один конверт под номером «0002» — ты его открываешь, читаешь что нужно сделать, кладёшь обратно на конвейер и идёшь делаешь. Потом приходишь и садишься пить чай. Потом через какое то время опять звонок — опять конверт — открываешь а там пусто… Ну пусто и пусто. Обратно его положил и сидишь себе дальше ждёшь следующего звонка.
Так вот что тут важно знать:
1. В конвертах содержатся инструкции для тебя.
2. Ты любую из этих инструкций способен выполнить.
3. Ты всегда успеваешь выполнить то, что написано в конверте до того, как прозвенит следующий звонок.
Ну и ещё следует знать про характеристики своего звонка. Основная характеристика звонка — это тактовая частота — то есть сколько раз в секунду звонок может «звякать» На ATmega8 может быть частота 8 или 16 мегагерц. То есть если наш звонок работает на 8 мегагерцах — то он за 1 секунду может «звякнуть» 8 миллионов раз. То есть получается что то, что выше выделено жирным шрифтом и подчёркнуто ты успеваешь сделать за одну восьмимилионную часть секунды. Ты очень быстрый, дружище!
Вениамин Кейвер @Stanislave26
карма
7,0
рейтинг 0,0
Самое читаемое Разработка

Комментарии (20)

  • +4
    Да, только некоторые инструкции выполняются не один такт…
    • +1
      И у иных процессоров на конвейере могут оказаться данные, а иные могут ещё и сами что-то себе на конвейер положить и вообще переместить его по любому произвольному адресу…
      Тьфу, не плодите сущности господа, в освоении ассемблера это вам никак не поможет!
      Лучше изучите принципы работы примитивных микропроцессоров и понимание ассемблера придёт автоматом.
  • +12
    Приходит тебе конверт, а ты такой «Мужчина не видите у нас обед!».
  • 0
    " Потом через какое то время опять звонок — опять конверт — открываешь а там пусто… Ну пусто и пусто. Обратно его положил и сидишь себе дальше ждёшь следующего звонка."
    Неправда. Небывает там пусто. Там бывает EOR A. Так-что быстро встал. Сделал OR аккумулятора с самим собой, ЗАПИСАЛ РЕЗУЛЬТАТ, и вот потом сиди дальше…
    • 0
      Ну всему своё время — тут общий принцип. Конверт по сути — пустой. Конкретно никакого ПОЛЕЗНОГО действия делать не нужно. Поэтому понятнее назвать конверт пустым, а не вводить сейчас EOP A, NOP и тому подобные вещи.
      И да, конечно — некоторые инструкции выполняются не за 1 такт. Это будет в следующей статье.
  • +2
    Не понять ассемблер может только идиот. Очередное пособие с дилетантским стилем объяснения «У Пети было 3 яблока».
    • +3
      Ну вот опять началось. Не понять сопромат с точки зрения профессора по сопромату тоже может только идиот. А вы понимаете сопромат? Я рад за то, что Вы «король IT и очень хорошо разбираюсь в компьютерах.» Но если для Вас это семечки — пройдите мимо, будьте так любезны. Язвительные комментарии не люблю. Будьте так любезны больше не появляться в комментариях к моим статьям. Даже если Вы Бог ассемблера — то я в Вас не верю.
      Ай, вы-ж ещё и ви-ай-пи! Как я сразу Вашу аватарку то не приметил!
      • 0
        Не поддавайтесь на провокации!
        • 0
          Да я не поддаюсь. Если тролль то просто игнор, а написал на случай если не тролль, чтобы объяснить, почему я буду игнорировать его комментарии.
          • 0
            Вы извините, но есть грань между доходчивым объяснением и объяснением для умственно-отсталых (либо для детей). Это аналогично тому, как преподаватель, на просьбу объяснить тему более простым языком, начинает, вместо качественной подачи информации сюсюкаться со студентами как с младенцами.

            Вы позиционируете свои статьи, как статьи для детей? Тогда имеет смысл нарисовать красочные картинки про Васю, Петю, конвеер и прочее.

            Как статьи для начинающих взрослых? Тогда к чему такое нарочитое детское упрощение? Почему нельзя найти наиболее трудные для понимания моменты, переформулировать их — пусть с аналогиями — но без общения с читателями как с недоразвитыми, без объяснения простейших, элементарных вещей, где аналогии не нужны, примерами вида «англичанин сидит у вас в комнате на стуле»?
            Посмотрите учебники — да, есть много плохих, но бывают и хорошие. Так вот, ваш стиль изложения — точно такой, какой используется в учебниках для начальной школы, чтобы дать детям представление об информатике.
            • +1
              Ну в принципе я так и хотел. Эти статьи направлены на то, чтобы привлечь людей — чтобы дать понять, что не всё тут так страшно и нереально. У меня куча друзей и знакомых которые считают меня либо гением либо свихнувшимся когда я что то им пытаюсь объяснить. Если человеку станет интересно и он просто поймёт какие возможности есть у микроконтроллеров то ассемблер или что-то более высокоуровневое будет уже скорее делом времени.
              Сейчас куча людей совершенно не знают даже что такое процессор — для них высокие технологии — это такая штука, которой можно пользоваться — но в суть лучше не вникать. Недавно сидели вечером пиво пили — и товарищ так мечтательно глядя на материнскую плату- «Блин, вот а как оно там всё работает? Как вообще такое может быть, что ты кнопку нажал а на экране что то поменялось?» — а сейчас мы с ним вечерами платы травим, программаторы паяем, до тонкостей ещё не дошло, но думаю теперь это дело времени.
              По поводу подачи материала — ну тут по мне главное воображение. Если просто на описываемую ситуацию взглянуть со стороны — то будет представление — но не всегда понимание. А если историю пропустить через себя — погрузиться в описание с головой — то сама логика сложившейся ситуации как бы «прошьётся» в голове и потом прикинуть всё то же самое уже в конкретном контексте можно будет автоматически. Поэтому и англичанин в комнате — потому что представить что ты сидишь за своим компом — очень просто — почти все, кто читает статью — уже сидят за компом — остаётся только разместить персонажей и всё готово — ситуация смоделирована. А если говорить более конкретно то получится, что человек, который никогда про регистры слыхом не слыхивал просто не знает как их представить — и из этого выплывают проблемы потом. Что нибудь нужно с регистром сделать — а человек представил регистр как какую-нить приблуду фантастическую и на уровне ассоциаций у него возникает ступор. Он этот момент пропускает и идёт дальше. А это не есть хорошо. Поэтому по мне лучше на пальцах объяснять, прибегать к помощи к Васе с Петей и вызывать иностранцев — но зато быть уверенным, что всё о чём я говорил было верно представлено. Ну а там дальше пойдёт код и всё встанет на свои места окончательно.
              Но посыл я понял — я анализирую комментарии и стараюсь изменить статьи в лучшую сторону.
      • 0
        Во-первых, «вы ж» пишется раздельно, «аватарку-то» пишется через дефис, а с «Вы» нужно определиться — либо везде с большой буквы, либо везде с маленькой.
        Во-вторых, будьте так любезны не указывать мне, где я могу появляться, а где — нет. Как-нибудь сам разберусь. Хабр — свободный ресурс. Если считаю, что статья (статьи) дурацкая — имею право об этом сказать.

        По теме. Реально статья в стиле «объяснения ламера для ламеров». Вам уже ниже на это указали. Переполняет радость от того, что что-то начало получаться на ассемблере? Не стыдитесь, оставьте эти потуги при себе. А нам интересней читать что-то более содержательное.
        • 0
          Сказали? Вас все услышали. Только Вы за себя говорите пожалуйста, а не за всё сообщество. Или у Вас раздвоение личности и Вы о себе во множественном числе говорите? Интересно читать что-то более содержательное — читайте, кто Вам мешает.
          И пожалуйста, проверьте, может у меня ещё где-то ошибки есть. Я стараюсь их не делать, но я не идеален, а Вам похоже нравится проверять мои тексты на их наличие.
  • +1
    Статьи у вас отличные, смешные, читаются легко, только вот слишком они короткие.

    P/S/ Я надеюсь что когда-нибудь вы дойдете до практики, и расскажете более подробно про ассемблер для AVR.
    P/P/S/ Люди на хабре не очень справедливы и уж очень любят сливать неугодных им авторов. Ваши статьи ориентированы на т.н. «чайников», которые вообще не знакомы с асмом или программированием в целом. Да и на хабре достаточно т.н. «гуманитариев» которым вполне вероятно что интересны подобные статьи.
  • +1
    Поправил Вам карму и подписался на обновления) Скорее же к делу!
  • +1
    Спасибо всем! По комментариям я решил составлять статьи будущие как бы из двух частей — введение в основную тему статьи будет так же объясняться на пальцах, а потом в середине будет плавный переход на матчасть с сопоставлением, ну а потом уже будет конкретика.
    И да, именно ассемблер для AVR я и буду освещать.
    Думаю до конца этой недели я подготовлю штук 5 статей. Отпуск всё же. А в свободное время я как раз таки паяю, читаю и пишу.
    И ещё у тестя отрыл 3 интересные книженции по радиоэлектронике и микроконтроллерам(1980-90-е годы издательства) так что возможно посты по ассемблеру и контроллерам будут перемежаться с постами по электросхемам.
    Ещё нарыл книгу по радиоэлектронике 1947 (SIC!!!) года! Боюсь открывать…
    • 0
      Ждем постов «Как работает резистор» с текстом типа «Представьте, что вы протискиваетесь через толпу» или «Как моргать светодиодом, используя КТ-315». Во! Я понял наконец, на кого смахивает ваш стиль объяснения. Это же наша любимая Елена Малышева, только по электронике!))
  • 0
    Я если честно, то мог бы сейчас в очередной раз съязвить и постараться Вас подколоть — ну раз уж у нас с Вами такая традиция пошла. Но я не буду этого делать. Собственно потому что я может быть — нуждаюсь в Вас и в Ваших знаниях. Собственно я с самой первой статьи сказал, что я сам совершенно недавно понял всю эту кухню — и я продолжаю учиться каждый день — мне это интересно. В своём первом посте я писал
    Дело в том, что я буквально несколько дней назад начал учить ассемблер с нуля — нужно сделать одно устройство

    Именно с нуля. То есть изначально я в программировании был абсолютным нулём. Мне понадобилось сделать «одно устройство»(чуть позже я о нём более подробно расскажу) — я заинтересовался как это можно реализовать на микроконтроллере. Начал читать соответствующую информацию — и понял, что я реально сам смогу всё это сделать — и спаять и программу написать.
    То есть изначально я не был программистом вообще -единственное, что меня связывало с программированием — так это небольшие поверхностные знания в PHP по совместительству, так как я достаточно хорошо владею вёрсткой и иногда на PHP нужно сделать какую -то мелочь вроде формы, анкеты, всяких мобильных редиректов и прочей пхп-мелочёвки. Я возглавляю веб-студию нашего местного медиахолдинга — по большему счёту мы делаем различные веб-приложения для собственных нужд, стримим онлайн-радио и тв на сайт, ну и поддерживаем сайты самого холдинга и его подразделений. Берём работу и на заказ — делаем сайты, интернет магазины, занимаемся дизайном не только для веб. То есть я был довольно далёкий до контроллеров человек. Но.
    Я просто понял как это работает — и я хочу об этом рассказать таким же людям — как я. Тем кто только недавно заинтересовался этим вопросом, и ему действительно нужно понять и затем уже постепенно изучать от простого к сложному.
    Вы в принципе правильно выразились
    «объяснения ламера для ламеров»

    я просто сразу не приметил. Но таких ламеров на самом деле очень много. Есть люди далёкие от программирования, электроники и техники — но они тоже читают хабр, и может им тоже хочется заняться чем-то подобным. Но они думают, что всё это очень сложно. Я пишу как раз для того, чтобы объяснить — что это не так сложно как кажется, и изначально просто нужно ПОНЯТЬ как это работает.
    У Вас есть 3 возможности:
    1. Продолжать делать facepalm, бросаться насмешками, критиковать.
    2. Просто молчать, игнорировать.
    3. Помочь мне — просто поправляя в тех моментах, которые Вам кажутся неточными.
    Мне бы лично хотелось, чтобы вы выбрали третий вариант. Вы знаете достаточно много, чтобы не позволить мне допустить неточность даже в таких вот, простых описаниях. А раз Вы наши время, чтобы написать мне про мои «потуги» то думаю и время на то, чтобы написать какой-нибудь действительно полезный комментарий вы тоже найдёте.
    Будем считать, что это очень хороший учебник «Ассемблер микроконтроллеров AVR для чайников» — который будет написан на понятном для чайников языке(мной) и проверен на возможные ошибки (всем сообществом хабра) Я думаю это будет полезным и интересным занятием — плюс оно позволит привлечь новых читателей и, возможно, даст кому то возможность взять в руки паяльник и создать какой-нибудь свой собственный девайс.
    • +1
      Фишка вовсе не в неточности (куда без них). Объяснения — вот в точности на уровне Елены Малышевой. Когда я вижу объяснения на таком уровне, мне становится обидно из-за кол-ва дибилов в нашей стране, на которых рассчитан такой текст. В случае с медициной они потом начинают умничать перед врачами (насмотревшись передач). В случае с IT, если человек настолько глуп, что ему приходится объяснять на подобном уровне — то это ваще бесперспективняк, потому что 99%, что столкнувшись с более-менее сложной вещью (а он обязательно с ней столкнется), он не сможет ее осилить и просто потеряет интерес. Получается что-то вроде временной игрушки. Лично я не люблю, когда дело не доводится до конца, это формирует в людях наплевательский подход к любому делу.
      • +1
        а может не стоит так судить по вводным статьям? Тем более, что кроме дебилов и урожденных программистов в третьем поколении, есть и другие категории граждан, которым это может быть интересно. Это в принципе автором и обозначено. 25 лет тому назад, мне пришлось осваивать ассемблер для PDP-11 и I-8048 с нуля — тогда занимался железками и надо было сделать систему управления, и одного паяльника и осциллографа маловато было. Потом железки пришлось забросить, а вот сейчас захотелось поностальгировать, и сделать лично для себя несколько игрушек. И я бы с удовольствием почитал серию для чайников. Да, мне лично может и не надо про конвертики рассказывать, но куче народа — стоит, хотя бы для того, чтобы не спугнуть в самом начале. Ну не осилит человек, ну бросит. Но один процент может втянуться. И эта капелька в свою очередь возможно снизит процент криворуких быдлокодеров собирающих свое творение из всех библиотек, до которых смогли дотянуться руками, вместо написания сотни строчек внятного кода.

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.