實模式與保護模式詳解三 定址方式

2021-10-01 02:08:01 字數 1567 閱讀 7535

尋找運算元實體地址的方式叫定址方式

運算元在指令中

指令的運算元部分就是運算元本身

也叫立即數

運算元存放在cpu暫存器中

指令的運算元部分是暫存器的編碼

也叫暫存器運算元

運算元存放在記憶體中

指令的運算元部分包含運算元所在的記憶體位址

也叫儲存器運算元

立即數定址

e.g.

mov al, 10h

特點:運算元直接放在指令中

暫存器定址

inc si

特點:指令中需給出暫存器名,暫存器中的內容即為運算元

儲存器定址方式

直接定址

例子mov al,[2000h] ; al ← pa=dsx16+2000

特點: p指令中直接給出有效位址ea:8位或16位位移量。 pa = (段暫存器)x 10h +指令中的ea 。 預設方式下:段暫存器是資料段ds。段跨越:指令增加段暫存器名字首:cs,es,ss等

暫存器間接定址方式

例子mov ax,[si] ;ax ← dsx16 + [si],[si+1]

mov bh,[bp] ;bh ← ssx16 + bp

mov cx,es:[bx] ;將es段[bx][bx+1]內容送cl,ch

特點: 運算元的有效位址ea在暫存器中。 對16位定址,ea只能放在di、si、bx、 bp中 ,若ea在di、si、bx中,預設段為資料段ds ,若ea在bp中,預設段為堆疊段ss ,支援段跨越。

暫存器相對定址方式

例子mov ax, [bx+10h] ; ea=(bx)+10h

特點:給定基址/變址暫存器和相對偏移量,兩者之和為ea。 暫存器bx、si、di預設是資料段ds,暫存器bp預設堆疊段ss。 支援段跨越。

基址變址定址方式

例子mov ax, [bx+si] ; ea=(bx)+(si) ;ds段相對基址變址定址方式

特點 :有效位址ea是基址暫存器+變址暫存器+偏移量三者之和。 基址暫存器可取bx或bp,變址暫存器可取si或di。 段暫存器由基址暫存器決定 p基址暫存器是bx,則預設段為ds; p基址暫存器是bp,則預設段為ss。

定址時暫存器的使用約束

4. 一條指令的原運算元與目的運算元不能同時用儲存器方式表示

如:mov [eax + 4], ds:[100]

mov [si], [di]

5. 雙運算元有一運算元為立即數方式時,立即方式只能用於源運算元

6. 兩個運算元的型別都明確時,源運算元不能比目標運算元長度要相同。不含變數的儲存器方式型別是不明確的,立即數時沒有型別的。當兩個運算元型別都不明確時,需要用屬性定義算符ptr指明其中乙個運算元型別

實模式與保護模式的定址

暫存器運算元 存放在cpu中 mov ax,0ffffh ax 即為暫存器運算元。運算元本身存放於暫存器中,在指令中只是給出了幾個位的 來表示它具體存放在那個暫存器中。記憶體中的資料經過暫存器讀入cpu,進入資料的運算。記憶體運算元 存放在記憶體中 其儲存於某記憶體區域,因此叫記憶體運算元。myda...

實模式和保護模式區別及定址方式

實模式和保護模式區別及定址方式 我記得大學的彙編課程,組成原理課裡老師講過實模式和保護模式的區別,在很多書本上也有談及,無奈本人理解和感悟能力實在太差,在很長一段時間裡都沒真正的明白它們的內含,更別說為什麼實模式下最大定址空間為1mb?段的最大長度不超過64kb?而保護模式下為啥最大定址能力就變成了...

實模式和保護模式區別及定址方式

我記得大學的彙編課程 組成原理課裡老師講過實模式和保護模式的區別,在很多書本上也有談及,無奈本人理解和感悟能力實在太差,在很長一段時間裡都沒真正的明白它們的內含,更別說為什麼實模式下最大定址空間為1mb?段的最大長度不超過64kb?而保護模式下為啥最大定址能力就變成了64tb?每個段最大也達4gb?...