雖然在彙編語言程序設計研究我碰到的術語「僞操作」和「梅欽-OP」。我是不知道什麼是他們的功能和它們相互之間的區別來了?僞操作和機器操作之間的區別?
回答
而且彙編指令,是很常見的RISC架構有僞操作將擴展爲多條指令。
最常見的類型是一個僞操作用於獲得32位常數(例如地址)到一個寄存器中需要的指令的序列。由於固定的32位指令沒有空間存儲任意32位立即數,因此機器無法在一條指令中完成。但是,用16位立即數分離這對指令通常沒有什麼好處,但手動操作會很麻煩。 (IIRC,一些超標量按順序執行時背到後面的CPU識別這樣的對,還在即使他們修改同一個寄存器並行運行它們。)ARM彙編僞指令MOV32
和ADRL
做到這一點。
另一個有趣的例子是ARM的ldr r0, =0x12345678
。它總是彙編爲一條指令,但可以從兩種策略中進行選擇:如果常數可以表示爲立即數(using ARM's barrel shifter),彙編器將使用MOV。如果不是,則將常量放入附近的文字池並使用PC相對負載。所以這個僞操作可以發出指令和數據(我認爲仍然在同一部分)。 (LDR指令的非僞操作形式是支持ARM各種尋址模式的正常加載寄存器形式,如從r1 + r3 <<2
加載的ldr r0, [r1, r3, lsl #2]
)。 所以相同的助記符可以是一個僞操作或機器指令根據操作數
MIPS需要僞指令到了極點,與正常ABI保留使用的32個結構寄存器中的至少一個作爲彙編程序生成的僞操作的暫時! (我想MIPS的設計者認爲32真的比需要的更多,因爲在標準的ABI中,中斷處理程序異步鎖定2個其他寄存器是正常的,這使得它們對用戶空間代碼不安全,我想這簡化了設計和。有硬件幫助更多地保存/恢復中斷的體系結構狀態,但我沒有看詳細信息。)
挑剔:這'LDR 'form只會生成一條指令,在這種情況下,在一個文字池中放置一個32位常量,然後可以從該文件池索引負載。然而'MOV32'和'ADRL'可以將多條指令的常量拼湊在一起。 – doynax
@doynax:hrm,我認爲LDR可以選擇不同的策略。是否它可以選擇一個MOV,如果這個常量符合一個立即的? –
對,它可以選擇一個單指令立即執行的'MOV',而'ADRL'和'MOV32'則總是用兩條指令以算術方式計算地址。至少,我上次檢查IAR ARM彙編程序是什麼。 ADRL特別好奇,因爲它只支持彙編時表達式,但仍然會產生短距離的僞指令。一個盡力而爲的即時僞操作肯定會有用,但也許認爲給程序員明確的控制是安全的,對Thumb等有隨機標誌的副作用。 – doynax
- 1. '|'之間的區別和 '+' 的位操作
- 2. Linux操作系統和移動操作系統之間的根本區別(android)
- 3. 通用操作系統和軟實時操作系統之間的區別?
- 4. 「原始」髒操作和髒操作之間有什麼區別:async_transaction
- 5. hadoop僞分佈式操作和獨立操作之間的性能對比
- 6. 發送電子郵件操作和發送電子郵件操作之間的區別郵件保存操作
- 7. 子集化[]和$操作符之間的區別
- 8. JPQL操作員的IN和MEMBER之間有什麼區別?
- 9. REGEXP中'+'和'*'操作模式之間的區別
- 10. 是什麼SNMP GETBULK之間的區別和GET操作
- 11. SQL查詢和SqlClient操作之間的區別
- 12. 位操作中+ n和(n)之間的區別是什麼?
- 13. 點和操作符表示法之間的區別Ruby
- 14. UWP MapControl:用戶和應用程序操作之間的區別
- 15. 34型和50型自定義操作之間的區別?
- 16. ASP.NET MVC中的自定義操作篩選器和自定義操作選擇器之間有什麼區別?
- 17. JIT機器特定操作與靜態二進制之間的區別
- 18. 集合操作和方法之間有什麼區別?
- 19. 操作系統中頁面和塊之間有什麼區別?
- 20. 之間有什麼區別。和``在shell腳本中操作
- 21. 機器碼和操作碼有什麼區別?
- 22. 什麼是操作系統和元操作系統之間的差別
- 23. Cocoa中操作和線程的區別
- 24. JS和Python中^操作符的區別
- 25. 檢查CSS之間的區別操作系統的
- 26. automake中的賦值操作符之間的區別
- 27. Hololens /統一:識別導航和操作手勢之間的區別
- 28. SQL Server IN操作符與值查詢和IN操作符之間的區別值
- 29. 紅寶石之間的區別2.3安全操作符「&。」和CoffeeScript存在操作符「。?」
- 30. 在Windows消息和操作系統方面WPF和Winform之間的區別
機器操作系統通常是生成特定機器代碼的彙編指令。僞操作不一定會生成機器碼。通常僞操作也被稱爲彙編指令,作爲一個例子,這些都是_GCC_的指令:https://sourceware.org/binutils/docs/as/Pseudo-Ops.html#Pseudo-Ops –