Assembly is the closer you can get to the computer hardware with a programming language.
Instead of using IFs, WHILEs, etc., you will move values to registers and memory locations by hand.
If you write a program in C (or C++, Java, Python, etc) you will be able to compile the same code (with some minor changes) on any computer and Operating System. But you won't be able to do the same with Assembly, as it is platform and OS dependent.
You will use Assembly to write hardware drivers or to perform tasks that would take a lot longer using higher level languages.
High performance dependent software (such as games) may use some routines written in ASM to make things faster. You can call an ASM routine from higher level languages.
Just as an example, here goes a small program in Assembly 8086.
This code calculates 6 elements of the Fibonacci numbers.
org 100h
mov cx, 6; n Fibonacci elements
mov ax, 0
mov bx, 1
mov fib, bx
dec cx
repeat:
add fib, ax
mov ax, bx
mov bx, fib
dec cx
jz fim
jmp repeat
end:
ret
fib dw 0
end