我目前正在 Delphi 中開發一個遺留產品,其中包括一些行內匯編,我需要幫助了解該函式的作用以及如何將其轉換為 Pascal。
代碼是:
function lswap(i : longint) : longint; assembler;
asm
{$IFDEF CPU64}
mov eax,ecx
{$ENDIF CPU64}
db $0f,$c8 {bswap eax !! requires at least 486 CPU!!}
end;
uj5u.com熱心網友回復:
通過幫助您了解它的作用:
您可以使用除錯器查看代碼中發生的情況,包括匯編程式中發生的情況。
如果您有一個呼叫此例程的測驗程式(可能多次使用不同的引數)并將結果存盤在標準 Delphi 變數中,那么要進行除錯,您將:
- 在你第一次呼叫它的地方設定一個斷點
- 當您到達斷點時,請確保您將除錯設定為“完整 CPU”并選擇“混合源”顯示。
查看編譯器生成的代碼。編譯器要做的第一件事是為您正在呼叫的例程準備引數。對于 Pascal 例程,這通常意味著將值放入適當的 CPU 暫存器中。
逐行進入代碼。在 Registers 視窗(完整 cpu 顯示的一部分)中,您將看到暫存器的值以及它們如何隨每條指令更改。
從例程回傳時,編譯器會將結果存盤在某處,以便您能夠了解編譯器如何解釋結果。
只需查看輸入和輸出可能就足夠了,而無需了解例程中的所有內容。
行內匯編器已廣泛用于許多代碼庫,但隨著越來越遠離固定的 x86 架構,洗掉此類代碼的理由越來越多。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/315613.html
