De hecho ambas se utilizan. Esto, porque usualmente las extensiones "estándares" (aquellas que se han aceptado para formar parte del estándar, pero que por una u otra razón no se han incluído en el mismo) inician con un guión (p.e. _beginthread definido en <process.h>). Además, las extensiones de Microsoft comienzan con dos guiones (p.e. __stdcall).
Cuando VC6 salió, todavía no se ratificaba el estándar de C99 ni el de C++ con la ahora llamada Standard C++ Library, y varios puntos como el _asm. Ahora, con VC7 se dejó _asm por compatibilidad.
Pero puedes emplear ambas, _asm o __asm indistintamente.