[英]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.