For memory mapped I/O they use RAM addresses. Easy to implement in hardware. For port mapped I/O they use separate I/O addresses. Hard to implement in hardware. Microprocessor just adds on to the complication in your life. Focus on basics first dude, rest will follow.