In part, improvements in compiler technology and hardware speed made high-level languages competitive. New architectures have been emerging faster than any feasible rate of manual recoding for legacy software.
New techniques can handle legacy assembly code, such as emulation and emulation-backed translation.
But the combination of the two problems above has overwhelmed any consideration based on absolute coding efficiency. We can now draw an interesting analogy. Until very recently no major language was on-line portable. That is, one could not take a running program and port it to a different architecture while the program was running. Connections to computers based on unknown architectures are established faster than the time it takes to recompile source code.