Intel 80x86 定址方式
隨著學習的深入,我們會逐漸接觸到計算機內部的構造方式,以及設計原理,這其中,計算機的定址方式是一個很重要的概念,我們需要好好理解一下。
一.預備知識:
(1)運算元
在接觸定址方式之前,我們還要先了解一下運算元的概念,根據運算元存放方式的不同,我們可以將運算元分成3類,
1.立即運算元:運算元包含在本條指令中;
2.暫存器運算元:運算元存放在CPU的某個暫存器中;
3.儲存器(記憶體)運算元:運算元存放在儲存器中;
(2)邏輯地址
邏輯地址 = 段地址(儲存單元所在邏輯段地址)左移4位 + 偏移地址(該單元的偏移地址)
我們可以發現,這是通過左移的方式將16位擴充套件成了20位,當初好像因為為了方便處理相容問題,才採用這種擴充套件方式的。
段 是記憶體設計模型的結果,在80x86記憶體模型中,各處理器的地址空間不一致(因為要保持相容性),但它們都被分割成以64KB為單位的區域,每個這樣的區域稱為段。
note:不同的段地址和偏移地址可能組成相同的記憶體地址,如:(段地址(左移4為後):A0000,偏移地址FFFF,最終地址AFFFF; 段地址(左移4位後):AFFF0,偏移 地址000F,最終地址AFFFF)。
二.定址方式的分類:
運算元型別的相同,也會導致定址方式型別的差異。定址方式可以分為三大類:
(1)立即定址:運算元是立即運算元;MOV AL,1234H
(2)暫存器定址:運算元是暫存器運算元;MOV DS,AX
(3)儲存器運算元的定址又可以分為5種:
1.直接定址:偏移地址直接存放在儲存器中;MOV BX,DS:[1234H]
2.暫存器間接定址:將運算元在儲存器中的地址放到暫存器中,先從暫存器中取出運算元的地址,再從儲存器對應的記憶體單元中取出運算元;MOV AL,[BX]
一般的暫存器預設的是DS(資料段),BP暫存器預設的是SS(堆疊段);
3.基址定址:儲存單元的偏移地址為規定的基址暫存器(BX, BP)的內容與一個常量得喝,MOV DL,DS:[BX+2]
4.變址定址:MOV DL,[DI+2]
5.基址+變址定址
說的比較淺,主體的內容大致就這些了,有些地方只是一帶而過,沒有詳細介紹,感興趣的同學可以自己動手,上網去查資料看看。