CPU訪問內存時要給出內存單元的地址(內存地址),每個內存單元都有一個唯一的地址,稱之爲物理地址。
首先給出一個公式:
物理地址=段地址x16+偏移地址
物理地址指的是cpu訪問內存數據的內存地址,段地址指的是8086cpu的16位的地址總線,偏移地址也指的是16位的地址總線。
什麼是段地址?
首先我們知道8086cpu有20位的地址總線,而8086機是16位機,也即字長是16位,16位機描述了:
- 運算器一次最多處理16位的數據
- 寄存器的最大寬度爲16位
- 寄存器和運算器之間的通路位16位
那麼8086CPU是如何給出20位的物理地址呢?
首先對於16位機來說20位的地址總線多出了4條線,那麼是否可以從這裏下手呢?通過位運算,可以知道16位機比與20條地址總線的20位機來說少了四位,那麼可以通過乘以16的方法,擴展爲與20位機同等的大小,那麼這時候的段地址可以作爲基址地址,而另外的16位地址值可以作爲偏移地址。
"段地址X16+偏移地址=物理地址"的本質含義是CPU在訪問內存時用一個基礎地址和一個相對於基礎地址的偏移地址相加,給出內存單元的內存地址。
在內存棧結構中就是採用的這個思想。