Assembly language is a human expression or 'language' that is almost one for one with the actual machine opcodes that comprise how a central processing unit (cpu ) execute operations on its registers.
An example would be the expression mov ax, #1006, what this actually represents is a numeric code that is dependent on the type of microprocessor you are writing for. The mov ax, #1006 is intel syntax while ld #1006, ax is if I recall correctly the Zylog syntax. Both would end up looking like three or four bytes of the same numbers that would be interpreted by the cup to move the number 1006 into the ax register. When people generally speak of assembly language they are actually talking about the human syntactical language interface that an assembler turns into a binary image that is understood by the cpu as a sequence of instructions that represents a program. Instructions are usually binary operations on a cpu's registers or memory. Embedded software engineers use assembly language to interface to hardware and other 'system' resources; however, much of this can also be done in c.