Not exactly. Standard x86 CPU/chipset designs have (until recently) limited the standard range of physical memory addresses to 0-4GB (2^32). These limits were designed-in many years ago when tens of megabytes of RAM seemed like a lot of RAM. Standard OSs (32-bit OSs like Win XP) written for these CPUs have incorporated this limit by being written to work on this standard hardware.
Part of this standard hardware design is that certain hardware components/devices are assigned one or more memory addresses (not actual memory, just the addresses) out of the 4GB "universe" of addresses. For example, an I/O port might be assigned a specific memory address for its output. Whenever the CPU writes data to that address, instead of being stored in memory, the data will be sent out the I/O port. This doesn't use any main RAM, but does use up an address.
Whatever addresses are not used by the hardware are then available to be assigned to the main system RAM. Any RAM without an address cannot be accessed, and so is not usable and not visible to the OS. Until recently, installed system RAM amounts were small enough that there were always plenty of addresses for both the system RAM and the hardware.
During the boot process, the BIOS program identifies what hardware is present and allocates memory addresses to it as needed. Some BIOSes may "waste" addresses during this allocation process for reasons of performance, hardware design, or even BIOS design. One can also inactivate certain hardware in the BIOS, thus reducing the addresses allocated, but in practice for a standard general-purpose system, this won't save many addresses for main RAM.
In practice, the number of addresses gained by re-writing BIOSes and re-designing hardware to be more efficient in the allocation of addresses for hardware would not significantly delay the need to move to 64-bit OSs, and might result in significant hardware incompatibility. Thus, the practical limit of usable system RAM for a standard Win XP (and presumably, 32-bit Vista) system is around 3GB.
There are hardware extensions that allow accessing more than 4GB of physical addresses with a 32-bit OS, but both the OS and apps (and often hardware drivers) need to be specially designed to make use of them.