2015-05-02 16 views
-2

我想在x86中編寫最小/最大函數。我已經能夠通過使用輪班和使用XOR來實現這一點,但是我需要找到一種方法來編寫它,而無需使用這些功能。有人能爲我帶來正確的方向嗎?是否可以在不使用班次或xor的情況下查找x86中的最小/最大值?

+4

'>','<','if'語句和一些變量? –

+3

爲什麼你需要輪班和XOR來找到最小和最大以及爲什麼x86與它有什麼關係? – Havenard

+0

你不能使用CMOV嗎?或者在C中編寫'min'函數,然後使用'gcc -mtune = native -O2 -fverbose-asm -S'編譯它... –

回答

0

例最大值功能:

int max(int *arr,int n){ 
    int max=arr[0]; 
    for(int i=0;i<n;i++)max=(arr[i]>max)?arr[i]:max; 
    return max; 
    } 

這將需要一個整數數組(arr)和它的大小(n)作爲參數,並返回包含在數組中的最大值。

要找到分鐘變化max=(arr[i]>max)?arr[i]:max;max=(arr[i]<max)?arr[i]:max;

+0

這是一個很好的解決方案,但對於循環固有地涉及我無法使用的跳轉。顯然有一個分支預測解決方案,但我似乎無法解決這個問題 –

+2

因此,它的作業畢竟......以及你不能處理沒有循環的數組。如果你真的不能使用循環,你可以使用遞歸。 – Havenard

+0

現在,如果你只是比較兩個數字,一個簡單的'max =(a> b?a:b)'就可以。 – Havenard

相關問題