Depends on what you’re doing I guess. I finished writing my first Linux driver recently. A character device that interfaces with an FPGA via PCIe. No assembly language required. The Linux Device Driver book gave more than enough of an overview of PCI to understand what to do without reading the PCIe spec. Like anything you have to do deep dives when needed. I ended up having to learn a bit about the encoding and overhead of data sent on the PCIe bus when we were trying to understand some bandwidth issues we were having. I’ve done a decent bit of embedded work. You’re more likely to have the data sheets for the device you’re working on printed out and marked up than you are the spec for whatever bus the device uses.