Answer:
Assembly language is 1 step above machine language. In assembly language you can use mnemonics to represent what you want to do. For example, to compare two numbers together I could represent the sequence as:
L R1, Value1 load the first value
C R1, Value2 compare against the second value
JG First first value greater than second
As you can see, there is some symbology here that allows me to determine what the program logic is doing. Note that the above code is not understandable to a computer circuit; it has to be translated to machine code. And that is what assembly code is; a symbolic human representation of what the machine is supposed to do.
Machine code on the other hand, is usually the targeted result of translating assembly code to the machine equivalent. The machine circuit only understands a sequence of zeros and ones, and is not immediately understandable to a human. The result of the program sequence above in machine code might look something like:
111001101101100000111100011000101010
Which makes sense to a machine, but not a human.