20字节, 或者是1MB,于1979年是相当让人印象深刻的象征。在真实模式下有两种寻址模式:near和far。在 far模式,区段跟偏移都需要被指定;在near模式,只需要偏移模式被指定,而内存区段是由适当的区段缓存器获得。以数据而言是使用DS缓存器,程序代码是CS缓存器,堆栈是SS缓存器。举个例子,如果DS是A000h且SI是5677h,DS:SI会指向计忆体的绝对地址DS × 16 + SI = A5677h
在这种架构下,两对不同的区段/篇移可以指向一个相同的绝对地址。因此如果DS是A111h且SI是4567h,DS:SI会指向跟上一段相同的A5677h。除了duplicity之外,这种架构无法同时一次拥有4个以上的区段。此外,CS、DS和SS是为了程序正确功能而必须的,因此仅仅只有ES可以被用来指向其它的地方。这种模式原本是为了与Intel 8085兼容,导致程序设计师永无止尽的痛苦。
除了以上所说的,8086也拥有8-bit的64K(另一种说法是16-bit的32K)输出输入(en:I/O)空间,以及一个由硬件支持的64K(一个区段)内存堆栈。只有words(2字节)可以被推入到堆栈中。堆栈是由内存的上端往下成长,他的底端是由SS:SP指向。有256个中断(interrupts),可以由硬件或是软件同时组成。中断是可以串连在一起,使用堆栈来储存返回被中断的程序地址。
16位保护模式
Intel 80286可以在不改变任何东西下支持8086的真实模式16位软件,然而它也支持额外的工作模式称为保护模式,可以将可寻址的物理内存扩充到16MB,可寻址的虚拟内存最大到 1GB。这是使用节区缓存器来储存在节区表格中的索引值。处理器中有两个这样的表格,分别为GDT和LDT,每一个可以储存最多8192个节区的描述子,每一个节区可以给予最大到64KB的内存存取。节区表格提供一个24位的基地址(base address),可以用此基地址增加想要的偏移量来创造出一个绝对地址。此外,每一个节区可以被赋予四种权限等级中的一种(称为 "rings")。
尽管这个推出的功能是一项进步,但是他们并没有被广泛地使用,因为保护模式的操作系统无法执行现有的真实模式软件。这样的能力只有在随后80386处理器的虚拟86模式中出现。
在同时,操作系统比如OS/2尝试使用类似乒乓的方法,让处理器在保护和真实模式间切换。这样都会让计算机变慢且不安全,像是在真实模式下的程序可以轻易地使计算机当机。OS/2也定义了限制性的程序设计规则允许"Family API"或"bound"程序可以在真实模式或保护模式下执行。然而这是给原本为保护模式下设计的程序有关,反之则不然。保护模式程序并不支持节区选择子和物理内存之间的关系。有时候会错误地相信在16位保护模式下执行真实模式的程序,导致IBM必须选择使用Intel保留给BIOS的中断呼叫。事实上这类的程序使用任意的选择子数值和使用在上面提到的“节区运算”的方式有关。
这个问题也在Windows 3.x上出现。这个推出版本想要在16位保护模式下执行程序,而先前的版本只能在真实模式下执行。理论上,如果Windows 1.x或2.x程序是写得“适当”且避免使用节区运算的方式,它就有可能在真实和保护模式两者下执行。Windows程序一般来说都会避免节区运算,这是因为Windows实作出软件的虚拟内存方式,及当程序不执行时候,搬移内存中的程序代码和数据,所以操作绝对地址的方式是很危险的;当程序不执行时,被认为要保持内存区块的“handles”,这样的handles已经非常相当于保护模式的选择子。在保护模式下的Windows 3.0执行一个旧的程序,会触发一个警告对话盒,建议在真实模式下执行Windows(推测还是仍然可以使用扩充内存,可能是在80386机器用EMM386模拟,因此它并不被局限于640KB)或是从厂商那更新到新的版本。好的行为之程序可能可以使用特别的工具来避免这样的对话盒。不可能有些GUI程序在16位保护模式下执行,且其它GUI程序在真实模式执行,可能是因为这会需要两个分开的环境且会依于前面所提到的处理器在两个模式间的乒乓效应。从Windows 3.1版开始,真实模式就消失了。