❶ 匯編程序里的00141 H代表什麼啊
這是物理地址 H代表16進制
這個物理地址的計算方法
段地址 0014 偏移地址 0001
段地址×10+偏移地址=物理地址
❷ 什麼是物理地址
Windows 2000 使用基於分頁機制的虛擬內存。每個進程有4GB的虛擬地址空間。基於分頁機制,這4GB地址空間的一些部分被映射了物理內存,一些部分映射硬碟上的交換文件,一些部分什麼也沒有映射。程序中使用的都是4GB地址空間中的虛擬地址。而訪問物理內存,需要使用物理地址。
下面我們看看什麼是物理地址,什麼是虛擬地址。
物理地址 (physical address): 放在定址匯流排上的地址。放在定址匯流排上,如果是讀,電路根據這個地址每位的值就將相應地址的物理內存中的數據放到數據匯流排中傳輸。如果是寫,電路根據這個地址每位的值就將相應地址的物理內存中放入數據匯流排上的內容。物理內存是以位元組(8位)為單位編址的。
虛擬地址 (virtual address): 4G虛擬地址空間中的地址,程序中使用的都是虛擬地址。
如果CPU寄存器中的分頁標志位被設置,那麼執行內存操作的機器指令時,CPU會自動根據頁目錄和頁表中的信息,把虛擬地址轉換成物理地址,完成該指令。比如 mov eax,004227b8h ,這是把地址004227b8h處的值賦給寄存器的匯編代碼,004227b8這個地址就是虛擬址。CPU在執行這行代碼時,發現寄存器中的分頁標志位已經被設定,就自動完成虛擬地址到物理地址的轉換,使用物理地址取出值,完成指令。對於Intel CPU 來說,分頁標志位是寄存器CR0的第31位,為1表示使用分頁,為0表示不使用分頁。對於初始化之後的 Win2k 我們觀察 CR0 ,發現第31位為1。表明Win2k是使用分頁的。
使用了分頁機制之後,4G的地址空間被分成了固定大小的頁,每一頁或者被映射到物理內存,或者被映射到硬碟上的交換文件中,或者沒有映射任何東西。對於一般程序來說,4G的地址空間,只有一小部分映射了物理內存,大片大片的部分是沒有映射任何東西。物理內存也被分頁,來映射地址空間。對於32bit的Win2k,頁的大小是4K位元組。CPU用來把虛擬地址轉換成物理地址的信息存放在叫做頁目錄和頁表的結構里。
物理內存分頁,一個物理頁的大小為4K位元組,第0個物理頁從物理地址 0x00000000 處開始。由於頁的大小為4KB,就是0x1000位元組,所以第1頁從物理地址 0x00001000 處開始。第2頁從物理地址 0x00002000 處開始。可以看到由於頁的大小是4KB,所以只需要32bit的地址中高20bit來定址物理頁。
頁表,一個頁表的大小為4K位元組,放在一個物理頁中。由1024個4位元組的頁表項組成。頁表項的大小為4個位元組(32bit),所以一個頁表中有1024個頁表項。頁表中的每一項的內容(每項4個位元組,32bit)高20bit用來放一個物理頁的物理地址,低12bit放著一些標志。
頁目錄,一個頁目錄大小為4K位元組,放在一個物理頁中。由1024個4位元組的頁目錄項組成。頁目錄項的大小為4個位元組(32bit),所以一個頁目錄中有1024個頁目錄項。頁目錄中的每一項的內容(每項4個位元組)高20bit用來放一個頁表(頁表放在一個物理頁中)的物理地址,低12bit放著一些標志。
對於x86系統,頁目錄的物理地址放在CPU的CR3寄存器中。
CPU把虛擬地址轉換成物理地址:
一個虛擬地址,大小4個位元組(32bit),包含著找到物理地址的信息,分為3個部分:第22位到第31位這10位(最高10位)是頁目錄中的索引,第12位到第21位這10位是頁表中的索引,第0位到第11位這12位(低12位)是頁內偏移。對於一個要轉換成物理地址的虛擬地址,CPU首先根據CR3中的值,找到頁目錄所在的物理頁。然後根據虛擬地址的第22位到第31位這10位(最高的10bit)的值作為索引,找到相應的頁目錄項(PDE,page directory entry),頁目錄項中有這個虛擬地址所對應頁表的物理地址。有了頁表的物理地址,根據虛擬地址的第12位到第21位這10位的值作為索引,找到該頁表中相應的頁表項(PTE,page table entry),頁表項中就有這個虛擬地址所對應物理頁的物理地址。最後用虛擬地址的最低12位,也就是頁內偏移,加上這個物理頁的物理地址,就得到了該虛擬地址所對應的物理地址。
一個頁目錄有1024項,虛擬地址最高的10bit剛好可以索引1024項(2的10次方等於1024)。一個頁表也有1024項,虛擬地址中間部分的10bit,剛好索引1024項。虛擬地址最低的12bit(2的12次方等於4096),作為頁內偏移,剛好可以索引4KB,也就是一個物理頁中的每個位元組。
一個虛擬地址轉換成物理地址的計算過程就是,處理器通過CR3找到當前頁目錄所在物理頁,取虛擬地址的高10bit,然後把這10bit右移2bit(因為每個頁目錄項4個位元組長,右移2bit相當於乘4)得到在該頁中的地址,取出該地址處PDE(4個位元組),就找到了該虛擬地址對應頁表所在物理頁,取虛擬地址第12位到第21位這10位,然後把這10bit右移2bit(因為每個頁表項4個位元組長,右移2bit相當於乘4)得到在該頁中的地址,取出該地址處的PTE(4個位元組),就找到了該虛擬地址對應物理頁的地址,最後加上12bit的頁內偏移得到了物理地址。
32bit的一個指針,可以定址范圍0x00000000-0xFFFFFFFF,4GB大小。也就是說一個32bit的指針可以定址整個4GB地址空間的每一個位元組。一個頁表項負責4K的地址空間和物理內存的映射,一個頁表1024項,也就是負責1024*4k=4M的地址空間的映射。一個頁目錄項,對應一個頁表。一個頁目錄有1024項,也就對應著1024個頁表,每個頁表負責4M地址空間的映射。1024個頁表負責1024*4M=4G的地址空間映射。一個進程有一個頁目錄。所以以頁為單位,頁目錄和頁表可以保證4G的地址空間中的每頁和物理內存的映射。
每個進程都有自己的4G地址空間,從 0x00000000-0xFFFFFFFF 。通過每個進程自己的一套頁目錄和頁表來實現。由於每個進程有自己的頁目錄和頁表,所以每個進程的地址空間映射的物理內存是不一樣的。兩個進程的同一個虛擬地址處(如果都有物理內存映射)的值一般是不同的,因為他們往往對應不同的物理頁。
4G地址空間中低2G,0x00000000-0x7FFFFFFF 是用戶地址空間,4G地址空間中高2G,
0x80000000-0xFFFFFFFF 是系統地址空間。訪問系統地址空間需要程序有ring0的許可權。
❸ 在8086中,邏輯地址,偏移地址,物理地址分別指的是什麼
存儲器中每一個單元的地址可以用兩種方法表示:
1.邏輯地址:其表達形式為「段地址:段內偏移地址」。
2.物理地址:CPU與存儲器進行數據交換時在地址匯流排上
提供的20位地址信息稱為物理地址。
物理地址=段地址×10H+段內偏移量
CPU一次處理的數據是16位
❹ 物理地址的首址和末地址
首地址等於基址後面加0,尾地址等於首地址加上段址空間寬度64K,答案為
DS:12100H~220FFH
ES:0A3010H~0B310FH
CS:634E0H~734DFH
物理地址是你的網卡地址,MAC(Media Access Control, 介質訪問控制)地址是識別LAN(區域網)節點的標識。
網卡的物理地址通常是由網卡生產廠家燒入網卡的EPROM(一種快閃記憶體晶元,通常可以通過程序擦寫),它存儲的是傳輸數據時真正賴以標識發出數據的電腦和接收數據的主機的地址。
(4)物理地址h是什麼擴展閱讀:
邏輯地址就是IP地址,是虛擬的,實際不存在的,它在網路中用來定義不同的網路,使其不會發生數據混亂,在OSI七層模型中屬於第三層網路層的。
內存必須容納操作系統和各種用戶進程,因此必須盡可能有效得分配內存,在分配內存過程中,通常需要將多個進程放入內存中,前面提到過,需要每個進程的空間相互獨立。
而且必須保護每個進程的內存空間的獨立性,如果不同的進程間需要通信,可以按照前面提到的通信方法進行通信,但是在此時,考慮內存空間獨立性的實現。
❺ 什麼是8086系統中的邏輯地址和物理地址
由於8086的寄存器最大為16位,因此地址在寄存器中按16位大小存放,由段地址和偏移地址聯合表示的地址類型叫邏輯地址,例如2000H:1000H,這里的2000H表示段的起始地址,即段地址,而1000H則表示偏移地址,表示邏輯地址時總是書寫成段地址:偏移地址。
物理地址即是真實存在的唯一地址,是指的內存中各個單元的單元號,由8086有20條地址線,因此可定址2的20次方,按2進制位表示規則,即有20位,這個就是物理地址。物理地址因為超過了寄存器大小(16位)因此無法直接存放,需要合成,公式為物理地址=段地址×10H+偏移地址,公式中的數據可從邏輯地址獲得。
邏輯地址是16位的,因此范圍是2的16次方,即64K。
物理地址是20位的,因此范圍是2的20次方,即1M。