轉載:https://blog.51cto.com/godben/1746144
首先必須明白 cpu和內存的區別
cpu 中央處理器 內存是物理數據存放的地方
cpu不直接存放數據而是通過內存來存放數據
cpu和內存之間通過20條地址總線相連接,地址總線就是cpu通過地址找到對應的內存的物理數據的傳遞工具
計算機只能處理0,1 二進制數據
每一條線可以處理 0,1 兩種類型數據
所以20根線的 總共能擁有 2^20=1048576個不相同的地址 也就是能搜索 1048576個地址范圍內的內存
那么 一個地址代表一個存儲單元 一個存儲單元能夠存儲 1byte數據
那么也就是1048576個地址 能夠找到 1048576個1byte數據=1M的數據
也就是說 20位地址總線總共也就能處理1M的內存 數據
然后cpu的尋址能力只能16位不能達到20位 怎么處理了
cpu的地址都是使用16進制表示
最多也只能找到 2的16次方 個地址 也就是65536個地址 只能處理 也就是只能處理 64K的內存數據 64K內存的電腦能用???
這里就提出了段的概念 將1G的數據划分為 n個段 每一個段 是64K
64K也就是65536個地址 16位的尋址就能找到了這65536個地址了 難道每個64K的 相同的位置的地址都有同一個 但是有n個64MK歇菜了 還是找不到
真正的那個地址啊
如果在加入一個地址了??? 這個地址用來處理n個 這個地址就是段地址
每一個段也就是每一個64K就是一個基地址 段內的數據的地址就是當前基地址的偏移地址
此時 段地址+偏移地址就能夠找到真正的內存數據了
cpu表示的地址為:基地址:偏移地址 (2個16位的地址 2byte)
而偏移地址相當於在首地址的基礎上 移動的距離
比如 0BAC:0100
0BAC是基地址,0100是偏移地址
0BAC 4位的十六進制 表示 16位的2進制數據 轉換后為:
0000 1011 1010 1100
必須要轉換成 20位(也就是5位的16進制) 才能在20位地址總線中傳遞 才能達到 1G的數據訪問范圍
怎么轉換成 20位 能讓數據傳遞到內存中找到物理數據了
內存的物理地址 =基地址*16+偏移地址
內存的物理地址 =0BAC*16+0100=0BAC0+0100=0BBC0H
0BBC0 就是5位的十六進制 就是 4*5=20位了 可以傳遞到內存了
實際傳遞二進制就是:
0000 1011 1011 1100 0000
20根地址總線就能處理了
32位匯編 32根地址總線 總共能夠直接 就找到 2的32次方個地址 也就是4294967296 byte數據 也就是 4G的內存
而且不在將內存分成一段一段 所有的內存區域都是連續的