2011-04-15 70 views
2

我正在使用Visual Studio 2010專業版,而我只是在調試模式下檢查BSF不工作我試了很多組合,都沒有工作!BSF操作碼不起作用

__asm 
{ 
    mov ebx, 0ffffffh; 
    bsf ecx, ebx; 
}; 

上面的代碼,至少可以給我一些結果,但我在ECX寄存器得到0(我使用的是64位的win7和應用是32位)

下面是英特爾說,大約BSF:

搜索所述至少顯著組 位(1位)的源操作數(第二 操作數)。如果找到最低有效位1 ,則其位索引在目標操作數(第一個 操作數)中被存儲爲 。源操作數可以是一個 寄存器或一個存儲單元;目標操作數是 是一個寄存器。位索引 是來自源操作數的位0的 的無符號偏移量。如果源操作數的內容 爲0, ,則目標操作數 的內容未定義。

有人有什麼想法嗎?謝謝大家...

回答

15

你得到ecx設置爲0,因爲至少顯著(leastmost?)在價值0xffffff1位爲 0位爲二進制數是0000 .... 1111 1111 1111 1111 1111 1111

換句話說,你看到的結果是正確的。

如果你想試試0xfc例如(二進制1111 1100),你應該得到2,這是因爲至少顯著位在二進制數的最右邊的位置:

Hex  F C 
Binary 1111 1100 
Bit#
      ^
       | 
       +-- rightmost (least significant) 1-bit 
+2

+1,部分是爲了一個正確的答案(我相信),但主要是爲了發明單詞「leastmost」... ;-) – 2011-04-15 13:51:22

+0

你讀過這個問題嗎? – MCA 2011-04-15 14:39:20

+2

@MCA:是的,我做到了。你在抱怨它說0xffffff中最右邊的1位是0位。我不確定你爲什麼抱怨,因爲這確實是正確的值。如果你想以不那麼呆板的方式告訴我你錯在哪裏,我很樂意重新審視答案。 – paxdiablo 2011-04-15 14:56:21