Esto es realmente dos preguntas en una ...
En primer lugar, ¿cuál es la diferencia entre un microcontrolador y un microprocesador?
El microprocesador es puramente una CPU que sigue un conjunto de instrucciones leídas desde un bus de memoria externo. Controla periféricos externos (como pantalla, teclado, mouse, disco duro, etc.) a través de un bus de comunicaciones externo. Cuando programa un microprocesador, su programa es externo al dispositivo. En una computadora, esta memoria es inicialmente la ROM del BIOS de arranque que inicialmente lee el sistema operativo del disco duro en la memoria RAM, luego continúa ejecutándolo desde allí.
El microcontrolador es como una CPU + Memoria todo en uno, con algunos puertos externos para comunicarse con el mundo exterior. Es autónomo y no utiliza memoria externa para mantener su programa (aunque si es necesario, puede leer y escribir datos de trabajo en la memoria externa).
En segundo lugar, ¿es lo mismo programar un microcontrolador y un microprocesador?
De alguna manera sí, y de alguna manera no.
El lenguaje ensamblador es un término amplio que describe un conjunto de instrucciones que la CPU puede entender directamente. Cuando 'compila' el lenguaje ensamblador, en realidad no compila nada, solo lo convierte en una secuencia de bytes que representan los comandos y enchufes en algunas ubicaciones de memoria relativas. Esto es común tanto a los microprocesadores como a los microcontroladores.
Sin embargo, diferentes tipos de CPU entienden un conjunto diferente de instrucciones de CPU. Por ejemplo, si escribe un programa en lenguaje ensamblador que funciona con un microcontrolador pic 16F877, no tendrá ningún sentido para un microprocesador o cualquier otro microcontrolador fuera de la familia de microcontroladores pic 16Fxxx.
Entonces, aunque el ensamblaje funciona de manera similar en todos los microprocesadores y microcontroladores, la lista real de instrucciones que escribe son muy diferentes. Para escribir en lenguaje ensamblador, debe tener un conocimiento profundo de la arquitectura del dispositivo, que normalmente puede obtener de la hoja de datos en el caso de un microcontrolador.