官术网_书友最值得收藏!

2.2 內存地址組織及存放次序

內存用于存放正在運行的程序及數據,而CPU是根據內存單元的位置信息即內存地址決定從內存的何處取得指令或數據。若內存地址使用n位二進制編碼,地址總數(也稱尋址能力)可達2n個,地址范圍為0~(2n-1)。例如,用10位二進制數,尋址能力可達1 K,地址范圍為0~1111111111 B(0~3FFH)。微機的內存基本單位是字節,用B(Byte)表示,1B=8b(bit),1K=1024,1M=1024K,1G=1024M,1T=1024G。

2.2.1 8086/88 系統的內存組織

8086/88 CPU系統的內存組織是采用分段結構組織的。其原因主要有以下三點。

(1) 8086/88 CPU中的寄存器只有16位,如果采用直接尋址,則尋址能力勢必限制在64KB范圍內,而采用分段組織可以較好地實現擴展CPU的尋址能力,每段的大小可達64KB,不同段的組合則可尋址更大的范圍。

(2)使程序與數據相對獨立,不同存取方式的數據也相對獨立。

(3)便于程序和數據的動態裝配,從一個地方挪到另外一個地方只要更改一下段寄存器的值即可,段內偏移可以不用改變。

其主要缺點是增加了地址計算的復雜度,降低了CPU的執行效率。

2.2.2 內存物理地址的計算方法

內存分段組織后,用段地址及段內偏移地址來表示真正的內存地址(物理地址、絕對地址)。段地址及偏移地址一般稱為相對地址或邏輯地址,同一物理地址可以有多個不同的段地址與偏移地址與其對應。

8086/88 系統內采用20位的物理地址(Physics Address,PA)。系統內規定段的起始地址必須是16的倍數,即低4位二進制一定為0,同時,由于系統內用于存放段地址的寄存器只有16位,無法存放20位的段起始地址信息,既然段的起始地址低4位一定為0,所以干脆就不予保存,也就是說段寄存器中保存的段地址為該段的段起始地址的高16位,反之段的起始地址則為段地址×16。段內偏移地址也叫有效地址EA(Effect Address)。

乘以16即相當于二進制左移4位或十六進制左移1位。

分段組織的物理地址的計算方法如圖2.4所示。

圖2.4 分段組織的物理地址的計算方法

例2.4 DS=1234H,相對于DS的EA=5678H

則物理地址=1234H×10H+5678H=12340H+5678H=179B8H

例2.5 已知DS=2000H,相對于DS偏移EA1為5000H,相對于ES偏移EA2為0800H,則指向同一物理地址的ES為多少?

圖2.5 例2.5示意圖

解:如圖2.5所示。

DS×10H+EA1=ES×10H+EA2

2.2.3 內存單元數據的存放次序

內存的物理地址是按字節單元編址的,若僅僅訪問字節單元則無所謂數據的存放次序,可是1字節的數據表示范圍是很小的(無符號數為0~255,有符號數為-128~+127),所以經常要用多個字節存放一個數據。一個數據占用多字節,必然存在存放次序的問題。在PC系列微機中,數據的存放次序是低地址為低字節,高地址為高字節。例如,(10000H)=12H,(10001H)=34H,(10002H)=56H,(10003H)=78H,按字讀則(10000H)=3412H,按雙字讀則(10000H)=78563412H。

主站蜘蛛池模板: 探索| 雷山县| 霍州市| 湄潭县| 辽阳市| 庆城县| 泌阳县| 沂南县| 玉龙| 普洱| 达尔| 余干县| 邯郸市| 富顺县| 乌海市| 洛宁县| 无锡市| 五峰| 韩城市| 洞头县| 鞍山市| 永嘉县| 长岭县| 保德县| 双桥区| 博湖县| 宜君县| 于都县| 梨树县| 莎车县| 澄迈县| 揭阳市| 穆棱市| 左贡县| 东莞市| 明溪县| 沛县| 武城县| 宁海县| 巩留县| 长海县|