Machine code or machine language is a set of instructions executed directly by a computer's central processing unit. Each instruction performs a very specific task, such as a load, a jump, or an ALU operation on a unit of data in a CPU register or memory. Every program directly executed by a CPU is made up of a series of such instructions.it contains just 1 and 0's
An assembly language, is a low-level programming language for a computer, or other programmable device, in which there is a very strong (generally one-to-one) correspondence between the language and the architecture's machine code instructions[*] .Assembly language is converted into executable machine code by a utility program referred to as an assembler. That machine code is machine language. The conversion process is referred to as assembly, or assembling the source code.
[*]basically you can understand this line as in machine language all it is composes of 0's and 1's and it is not very useful while reading.
and it is really very hard to understand 0's and 1's in a very large sequence in real life. so make things easier, assembly language came into existence. it is just one level above the machine language. it is just a substitution of sets of 0's and 1's in human readable format.
for example
let us assume
000 represents addition in machine language.
and 0001 represents number 1.
and 0010 represents number 3.
and together it becomes 00000010010 that is too hard to understand..
so to make it easier you can say that in assembly
000 -> add
0001 -> some_integer1
0010 -> some_integer2
and you can write
add some_integer1,some_integer2 ;
now it is easier to read.
and finally the assembler will convert this assembly code[add some_integer1,someinteger2;] into machine code[00000010010] which cpu can execute directly making computer happy to get the instruction in his own language.
thus assembly is for us. and machine language is for machine..:-)
To read more about assembly language.. visit here
and For machine language. visit here