Esto es realmente dos preguntas en una ...
En primer lugar, ¿cuál es la diferencia entre un microcontrolador y un microprocesador?
Microprocesador es simplemente una CPU que sigue un conjunto de instrucciones leídas desde un bus de memoria externo. Controla los periféricos externos (como la pantalla, el teclado, el mouse, el 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 inicio, que inicialmente lee el sistema operativo desde el disco duro a la memoria RAM, y luego continúa ejecutándolo desde allí.
El microcontrolador es un poco como una CPU + memoria todo en uno, con algunos puertos externos para comunicarse con el mundo exterior. Es autónomo y no usa memoria externa para guardar su programa (aunque si es necesario, puede leer y escribir datos de trabajo en la memoria externa).
En segundo lugar, ¿la programación de un microcontrolador y un microprocesador es lo mismo?
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 se 'compila' el lenguaje ensamblador, realmente no compila nada, todo lo que hace es convertirlo en una secuencia de bytes que representan los comandos y los enchufes en algunas ubicaciones de memoria relativas. Esto es común tanto para los microprocesadores como para los microcontroladores.
Sin embargo, diferentes tipos de CPU comprenden un conjunto diferente de instrucciones de CPU. Por ejemplo, si escribe un programa en lenguaje ensamblador que funciona con un microcontrolador pic 16F877, será un completo disparate para un microprocesador o cualquier otro microcontrolador fuera de la familia de microcontroladores picfix 16Fxxx.
Entonces, aunque el ensamblaje funciona de manera similar en todos los microprocesadores y microcontroladores, la lista real de instrucciones que escribe es muy diferente. 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.