:操作員在裝配中做了什麼? 看到類似的代碼:DS:DX
我還沒有找到該運營商的任何文檔。 (使用NASM IM):操作員在裝配中做什麼?
1
A
回答
4
這實際上只是一個註冊分隔符,而不是操作符。這意味着使用DX
寄存器作爲與DS
段寄存器基址的偏移量。
它究竟是什麼給出你作爲一個地址取決於你在什麼模式下運行(真實或受保護)。
例如,在實模式下,段寄存器乘以16並添加到偏移量寄存器,爲您提供20位物理地址。如果DS
是0x1234
和DX
是0x5678
:
12340
+ 05678
-----
179B8
在保護模式下,DS
是實際上可以分段選擇其被用於查找的基地址用於在表存儲器中,然後添加到偏移寄存器給一個價值。
該值始終是一個虛擬地址,它在確保從外部存儲器中對相關虛擬內存進行分頁之後,由內存管理單元(MMU)映射到物理地址。
2
的:
操作者區分從一個通用寄存器段寄存器/選擇器,並表示該段中訪問該寄存器的值。因此,例如,
DS:DX
指16位實模式來訪問DX
寄存器偏移量爲DS
段值的16位值,該值以16字節值遞增(即段值0x0000和0x0001之間的差值表示16字節偏移量)。舉例來說,如果DS
中的值爲0xA000,並且DX
中的值爲0xFF,則您將尋址0xA00FF處的值。
在32位保護模式下,段選擇器表示一個16位描述符值,其中位3-15用作CPU全局描述符表或局部描述符表中的查找偏移量,其中包含32位段地址範圍以及該段的環級訪問權限(即內核級別,用戶級別等)。位0-1表示請求專用級別,它阻止用戶級別的進程加載更高權限的分段值。位2是一個標誌,當清除意味着在GDT中查找段時,或者如果設置意味着偏移到LDT中。例如,DS
的值爲0x0010意味着在請求權限級別爲0的情況下查找GDT中的第三個插槽(即,您需要處於內核級別模式才能設置此值)。然後,DX
中的值將從GDT中爲該特定段設置的地址範圍的開始處開始偏移。
相關問題
- 1. @在裝配中做什麼?
- 2. '|| ='操作符在ruby中做了什麼?
- 3. 簡單操作在Matlab中做什麼?
- 4. &和|是什麼?操作員在批處理文件中做什麼?
- 5. ls -LA做什麼操作?
- 6. 這在裝配中有什麼作用
- 7. 裝配編程中的僞操作是什麼?
- 8. 我在這裏做錯了什麼?在我的編譯中有幾個「不匹配操作員」的錯誤
- 9. 裝配中的位操作
- 10. 這個位操作函數做什麼?
- 11. 不確定組合操作員在功能中執行什麼操作
- 12. 共享操作員在RxJava中做什麼?我應該什麼時候使用它?
- 13. >>操作符/操作數/修飾符是做什麼的?
- 14. 測試人員做什麼?
- 15. 這位或者操作符在JavaScript中做了些什麼?
- 16. 什麼::(成員方法名稱)在C++中做什麼
- 17. 「xhr-polling」配置在socket.io中做什麼?
- 18. 服務人員能做些什麼,網絡工作者不能做什麼?
- 19. 在Perl中做什麼=〜做什麼?
- 20. 操作員新操作員和新操作員不能重載?
- 21. 這些線在裝配時做了什麼?
- 22. 操作員在C++
- 23. CookiePolicy適配器參數在Worklight 6.1+中執行什麼操作?
- 24. ESP在裝配中意味着什麼?
- 25. 爲什麼printf不在控制檯上打印「操作員」?
- 26. 我在做什麼錯誤的條件操作符?
- 27. PHP流上下文在文件操作方面做了什麼?
- 28. 這個位移操作正在做什麼?
- 29. 冒號操作符在這種情況下做了什麼?
- 30. Elixir中的Circumflex標誌/ Pin/Cap操作符(^)做了什麼?
謝謝(哇,那很快:D) – TheBreadCat