我試圖在WinXP DOS框中運行的16位Turbo Pascal 7程序(請不要...)使用高性能計數器。我可以使用內聯$ 0F,$ 31執行RDTSC指令,並將AX和DX的內容設置爲合理值,但我如何訪問EAX,EDX的上半部分並將結果寫入2個長字全局變量?在16位Turbo Pascal中訪問高性能計數器
3
A
回答
4
如果我讀我的文檔正確,那麼你可以通過使用0x66前綴碼訪問從實模式的32位寄存器。因此,內嵌「$ 66 $ 50」應該具有以下效果:它將EAX作爲32位值推入堆棧。然後,您只需將兩個普通(16位)pop
操作碼(您將首先獲得較低的一半)彈出上半部分和下半部分。對於EDX,使用「$ 52」而不是「$ 50」。
(我沒有嘗試這樣做。)
0
對於在DOS中使用32位寄存器,您需要DOS擴展器或平面實模式。第一種方法可以爲保護模式編寫程序(您需要在某處切換代碼生成模型),而後者將是一種32位實模式。我懷疑它會在DOS框中工作,也許DOS模擬器可以工作。
AFAIK(15年...)Borland Pascal有一個自己的DOS擴展器,RTM.EXE或其他東西。
相關問題
- 1. C#訪問.Net的Turbo Pascal .DTA文件
- 2. 復位性能計數器
- 3. 替換爲Turbo Pascal(3.0)
- 4. Turbo Pascal,Capture Writeln使用流?
- 5. TASM只使用16位寄存器訪問雙字的高位和低位字
- 6. 如何在代碼中訪問C#性能計數器?
- 7. 如何在緊湊框架中訪問.Net性能計數器?
- 8. 最好在VBScript中訪問Windows(XP)性能計數器
- 9. 提高數據庫訪問的性能
- 10. KVM中每位訪客的性能計數器
- 11. 高性能jpeglib-turbo implmentation能在<100ms內解壓/壓縮嗎?
- 12. 16位TIFF中的訪問像素
- 13. Turbo Pascal的BNF/EBNF(最好5.5或更高,因爲OOP)?
- 14. Think Pascal中的位功能
- 15. Turbo Pascal 3.0鍵盤快捷鍵?
- 16. 以Turbo Pascal方式獲取PHP變量
- 17. Turbo Pascal 3.0從命令行編譯
- 18. 如何基於16位FTM計數器實現32位計數器?
- 19. 如何使用Graph單位在Turbo Pascal中創建無閃爍動畫?
- 20. 如何在Windows XP Embedded中訪問C#中的性能計數器?
- 21. 「訪問註冊表項」全局「時訪問性能計數器時被拒絕
- 22. 數據中心vs高性能計算
- 23. 如何更改性能計數器的訪問控制列表?
- 24. 通過WMI訪問定製的應用性能計數器
- 25. 性能計數器
- 26. 性能計數器
- 27. Vista上的性能計數器問題
- 28. 性能計數器?
- 29. 性能計數器
- 30. 數據集設計器性能問題
其實,IIRC 16/32正交於真正的/保護(286分割,沒有16位模式),前綴66H只是選擇另一種(16/32)爲以下insn。 – ninjalj 2011-04-07 18:59:20
謝謝@Thomas。這樣可行。我們還發現,在前面的一個mov [GlobalLongwordVariable]中,一個66美元的斧頭也應該可以工作,而且它的確如此。 – rossmcm 2011-04-07 21:42:53
@ninjalj:是的。 0x66前綴允許從16位代碼訪問32位寄存器。實模式和VM86模式(實模式仿真)都是16位代碼(在VM86模式下,WinXP DOS框運行代碼)。但是,您也可以擁有受保護的16位模式(Windows 3.0稱爲「標準模式」)。 – 2011-04-08 12:30:59