Knowing assembly is immensely useful for debugging purposes, as well as for reasoning about problems at a low-level (and for violating EULAs).
Assembly isn't really a "programming language" in that way that we normally think, it's more of class of text representation for different CPU's binary machine code. Every CPU architecture has its own machine language that is then represented as an assembly language for us humans, and then different compiler tooling might have different syntax for their assembly languages. When you learn "assembly" what you are really learning is a certain CPU's interface for units of computational intent.
Traditionally speaking, "high level" languages are programming languages that are at a higher level of abstraction than assembly languages, but at some point we went way too far with layers of abstraction where now, C is considered a "low level" language only relative to languages that are huge abstractions to the actual units of computational intent, which are the instructions within binary machine code (technically it's deeper than that with things like micro-ops and whatnot, but as software folks we tend to draw the line at machine code).