São realmente duas perguntas em uma ...
Em primeiro lugar, qual é a diferença entre um microcontrolador e um microprocessador?
Microprocessador é uma CPU puramente que segue um conjunto de instruções lidas em um barramento de memória externo. Ele controla periféricos externos (como tela, teclado, mouse, disco rígido, etc.) através de um barramento de comunicação externo. Quando você programa um microprocessador, seu programa é externo ao dispositivo. Em um computador, essa memória é inicialmente a ROM do BIOS de inicialização, que inicialmente lê o sistema operacional do disco rígido na memória RAM e continua a executá-lo a partir daí.
O microcontrolador é como uma CPU + Memória all-in-one, com algumas portas externas para se comunicar com o mundo exterior. É independente e não usa memória externa para manter seu programa (embora, se necessário, possa ler e gravar dados de trabalho na memória externa).
Em segundo lugar, a programação de um microcontrolador e microprocessador é a mesma?
De certo modo, sim, e de certo modo, não.
Linguagem assembly é um termo amplo que descreve um conjunto de instruções que a CPU pode entender diretamente. Quando você 'compila' a linguagem assembly, ela realmente não compila nada, tudo o que faz é convertê-la em uma sequência de bytes que representa os comandos e os plugs em alguns locais relativos da memória. Isso é comum a microprocessadores e microcontroladores.
No entanto, diferentes tipos de CPU entendem um conjunto diferente de instruções da CPU. Por exemplo, se você escrever um programa em linguagem assembly que funcione com um microcontrolador pic 16F877, será um absurdo completo para um microprocessador ou qualquer outro microcontrolador fora da família 16Fxxx de microcontroladores pic.
Portanto, embora a montagem funcione de maneira semelhante em todos os microprocessadores e microcontroladores, a lista real de instruções que você escreve é muito diferente. Para escrever em linguagem assembly, você precisa ter um conhecimento profundo da arquitetura do dispositivo, que normalmente pode ser obtido na folha de dados no caso de um microcontrolador.