100
votes
Accepted
Why didn't the 8086 use linear addressing?
For once, I do have a direct source for a "Why didn't they ...?" question. Eric Isaacson, back in the late '80s and '90s, wrote a commercial assembler for the 8086, called A86. (His ...
29
votes
Does the Intel 8085 CPU use real memory addresses?
The 8085 is effectively the same as the 8080 microprocessor. The 8080 has a flat 16-bit address space and no segment registers. So yes, the 8085 uses real memory addresses without any translation.
28
votes
Accepted
How can a 32-bit x86 CPU start with reset vector 0xFFFFFFF0 even though it starts in 16-bit real mode?
When x86 boots, it's not strictly in classic real mode, it's in "unreal" mode, with CS.base = 0xFFFF0000 and CS.limit = 64K.
On 286 and later, memory addressing doesn't use the segment ...
27
votes
Accepted
What happens when the segment plus offset overflows 20 bits?
On an 8086, yes, the address space wraps around. Thus a segment address of F001h and an offset of FFF0h, producing an address of F0010h + FFF0h = 100000h, wraps around to 00000h.
The 8088, 8086, 80188 ...
27
votes
Why didn't the 8086 use linear addressing?
The 8086 used a segmented memory architecture where the linear address was computed from a 16-bit segment number and a 16-bit offset. This greatly complicated things from a programming perspective.
I ...
27
votes
Accepted
How to write directly to video memory using "debug.exe" in MS-DOS?
You need to use a segment and offset, 0xB8000 can’t be represented directly in 16 bits:
mov ax, b800
mov ds, ax
; set AX appropriately here, or write an immediate value
mov [0000], ax
You need to go ...
20
votes
Accepted
Which operating systems for 80286 computers allowed a process to use more than 128k data?
OS/2 supported “huge memory” on 286s. The New Executable format used for 16-bit OS/2 executables (and 16-bit Windows executables) supports multiple segments. At runtime, using the DosAllocHuge ...
16
votes
How can a 32-bit x86 CPU start with reset vector 0xFFFFFFF0 even though it starts in 16-bit real mode?
To understand this, you need to understand the basics of segment:offset addressing in protected mode: the segment value points to a descriptor, which contains a base address, segment limit and various ...
15
votes
Does the Intel 8085 CPU use real memory addresses?
Simply Yes.
A basic 8080/85 (or Z80) does just output the 16 bit address generated by an instruction. There is no inherent translation, Segmentation or whatsoever.
15
votes
Why didn't the 8086 use linear addressing?
I am pretty sure the Intel engineers just weren't there, yet. And they were pressed by the market to push out a 16-bit CPU before all the others did to keep the market share they had already lost big ...
9
votes
Why didn't the 8086 use linear addressing?
The 8086/8088 is designed to be a 16-bit CPU which means that its registers are all 16 bit wide. You can address 64kB with a 16-bit pointer, but the designers wanted to address more. So what are the ...
8
votes
How can a 32-bit x86 CPU start with reset vector 0xFFFFFFF0 even though it starts in 16-bit real mode?
In short, yes the 386 will boot from 0xFFFFFFF0 address mentioned in real mode, because CS selector base is set to 0xFFFF0000 and IP will be 0x0000FFF0. The value of the CS register itself is ...
6
votes
Why didn't the 8086 use linear addressing?
Source code compatibility (via assembly language translation) with the 8080/8085, as mentioned in the question, was a major design consideration with the 8086. To bootstrap the usefulness of the ...
6
votes
Why didn't the 8086 use linear addressing?
There's another point I haven't seen anybody mention.
When Intel released the 8086, they were already working on the iAPX 432.
Intel's intent was that the iAPX 432 would be the CPU that would become ...
6
votes
Does the Intel 8085 CPU use real memory addresses?
We might speak to what happens within the CPU and what happens or can happen external to the CPU.
Between the CPU and memory subsystem, there is an address bus and a data bus (among some other ...
5
votes
Does the Intel 8085 CPU use real memory addresses?
The Intel 8085 CPU can only send out 16-bit addresses.
What happens to those 16-bit addresses is out of the control of the CPU.
In a normal system, some number of those bits would be sent to every ...
4
votes
Does the Intel 8085 CPU use real memory addresses?
Depends on the memory subsystem and what you mean by "real memory" and memory address. It's possible some 8085 systems had multiple external memory banks (e.g. totaling more than 64 kB) switched by ...
4
votes
Why didn't the 8086 use linear addressing?
The 8086 was 16-bit processor, and thus could only access 64K of RAM. IIRC, the 8086 had 20 memory address lines, so it could address up to 1M of RAM. In order to directly address this memory, they ...
4
votes
Why doesn't the Intel 8086 CPU use real memory addresses?
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 ...
3
votes
Does the Intel 8085 CPU use real memory addresses?
In fact, both the 8086 and the 8085 use real addressing.
The 8085, like the 8080, has a 16-bits address space from $0000 to $FFFF (65536 bytes). You can use any 16-bit register to hold an address, or ...
3
votes
Was there ever a compiler type that was just large enough to contain a memory segment?
To summarize what @traal linked to above, the recommended practice for DOS systems was as follows:
Pointers are 32 bit (unsigned long)
To get the segment for a pointer use the FP_SEG macro from DOS.H
...
2
votes
Was there ever a compiler type that was just large enough to contain a memory segment?
No; size_t has to cover every possible size of a data structure which could be defined; as soon as a model allowed an array larger than 64kb, size_t had to be a 32 bit type, and there was no point in ...
1
vote
How can a 32-bit x86 CPU start with reset vector 0xFFFFFFF0 even though it starts in 16-bit real mode?
I'm putting this in as a separate answer since some people might disagree with my logic and it will give them a chance to downvote me.
If you're interested and have the time, I think you'll find https:...
1
vote
Why didn't the 8086 use linear addressing?
It is convenient to be able to address data as separate from code. It is convenient to be able to set aside space for the stack so that you can guarantee that it won't overrun anything too.
This ...
1
vote
Was there ever a compiler type that was just large enough to contain a memory segment?
For 80286 (or higher) processors, there is a Windows 3.x memory model that runs in protected mode to go beyond the real mode 1MB limit, using selectors instead of real mode segments. A block of ...
Only top scored, non community-wiki answers of a minimum length are eligible
Related Tags
segmentation × 9history × 2
programming × 2
cpu × 2
8086 × 2
ms-dos × 1
assembly × 1
operating-system × 1
c × 1
memory-layout × 1
compilers × 1
x86 × 1
design-choices × 1
80286 × 1
80386 × 1
real-mode × 1