在计算机系统中,为了方便CPU读写内存中的数据,需要对内存进行寻址。而8086是一种16位的CPU,它的物理地址是由两个8位的地址组合而成的,共16位。这个物理地址表示的是CPU需要访问的内存单元的实际物理位置,与虚拟地址和逻辑地址不同,是实际存在于内存中的。
8086的物理地址总共可以表示2^16=65536个内存单元,每个内存单元大小为1字节,因此8086的物理地址空间大小是64KB。
物理地址直接对应内存条上的存储单元,每个物理地址可以对应唯一的内存单元。在8086的物理地址中,高8位是内存条中的段地址,低8位是内存条内的偏移地址,通过这两个地址确定了在内存条中的具体位置。因此在编程时,可以通过对物理地址的操作来对内存进行读写。
需要注意的是,物理地址与内存条的关系受到存储器芯片的管理方式的影响。在SMM(Single Modul Memory)方式下,物理地址与实际的内存芯片直接对应;在SPD(Serial Presence Detect)方式下,需要通过SPD芯片进行转换。
物理地址的划分方式一般有两种:实模式和保护模式。在实模式下,物理地址直接对应内存条的存储单元,在保护模式下,物理地址划分为许多个段,每个段大小为64KB,每个段内部采用偏移地址加上段基地址的方式计算物理地址。
实模式下,物理地址空间大小为1MB,可以访问整个内存;而保护模式下,由于对物理地址进行了分段处理,可以访问的物理地址空间大小为4GB,远大于实模式。同时,保护模式下还可以设置段属性,具有更高的安全性。
在编程中,通过对物理地址的读写可以实现对内存的操作。访问内存需要使用特定的指令,如MOV指令可以将数据从内存读入寄存器,或者将寄存器的值写入内存。读写内存的操作需要考虑内存的大小、地址等因素,还要注意内存保护等问题。
寻址方式也可以不直接使用物理地址,而是使用逻辑地址或虚拟地址。在8086中,逻辑地址是由段地址和偏移地址组合而成的,需要通过操作系统的转换机制转换成物理地址才能被CPU实际访问。虚拟地址是在操作系统内部使用的地址,可以对逻辑地址进行更高级别的管理。