基地址和偏移地址的概念
首先必須明白 cpu和內(nèi)存的區(qū)別
cpu 中央處理器 內(nèi)存是物理數(shù)據(jù)存放的地方
cpu不直接存放數(shù)據(jù)而是通過內(nèi)存來存放數(shù)據(jù)
cpu和內(nèi)存之間通過20條地址總線相連接,地址總線就是cpu通過地址找到對(duì)應(yīng)的內(nèi)存的物理數(shù)據(jù)的傳遞工具
計(jì)算機(jī)只能處理0,1 二進(jìn)制數(shù)據(jù)
每一條線可以處理 0,1 兩種類型數(shù)據(jù)
所以20根線的 總共能擁有 2^20=1048576個(gè)不相同的地址 也就是能搜索 1048576個(gè)地址范圍內(nèi)的內(nèi)存
那么 一個(gè)地址代表一個(gè)存儲(chǔ)單元 一個(gè)存儲(chǔ)單元能夠存儲(chǔ) 1byte數(shù)據(jù)
那么也就是1048576個(gè)地址 能夠找到 1048576個(gè)1byte數(shù)據(jù)=1M的數(shù)據(jù)
也就是說 20位地址總線總共也就能處理1M的內(nèi)存 數(shù)據(jù)
?
然后cpu的尋址能力只能16位不能達(dá)到20位 怎么處理了
cpu的地址都是使用16進(jìn)制表示
最多也只能找到 2的16次方 個(gè)地址 也就是65536個(gè)地址 只能處理 也就是只能處理 64K的內(nèi)存數(shù)據(jù)? 64K內(nèi)存的電腦能用???
這里就提出了段的概念 將1G的數(shù)據(jù)劃分為 n個(gè)段 每一個(gè)段 是64K
64K也就是65536個(gè)地址?? 16位的尋址就能找到了這65536個(gè)地址了? 難道每個(gè)64K的?相同的位置的地址都有同一個(gè)????但是有n個(gè)64MK歇菜了 還是找不到
真正的那個(gè)地址啊??
如果在加入一個(gè)地址了??? 這個(gè)地址用來處理n個(gè) 這個(gè)地址就是段地址
每一個(gè)段也就是每一個(gè)64K就是一個(gè)基地址? 段內(nèi)的數(shù)據(jù)的地址就是當(dāng)前基地址的偏移地址
此時(shí) 段地址+偏移地址就能夠找到真正的內(nèi)存數(shù)據(jù)了
cpu表示的地址為:基地址:偏移地址 (2個(gè)16位的地址 2byte)
?
而偏移地址相當(dāng)于在首地址的基礎(chǔ)上 移動(dòng)的距離
比如?0BAC:0100
0BAC是基地址,0100是偏移地址
0BAC 4位的十六進(jìn)制 表示 16位的2進(jìn)制數(shù)據(jù) 轉(zhuǎn)換后為:
0000 1011 1010 1100 ??
必須要轉(zhuǎn)換成 20位(也就是5位的16進(jìn)制) 才能在20位地址總線中傳遞 才能達(dá)到 1G的數(shù)據(jù)訪問范圍
怎么轉(zhuǎn)換成 20位 能讓數(shù)據(jù)傳遞到內(nèi)存中找到物理數(shù)據(jù)了
內(nèi)存的物理地址 =基地址*16+偏移地址
內(nèi)存的物理地址 =0BAC*16+0100=0BAC0+0100=0BBC0H
0BBC0 就是5位的十六進(jìn)制 ?就是 4*5=20位了 可以傳遞到內(nèi)存了
實(shí)際傳遞二進(jìn)制就是:
0000 1011 1011 1100 0000
20根地址總線就能處理了
32位匯編 32根地址總線 總共能夠直接 就找到? 2的32次方個(gè)地址 也就是4294967296 byte數(shù)據(jù) 也就是 4G的內(nèi)存
而且不在將內(nèi)存分成一段一段 所有的內(nèi)存區(qū)域都是連續(xù)的?
總結(jié)
以上是生活随笔為你收集整理的基地址和偏移地址的概念的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: masm中常用的伪指令
- 下一篇: 排序算法——插入排序