In the "good old days" before high level computer languages, it was necessary to make computer programs using the actual code that the machine would understand.
Given that such code is actually in binary when in the computer's store this was a bit difficult. Loading 100100110100010010010010 into a memory location was difficult.
The first step was to allow users to enter such vales to the machine as octal numbers, must easier to use, but still a pain, and of course you had to work out the numeric value that was the equivalent of the instruction you wanted to give.
So "Load accumulator 3 with 137" might actually be 76346121 in octal, easier to type, but harder to work out in the first place.
Wouldn't it be nice to be able to type:
LDX 3 137
Instead, and have the computer itself convert this to 76346121 for you? Well, that is what an assembler does.
To end up with an executable program, you need a second pass over your list of instructions. From a "linker" - but I'm not going to explain that here. The answer is already too long......
An assembler is a type of computer program that interprets software programs written in assembly language into machine language