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

chrstrbrts

Senior member
Aug 12, 2014
522
3
81
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?
 

TheRyuu

Diamond Member
Dec 3, 2005
5,479
14
81
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
 

Ken g6

Programming Moderator, Elite Member
Moderator
Dec 11, 1999
16,574
4,487
75
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. :confused:
 

exdeath

Lifer
Jan 29, 2004
13,679
10
81
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:

chrstrbrts

Senior member
Aug 12, 2014
522
3
81
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?