Escrever em montagem não daria a você um aumento mágico de velocidade, devido à quantidade de detalhes (alocação de registro etc.), você provavelmente escreverá o algoritmo mais trivial de todos os tempos.
Além disso, com a montagem de processadores modernos (lida - projetada após os anos 70-80) não fornecerá um número suficiente de detalhes para saber o que está acontecendo (isto é - na maioria dos processadores). As PU modernas (CPUs e GPUs) são bastante complexas no que diz respeito às instruções de programação. Conhecer os conceitos básicos de montagem (ou pseudo-montagem) permitirá entender os livros / cursos de arquitetura de computadores que forneceriam conhecimento adicional (caches, execução fora de ordem, MMU etc.). Normalmente você não precisa conhecer o ISA complexo para entendê-los (o MIPS 5 é bastante popular no IIRC).
Por que entender processador? Isso pode lhe dar muito mais entendimento do que está acontecendo. Digamos que você escreva multiplicação de matrizes de maneira ingênua:
for i from 0 to N
for j from 0 to N
for k from 0 to N
A[i][j] += B[i][k] + C[k][j]
Pode ser 'bom o suficiente' para o seu objetivo (se for uma matriz 4x4, pode ser compilado para instruções vetoriais de qualquer maneira). No entanto, existem programas muito importantes quando você compila matrizes maciças - como otimizá-las? Se você escrever o código no assembly, poderá obter alguns% de melhoria (a menos que faça o que a maioria das pessoas faz - também de maneira ingênua, subutilizando registros, carregando / armazenando na memória constantemente e, com efeito, tendo um programa mais lento do que na linguagem HL) .
No entanto, você pode reverter duas linhas e obter desempenho magicamente (por que? Deixo como 'lição de casa') - o IIRC, dependendo de vários fatores para matrizes grandes, pode ser até 10x.
for i from 0 to N
for k from 0 to N
for j from 0 to N
A[i][j] += B[i][k] + C[k][j]
Dito isto - há trabalhos em compiladores capazes de fazê-lo ( grafite para gcc e Polly para qualquer coisa usando LLVM). Eles são capazes de transformá-lo em (desculpe - estou escrevendo bloqueando a memória):
for i from 0 to N
for K from 0 to N/n
for J from 0 to N/n
for kk from 0 to n
for jj from 0 to n
k = K*n + kk
j = J*n + jj
A[i][j] += B[i][k] + C[k][j]
Para resumir, o conhecimento básico de uma montagem permite que você explore vários 'detalhes' do design do processador, o que permitiria escrever programas mais rápidos. Talvez seja bom conhecer as diferenças entre as arquiteturas RISC / CISC ou VLIW / processador de vetor / SIMD / .... No entanto, eu não começaria com x86, pois eles tendem a ser bastante complicados (possivelmente ARM também) - saber o que é um registro etc. é IMHO suficiente para iniciar.