所以我最近試圖進入程序集,發現自己真的和NASM的工作方式混淆了。據我瞭解,這是一種彙編的「編譯器」,它將(無效的)指令轉換爲實際的機器代碼。現在我想知道NASM手冊(www.nasm.us/doc/nasmdocb.html)中列出的說明與我的機器所使用的操作碼之間的區別是什麼?就像我們假裝我的英特爾處理器有某種祕密操作碼,沒有人知道,並且沒有在手冊中列出,NASM是否仍然可以組裝它?或者它只會返回'無效指令'?並且說我知道操作碼的機器碼格式,我是否可以手動插入它?assembly - opcodes vs. nasm instructions
-3
A
回答
6
NASM支持NASM支持的內容。
確實可能存在「內部」指令,或者在建立NASM版本後引入的指令,然後它不知道。
那些(或實際上任何指令)可以由您使用db
序列或類似手動編碼。
0
此old version of the nasm manual包含一些英特爾沒有記錄的說明,但NASM支持。 (該鏈接來自x86標記wiki。)
這些是「祕密操作碼」,即人們做的知道的。我假設人們至少測試了每個可能的最多3或4個字節的序列,以查找這樣的未公開的操作碼。當然,你不需要NASM知道如何對它們進行編碼,因爲你可以使用db
將你想要的任何字節組裝到目標文件中。
這不是您實際詢問的答案,但可能更符合您想知道的內容。就像@ 500 ...所說,NASM只是一個從已知助記符表中查找字節序列的程序。它甚至不需要在x86 CPU上運行,也沒有用於查詢CPU指令名稱的接口。
你可能想編輯你的問題到一個更有趣的答案。
例如:
SALC ; D6 [8086,UNDOC]
SALC在概念上SETcc(部分A.150)類似的早期無證指令。它的功能是在進位標誌清零時將AL置零,如果置位則置爲0xFF。
它實際上工作在我的Core2 CPU上的32位模式。 (NASM和YASM在組裝64位代碼時都拒絕它)。
如果不明顯請勿在便攜式代碼中使用此功能。在將來某些CPU使用D6作爲其他指令編碼的第一個字節時,它會受到破壞。英特爾insn ref手冊附錄A中操作碼映射中的D6
條目爲空。
操作碼映射中的所有空白都是保留的,不得使用。不要依賴 未定義或空白操作碼的操作。
的current version of the NASM manual沒有列出的描述,但確實還列出所有助記符,包括那些標記UNDOC
。據推測,這個附錄因SSE指示而變得過於臃腫。
相關問題
- 1. Nasm Assembly關係運算符
- 2. 在linux中調用CIO函數nasm assembly
- 3. NASM with Bochs - Assembly - 打印字符串
- 4. Nasm/Assembly如何寫這個僞代碼
- 5. NASM Assembly將輸入轉換爲整數?
- 6. maven-shade-plugin vs maven-assembly-plugin
- 7. maven assembly plugin moduleset sources instructions are not included any files and not matching the included modules
- 8. 刪除整數的前兩位數字 - assembly/nasm
- 9. IL Prefix OpCodes做什麼?
- 10. 「Register for COM Interop」vs「Make assembly COM visible」
- 11. Assembly @@標題question
- 12. 如何在ubuntu下使用nasm(assembly)從鍵盤讀取單字符輸入?
- 13. 在NASM Assembly中遞歸地添加數組中的所有元素
- 14. 在CLR 4.0中引入了哪些OpCodes?
- 15. 從C#源代碼發出IL OpCodes
- 16. mov指令在nasm中的含義
- 17. assembly find min max values
- 18. __Impl Assembly
- 19. arm assembly
- 20. Assembly Assembly(byte [] rawAssembly)的相反操作
- 21. ViewerJS在現場<a href="http://viewerjs.org/instructions/" rel="nofollow">ViewerJS Instructions</a>不加載我的PDF文檔
- 22. VS 2008中的Wrapper Assembly Key File設置在哪裏?
- 23. NASM ReadConsoleInput
- 24. Seg Faulting SPARC Assembly
- 25. shell code assembly segfaults
- 26. quicksort Mips assembly
- 27. Tribonacci Mips Assembly
- 28. Android ARM assembly prinft
- 29. Assembly IA32 $ 16,%esp
- 30. assembly main,S_LOOP
您的第一段是正確的(NASM只有一個助記表),但它確實知道英特爾沒有在ISA中記錄的一些指令。看到我的答案。 –