// Code I'll be working with
int shift_left2_rightn(int x, int n)
{
x <<= 2;
x >>= n;
return x;
}
問題1.左移= SAL
和SHL
。我的書說他們有同樣的效果。那麼爲什麼有兩次輪班?ATT裝配(算術和邏輯運算)
例如:
movl 8(%ebp), %eax //Get x
_______ //x <<= 2
我的書中給出的
sall $2, %eax
會
shll $2, %eax
的回答也得到了正確的答案?
問題2:
通俗地說就是SHR
和SAR
之間的區別?我的書說一個是邏輯轉換(用零填充),另一個是算術轉換(填充符號位的副本)。
用0 /符號位填充什麼?
例如:
我怎麼知道哪一個用於下面的彙編指令?
movl 12(%ebp), %ecx //Get n
______ //x >>=n
回到本書有答案
sarl %cl, %eax
我請解釋一下,如果我們使用shrl
會發生什麼。
感謝您的理解幫助!
非常感謝的實例和解釋 – juice 2013-02-16 22:06:55
實際上有'sal'和'shl'兩種不同的操作碼,但到目前爲止他們的行爲一直是相同的,雖然它看起來像英特爾希望棄用兩個中的一個,如果你通過自己的判斷文檔。 – 2013-02-16 23:27:35
@AlexeyFrunze哪一個?在[64和IA-32架構 軟件開發人員手冊](http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-開發人員手動325462.html),我只能找到相同的編碼兩個'sal'和'shl':(有/無'REX')'DO/4','D2/4','C0/4 ib','D1/4','D3/4','C1/4 ib'。另外,如果我組裝如。 'SAL人,1'與NASM,導致'D0 E0',ndisasm拆開它作爲'SHL人,1'。 – nrz 2013-02-16 23:37:56