回覆列表
-
1 # 守侯的溫暖
-
2 # 使用者917376507636
201的嗎
一種是統一編址,即埠地址空間與儲存器地址空間合二為一的一種編址方式。這種編址方式使用將埠與儲存器單元同樣看待,使用儲存器訪問的指令進行 I/O 操作,因此指令多而靈活,缺點是埠地址要佔用一部分儲存器地址。
另一種是埠獨立編址,即埠地址空間與儲存器地址空間各自獨立的一種編址方式。這種編址方式只有那些具有 I/O 讀寫控制線的處理器系統(如 8086 系統)才能使用。它有獨立的埠地址空間,因此不佔用儲存器地址空間,有獨立的 IO 輸入輸出指令,但指令一般定址方式較少,比較不靈活。
定址方式一般有如下七種:
1.立即定址
立即(Immediate)定址,就是在指令中使用的運算元是常數,這個常數就包含在指令中。以下幾條指令都是立即定址的例子:
MOV AL,0
MOV AX,190
MOV EAX,-1
MOV EAX,0FFFFFFFFH
這些指令碼中,都包含了立即數,如0,190,-1,0FFFFFFFFH。
2.暫存器定址
暫存器(Register)定址方式的運算元在CPU內部的暫存器中。使用暫存器定址,CPU不用訪問記憶體就可以取得或修改運算元。
MOV BL,80 //目標運算元BL是暫存器定址
MOV EAX,EBX //源運算元EBX和目標運算元EAX都是暫存器定址
3.直接定址(CPU尋找記憶體中的運算元)
除了立即定址和暫存器定址方式外,其他的幾種定址方式的運算元都在記憶體單元中,定址方式要說明的是CPU如何確定記憶體操 作數的地址,然後CPU再對該記憶體單元中的運算元進行處理。
直接定址(Direct)定址就是指令中直接給出了運算元的地址。指令中使用變數時,就是直接定址。
MOV EAX,dVal
MOV dVal,EBX
MOV EAX,[4000H] //直接給出記憶體所在地址
在翻譯成機器指令後,變數是用它的地址而不是它的名字來表示的。地址外面加一對方括號,表示取這個地址中的內容。
00401010 A1 11 40 40 00 MOV EAX,[00404011]
00401015 89 1D 11 40 40 00 MOV [00404011],EBX
CPU在執行指令的時候,可以直接從指令碼中取出地址,而不必經過計算或其他操作,所以叫做直接定址。
4.暫存器間接定址
採用暫存器間接(Indirect)定址方式的運算元的地址放在暫存器中。
MOV ESI,00404011H //將記憶體地址儲存到暫存器中
MOV EAX,[ESI]
注意,MOV EAX,ESI和MOV EAX,[ESI]的區別。
在8086/8088/80286等16位的CPU中,只有4個暫存器能用做寄