Hola ., bueno creo que aqui hay confucion ., primero el lenguaje de arduino es C++ (no C)
Lo segundo ., dudo que puedas programar un arduino en ASM ., a menos que desbloques los "FUSEBIT" y borres su BOOTLADER
LO tercero es que al ser C++ ., tiene funciones "emascaradas" ., a la cuales no tienes acceso
Si usas la herramienta de compilacion gratuita ATMELstudio 7xxx ., tenes la posibilidad de programar en tres tipos de lenguaje C++ ., C y ASM
Tambien tiene la funcion de "DISSEMBLER" ., que te podria servir de guia ., para la programacion de un chip nuevo y normal en ASM ., sin ser arduino
Hay muchas cosas que desacuerdo con eso. Pero esto no viene al caso, asi que voy a continuar con el tema.
C es un lenguaje, y C++ es otro, Picuino lo simplifico diciendo que es C ( a pesar que aclaro que es C++ ), y al menos yo los considero 2 lenguajes distintos a pesar que poseen algunas similitudes.
C le va a dar una base, y le va a permitir entender/programar cuaquier micro sin mirar atras, entonces es mi eleccion para el autor del hilo. Por otra parte si te interesa entender las librerias de Arduino vas a tener que ademas de aprender C agregar unas cuantas cosas mas, todo lo referente a clases, inheritance, overloading y no se si se me escapa alguna otra cosa.
Con un conocimiento de C mas un minimo o base de que son las cosas que nombre podrias entender las librerias de Arduino.
Por eso mismo sigo pensando que C seria la mejor opcion.
Respecto a los compiladores, en AVR no puedo proveerte informacion, pero en PIC si venis del ASM, pienso que vas a disfrutar mas usando XC8, y que vas a encontrar muy distinto que CCS por ejemplo, a pesar que este ultimo es muy lindo para alguien que comienza. Esto ya queda a tu criterio de eleccion.
Tutoriales hay bastantes en internet.