我想查找Android應用程序的機器指令總數。我已經探索了Android SDK的Debug.InstructionCount類,但我相信它提供了Dalvik VM指令的信息(不是實際在處理器上執行的機器級指令)。 我需要此信息來估計在特定處理器上執行Android應用程序所需的時間(使用固定頻率)。我意識到不同類型的指令需要變量循環,因爲計算時間無法準確估計,但我仍然想做一些實驗。謝謝如何查找程序的總數指令?
回答
我的解決方案涉及到編寫指令集模擬器,運行應用程序並計算指令。目前已有開源avr模擬器,您只能使用/修改它。
在一天結束時,爲了做到這一點,您必須遵循指令流程,所以要麼實際上模擬它,並自動解決代碼真正經歷循環的次數,或者您編寫反彙編程序(它是模擬器的一半),基本上按照執行順序執行代碼流程(實際上比完整的反彙編程序或模擬程序簡單得多),但是您必須處理所有可能的代碼路徑和循環,因爲您會發現不同的路徑和計數不同的路徑。只需很少的工作,你就可以想出儘可能短的路徑,並知道代碼永遠不會比這更快。
是的,一個模擬將不得不通過與真實硬件延遲相關的循環來處理真實世界的次數。 –
+1。 * Avr *或* ARM *? :)。不幸的是,模擬器的指令數可能取決於數據;這對於Java/Davlik來說尤爲重要,因爲某些指令比其他指令更昂貴(超出界限等)。另外,一條指令可能會影響下一條指令的執行速度等。請參閱:[Objdump和ARM cycles](http://stackoverflow.com/questions/14942436/post-process-objdump-disassemble-with-arm-cycle-計數),在那裏你採取了反面。瞭解限制總是有幫助的。 –
大聲笑,我讀了Android並且認爲Arduino,但是如果你想知道你正在執行多少指令(這意味着執行順序),你必須按照執行順序對它們進行計數,答案也是一樣的。如果您想計算arm,avr,mips,java字節碼,llvm位碼,pascal pcode等等,那麼也是一樣的過程。 –
- 1. 如何在程序中查找非法指令?
- 2. 如何查找排序和總數?
- 3. 查找指數和總和名單
- 4. 如何計算在彙編程序中執行的指令總數
- 5. 如何查找ELF的程序頭數
- 6. 查找eclipse中指令所採用的指令週期數 - Android
- 7. 如何查找django應用程序所做的SQL查詢總數?
- 8. 如何使用div指令查找x86彙編中的餘數?
- 9. AngularJS指令查找關聯數組
- 10. 指令指針與程序計數器?
- 11. 如何查找記錄總數?
- 12. C++程序指令
- 13. 如何測量執行的彙編程序指令的數量?
- 14. 查找指數
- 15. 查找指數
- 16. 查找指數
- 17. 程序中加載指令的數量
- 18. 如何計算在ARM程序中執行的指令數量?
- 19. 如何通過指令參數指令
- 20. Ollydbg的指令程序
- 21. 程序中的LOOP指令
- 22. Angularjs:查找指令的所有實例
- 23. 如何查找computervision程序的圖像
- 24. 如何查找MIPS指令的緩存命中和未命中?
- 25. 如何查找DLL中特定指令的內存地址
- 26. 如何查找從類文件生成的本機指令
- 27. 如何在處理器中查找每個週期的指令?
- 28. 如何查找Java程序中聲明的函數的數量
- 29. 訪問:如何查找條目總數的查詢
- 30. 如何找到指令數最少的模式數字?
爲什麼不使用在特定設備上運行它,然後猜測它可能會在另一個設備上運行多長時間? – auselen