Even if you were to do development in MSDOS, you'd still run into issues trying to communicate with some of the hardware. For example, most video card manufactures will not release the direct interface specifications for their hardware. Instead you have to go through BIOS calls to change between text and graphics modes on the video cards, load fonts, ..., . Once it's in graphics mode, you can directly write to a portion of the graphical memory, but then you need BIOS calls to switch between banks of video card memory.
You can still get specification the comon components on older PC's, timer, keyboard, serial port, game port, floppy disk port, IDE hard drive port, but I'm not sure where you can buy an older PC. Newer PC's don't have game ports or floppy ports, and emulate the old IDE interface for use with SATA drives.
If your goal is to learn assembly language, learning to program the hardware would be a secondary goal. In the meantime, you could focus on writing MSDOS programs that use the standard BIOS and MSDOS function calls (these are INT instructions). If you wanted to program hardware, the timer chip would probably be the easiest to learn, perhaps writing a program that determines run time with a high degree of accuracy.
You might consider some type of "hobbyist" project kit with a single board, cpu, ram, and some hardware, but I don't know if these exist anymore. Another possibility is some type of virtualized hardware: for example, a development kit for the ARM cpu includes an emulator with source code level debugger, but it doesn't have any virtual devices, and it's expensive (unless there's a student version of the kit). I don't know if there are any cheap or free virtualized machines that include virtualized hardware and a proper development environment.