I remember using FreeDOS for learning assembly through the `debug` command. Looking at the BIOS data was fun for me at the time. I've also tried DOSBox but since it's emulated the BIOS data wasn't "real".
I have not yet found an equivalent of the `debug` command for Linux. Ppl told me `gdb` could do the same but I found debug easier to use.
You can do more or less the same with e.g. objdump, but the root difference is that DOS COM binaries are very simple: basically a tiny header then the whole program in a big chunk.
More modern formats (be it PE, ELF, Mach-o, ...) are far more complex, with many different segments, running in a more complex CPU mode, generally dynamically linked, and all the other bell and whistles. So even if you had an identical debug.exe for Linux, it would still be much harder to make sense of.
> basically a tiny header then the whole program in a big chunk.
This is inaccurate. A DOS .com executable has no header whatsoever. It is literally just the program code and data with absolutely no metadata at all. It is loaded at memory address 0x100 and then execution begins, also at 0x100.
It is possible to have a 0 byte .com executable and it will perform a useful function. 0 bytes are loaded to 0x100 and then execution begins at 0x100, effectively re-running the last program run. Commonly such a file was named "go.com".
I have not yet found an equivalent of the `debug` command for Linux. Ppl told me `gdb` could do the same but I found debug easier to use.