尋找運算元實體地址的方式叫定址方式運算元在指令中
指令的運算元部分就是運算元本身
也叫立即數
運算元存放在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?...