En la solucion propuesta del problema 2 parte A, creo que queda en un loop infinito en estas lineas:
for2:
CMP DI, DX ; for (j = 0; j < largo ....
JGE finfor2
CMP DI, SI ; if ( i != j)
JE for2
ya que si SI es igual a DI se salta a for2 sin incrementar DI.