Assembler is still used, just much less so these days.
Assembler is a sort of high-level version of the processor's machine code. It adds some helpful functionality to assist in repetitive bits of code, but still requires that the programmer intimately understand the basic processor's instruction set.
It is still used for portions of code that are critical - such as "atomic" operations like disabling or enabling interrupts and speed critical operations. It is also basically REQUIRED at the bootstrap level - somebody has to develop those routines used to interface and initialize hardware components of the system. For most developers, this work is already done, and the remaining tasks are simple enough to do in C/C++.