While all of the statements in the posts so far are correct, I think they miss the heart of your question. Let me explain it this way.
In the very early days, there were no compilers and no assemblers and all programming was done as string of 1's and 0'. Folks got tired REALLY quickly of writing all those 1's and 0's and the assembler was invented. This was a human readable language with instructions like "add" but there was always what is known as the principle of one to one correspondence. That is, every assembly instruction corresponded exactly to one machine language instruction --- it was just a short-hand for machined code. Assemblers were written in primitive form in machine code and then bootstrapped to more extensive versions.
After a while, folks got really tired of writing hundreds of lines of assembly code to do really simple things, so they decided to drop the principle of one to one correspondence and do a language that was more mathematical in nature with instruction like "a = b + c". These languages were called compilers and they were written in assembly language. Some of them even PRODUCED assembly language which then had to be assembled, others went straight to machine code.
NOW there are, as was mentioned, cross-assemblers and cross-compilers so you never have to write in machine code if you don't want to.