Regardless what language you write a program/virus in, once you compile it, it will be in machine specific, machine code. This code fits and entire architecture, like x86 and thus can spread to any machine that fits this steriotype. Assembly, C++, and other languages can all produce the same program. High level languages just allow you to potentially compile a program on a different architeture whereas assembly is predetermined.