How does ASM differ from normal C programming?
ASM is basically low level programming or machine oriented programming (directly speaks to the hardware). Though C programming can be used both as low level and high level programming language or problem oriented language (normally working as front end with no control for the hardware) it is hence called a middle level programming language. We have cross C compilers for almost all of the microcontrollers today. For instance, for the 8051 architecture we have compilers from Keil Software and SDCC (Small Device C Compiler).