簡體   English   中英

當我有物理地址時,如何獲取段 memory 地址?

[英]How to get segment memory address, when i have physical address?

memory 單元的物理地址以 1A32H 的形式給出。 memory段的起始地址是什么。 或者更准確地說,是我應該用來訪問它的 seg:off 地址。

有人可以逐步解釋我如何解決這個問題嗎?

x86實模式下,物理地址計算如下:

16 * 段 + 偏移量

所以物理地址 1A32H 可以通過不同的方式訪問:

段 = 1A3H,偏移量 = 2 或
段 = 1A2H,偏移 = 12H 或
段 = 1A1H,偏移量 = 22H 或
...
段 = 0,偏移量 = 1A32H

這取決於您選擇的段和偏移量組合的用例:

如果地址是 memory 范圍的起始地址(例如數組的第一個元素),您將使用更高的段值(段 1A3H,偏移量 2H)。

如果地址是 memory 范圍的結束地址(例如初始堆棧指針),您將使用較低的段值(段 0,偏移量 1A32H)。

另請注意,偏移量是一個 16 位數字。

所以物理地址 >= 2^16 不能使用段值 0 訪問:

可以使用以下命令訪問地址 1A325H(例如):

段 = 1A32H,偏移量 = 5 或
段 = 1A31H,偏移量 = 15H 或
...
段 = 0A33H,偏移量 = 0FFF5H

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM