Estou baseando isso principalmente nos montadores que usei - principalmente MASM, NASM e (em menor grau) TASM. Algumas das versões posteriores do TASM tinham (possuem?) Alguns recursos para oferecer suporte ao OO, mas eu não as usei muito e não estou tentando comentá-las.
Primeiro: a maioria das línguas mudou para uma estrutura que é pelo menos um pouco parecida com uma árvore. Seja orientado a objeto, baseado em objeto ou exatamente o que, há um pouco definido sobre os relacionamentos entre diferentes partes de um sistema. Há também bastante para "proteger" uma parte de um sistema de "intromissão" acidental, mas outras (mesmo que a proteção possa geralmente ser ignorada, se você quiser). Por outro lado, a linguagem assembly é relativamente "plana" - a maioria dos relacionamentos entre o código (e os dados) em diferentes partes do sistema é estabelecida principalmente pela documentação e, em menor grau, pelas convenções de nomenclatura.
O resultado disso é que muitas vezes é muito mais fácil associar códigos com muito mais rigor do que seria ideal. Os requisitos que levaram à escolha da linguagem assembly (desempenho superior, tamanho menor etc.) geralmente recompensam isso também - ignorando as interfaces aprovadas e você pode obter código menor e mais rápido (embora geralmente não seja muito) melhor em qualquer dimensão). A linguagem e as próprias ferramentas fazem muito menos para restringir o que você faz (bom ou ruim), o que impõe uma carga muito maior aos gerentes para evitar problemas. Eu não diria que é qualitativamente diferente, mas quantitativamente é - ou seja, o gerenciamento precisa trabalhar para evitar problemas de qualquer maneira, mas no caso da linguagem assembly geralmente é necessário mais (e muitas vezes mais rigoroso) diretrizes sobre o que é ou não é ' t aceitável.
Atenuar isso é em grande parte uma questão de diretrizes mais cuidadosas, mais orientações de pessoal mais experiente e convenções de nomes mais específicas e cuidadosamente aplicadas.
O pessoal é um problema. Os problemas que encontrei, no entanto, não eram principalmente os que eu esperava. Encontrar caras com um pouco de personalidade de "lutador de atleta" que estavam felizes em entrar no código da linguagem assembly era bastante fácil. A maioria fez um trabalho bastante razoável, apesar da quase total falta de experiência anterior no uso da linguagem assembly.
A dificuldade que encontrei foi em encontrar mais funcionários seniores - pessoas que pudessem manter o projeto sob pelo menos alguma aparência de controle e não estavam completamente acostumadas a idiomas que forneceriam (e aplicariam amplamente) as diretrizes necessárias para manter o código razoavelmente sustentável e compreensível.
Olhando para trás, eu posso ter causado / causado alguns dos maiores problemas a esse respeito. Eu posso ver duas fontes de problemas da minha parte. Primeiro, no momento em que estou pensando no projeto, eu já estava codificando principalmente em linguagens de nível superior por um bom tempo e usando apenas a linguagem assemblycomo último recurso. Como tal, quando o usei, quase todos os truques possíveis para obter desempenho não eram apenas jogos justos, mas esperados. Segundo, quando eu havia trabalhado em alguns sistemas escritos inteiramente (ou principalmente) em linguagem assembly, ele estava sob alguns gerentes de projetos com punho de ferro. Na época, eu era relativamente jovem e, francamente, se ressentia da maneira como eles administravam as coisas, então tendiam a fazer o oposto. Em retrospecto, o que eles estavam fazendo era realmente importante, e não feito apenas porque eram velhos e inflexíveis (o que, tenho certeza, foi como vi as coisas na época).