C doesn't provide an assembler at all. So if your C implementation provide an assembler that's a non-standard extension. What do you get? It depends, can you use it with a different compiler for the same target? It depends.
So probably you're instead thinking "C is like an assembly language" and that's entirely wrong. The C abstract machine is very weird. No machines exactly like that have ever existed or will ever be built, so you're not programming a real machine. The closest ones were in the 1970s, machines today are very different.
IMO the worst outcome of this "Oh C is just assembler" nonsense is the compound volatile operations.
You probably imagine a line of C like `foo |= 1` ensures `foo` has the LSB set right? You may or may not realise that "Set the LSB of a location in memory" isn't an operation most CPUs have but hey, in C it was a single operation so...
As a hack when compilers got smarter C also has a "volatile" type qualifier, so `foo` can have the type qualifier "volatile" meaning that updates to this variable will definitely happen in memory, the compiler won't just keep `foo` in a CPU register to accelerate things, it has promised to write it back to memory...
So now, `foo |= 1` looks like a single CPU operation which should set the LSB of foo. But of course your CPU probably can't actually do that, so what's really emitted by your C compiler is read foo from memory into a CPU register, set the LSB of that register and then write the whole register back to memory. Which is three distinct operations in sequence, and thus now it can be interrupted by other work and then carry on, despite the fact that meanwhile foo changed...
Oops. The C looks fine, but the machine code generated may introduce a massive bug.
If you do want a language with assembly, Rust provides that. It provides both inline assembler which you can use inside your Rust functions, and bare assembly. Of course that's not safe Rust, but presumably if you wanted to write assembly you were on board with taking the responsibility.