A ver. C es portable porque se han hecho MUCHOS compiladores. Cada compilador con un ASM distinto para cada arquitectura. ASM es el binario en si, no es portable. C es compilado en cada arquitectura diferente y pasa a diferentes ensambladores. Asi de sencillo.
Todavia me sorprende la paciencia que tienes Eternal Idol

Tampoco es tan dificil
lenguaje C
X86 ARM ETC
-----------------------------------------------
compilador compilador compilador
x86 arm etc
| | |
ensamblador ensamblador ensamblador
x86 arm etc
El C es entendible por cada compilador que lo traduce a su ensamblador de la arquitectura correspondiente.