Це справді два питання в одному ...
По-перше, у чому різниця між мікроконтролером та мікропроцесором?
Мікропроцесор - це суто центральний процесор, який слідує набору інструкцій, прочитаних із зовнішньої шини пам'яті. Він управляє зовнішніми периферійними пристроями (такими як екран, клавіатура, миша, жорсткий диск тощо) за допомогою зовнішньої шини зв'язку. Коли ви програмуєте мікропроцесор, ваша програма є зовнішньою для пристрою. У комп'ютері ця пам'ять спочатку являє собою завантажувальний BIOS ROM, який спочатку зчитує операційну систему з жорсткого диска в оперативну пам'ять, а потім продовжує виконувати її звідти.
Мікроконтролер начебто як всебічний процесор + пам'ять, з деякими зовнішніми портами для спілкування із зовнішнім світом. Він утримується самостійно і не використовує зовнішню пам'ять для утримання програми (хоча за потреби він може читати та записувати робочі дані у зовнішню пам'ять).
По-друге, програмування мікроконтролера та мікропроцесора однакове?
У чомусь так, а в чомусь ні.
Мова складання - це широкий термін, який описує набір інструкцій, які ЦП може безпосередньо зрозуміти. Коли ви "компілюєте" мову складання, вона насправді нічого не компілює, все це робить, вона перетворює її в послідовність байтів, які представляють команди та плагіни в деяких відносних місцях пам'яті. Це властиво як мікропроцесорам, так і мікроконтролерам.
Однак різні типи процесора розуміють різний набір процесорних інструкцій. Наприклад, якщо ви пишете програму мовної збірки, яка працює з мікроконтролером pic 16F877, це буде абсолютно нісенітницею мікропроцесора чи будь-якого іншого мікроконтролера поза сімейством мікроконтролерів 16Fxxx.
Отже, хоча збірка працює аналогічно для всіх мікропроцесорів та мікроконтролерів, фактичний перелік інструкцій, які ви пишете, дуже різняться. Щоб писати мовою складання, потрібно глибоко знати архітектуру пристрою, яке, як правило, можна отримати з таблиці даних у випадку мікроконтролера.