But the memory address that the segment register+offset register forms is not a real memory address, it has to be converted first into another real memory address and then it can be used for reading or writing.
The only transformation is the “segment × 16 + offset” calculation, which yields a physical address which is emitted as-is on the address bus. There is no further transformation.
But why doesn't the Intel 8086 CPU use real memory addresses from the beginning?
I’ve interpreted “from the beginning” as “internally”, or “in its address registers”, and your overall question as “why doesn’t the Intel 8086 CPU manipulate 20-bit physical addresses internally”, or as I put it earlier, “why does the Intel 8086 CPU encode its physical addresses using a segment and offset” (instead of a single 20-bit value).
The simple answer to that is that it’s a 16-bit CPU, with 16-bit-wide registers (and words); so its 20-bit addresses can’t be represented using a single register, and it can’t perform arithmetic on them. The designers of the 8086 considered other approaches; Intel Microprocessors: 8008 to 8086 says that
Various alternatives for extending the 8080 address space were considered. One such alternative consisted of appending 8 rather than 4 low-order zero bits to the contents of a segment register, thereby providing a 24-bit physical address capable of addressing up to 16 megabytes of memory. This was rejected for the following reasons:
Segments would be forced to start on 256-byte boundaries, resulting in excessive memory fragmentation.
The 4 additional pins that would he required on the chip were not available.
It was felt that a 1-megabyte address space was sufficient.
Beyond the technical considerations of supporting 24-bit- or 32-bit-wide addresses, there were also backward-compatibility considerations which led to the use of 16-bit-wide registers only; these are detailed in the answers to Why didn't the 8086 use linear addressing?
When developing on the 8086, developers didn’t really consider the segment:offset addresses as any different from physical memory addresses; I know my brain could quickly perform the shift and addition involved (helped by the choice of segment addresses which were usually “nice to handle”).
This ignores the address decoding hardware, which can of course do anything it likes; see Does the Intel 8085 CPU use real memory addresses? for related discussions.
DS
and a specified offset is little different from doing an effective address calculation based on any other register, such asIX
plus a fixed offset in a 6800 CPU. There is no further conversion after the DS*0x10+offset calculation; that result is presented directly on the external address bus.