1
我想讓bsr在64位數字上運行。但是,以下僅適用於輸入的低32位:64位bsr asm截斷高位32位
function BSR64(const Val: Int64): Integer;
begin
asm
bsr eax, [Val]
...
我該如何做?
我正在使用Lazarus在64位模式下編譯。
我想讓bsr在64位數字上運行。但是,以下僅適用於輸入的低32位:64位bsr asm截斷高位32位
function BSR64(const Val: Int64): Integer;
begin
asm
bsr eax, [Val]
...
我該如何做?
我正在使用Lazarus在64位模式下編譯。
訪問64位寄存器如下:
bsr rax, [val]
eax
是低32位。 ax
是低16和al
是低8。
這工作,謝謝。但是,我有一個誤解。我認爲結果寫入eax,所以eax應該是0到63. – IamIC 2015-02-06 06:23:07
我不太確定你的意思。結果寫入'eax',但'eax'只是低32位(0到31位)。我不確定你的彙編程序在這種情況下會做什麼,因爲'val'似乎是一個64位的值,但我猜想它會截斷它只複製'[val]'的低32位。 – Tim 2015-02-06 06:33:14
我的意思是,在64位輸入上,bsr的結果是0到63。我認爲「0」到「63」被bsr op壓入eax,這意味着它只有6位的範圍很容易適合eax。所以我認爲「0」到「63」被寫入到dest中,而不是dest必須與源大小匹配。 – IamIC 2015-02-06 06:37:22