• We’re currently investigating an issue related to the forum theme and styling that is impacting page layout and visual formatting. The problem has been identified, and we are actively working on a resolution. There is no impact to user data or functionality, this is strictly a front-end display issue. We’ll post an update once the fix has been deployed. Thanks for your patience while we get this sorted.

How large is the I/O port space for modern x86 platforms?

chrstrbrts

Senior member
Hello,

I'm asking about the I/O memory space, not the memory mapped space where the RAM is located.

You know, the memory space reached by using the 'in/out' opcodes, not the 'mov' opcode.

I think the keyboard controller is located in the I/O space as well as the configuration registers for the chipset.

I know that a 64 bit processor will have a theoretical address space of 2^64.

Would its I/O space be just as large?

Also, do the two spaces use the same physical bus system?
 
I know that a 64 bit processor will have a theoretical address space of 2^64.

The current implementation on x86-64 only uses 47 bits[1]. This leaves you with 256TB for the address space for a process which is divided in half where each half is used by user mode and the kernel respectively.

I'm not entirely sure what you mean by I/O port space, files can be memory mapped so your limitations in that case will be the same as what applies to memory. You may be referring to something completely different so if that's the case ignore that part.

[1] https://en.wikipedia.org/wiki/X86-64#Virtual_address_space_details
 
I looked up the OUT instruction on x86/x86-64. They seem to be the same instruction - there's no 64-bit variant - and only have 64K addresses available (addressed by the DX register). However, I don't totally understand what that means. 😕
 
IN/OUT IO addressing is legacy and not used anymore. It remains 16 bits and 64k.

Physically it uses the same A/D lines as a MOV, the only difference is the status/control bus specifies an IO operation vs a MEM operation and this was used in address decoding by external hardware.

Inability to memory map, inefficient use of today's wider buses, no DMA, no more ISA bus, plenty of reasons IO should be avoided. Its there for backwards compatibility because it was on the 8088 and nothing more. It was there to expand the 1 MB address space of the 8088 at a time address space and pin counts were the limiting factors of IC manufacturing.
 
Last edited:
IN/OUT IO addressing is legacy and not used anymore. It remains 16 bits and 64k.

Physically it uses the same A/D lines as a MOV, the only difference is the status/control bus specifies an IO operation vs a MEM operation and this was used in address decoding by external hardware.

Inability to memory map, inefficient use of today's wider buses, no DMA, no more ISA bus, plenty of reasons IO should be avoided. Its there for backwards compatibility because it was on the 8088 and nothing more. It was there to expand the 1 MB address space of the 8088 at a time address space and pin counts were the limiting factors of IC manufacturing.

OK.

But, isn't the IO addressing space used by the firmware to initialize and communicate with certain ROM / control registers on peripheral devices prior to boot?
 
Back
Top