位操作類指令對二進位制的各個位進行操作,包括邏輯運算指令和移位指令。
一、邏輯運算指令
邏輯運算指令用來對字或位元組按位進行邏輯運算,包括邏輯與and、邏輯或or、邏輯非not、邏輯異或xor和測試test五條指令。
1、邏輯與指令and
and dest,src ;des←dest∧src(符號∧表示邏輯與)
and指令對兩個運算元執行按位的邏輯與運算:即只有相「與」的兩位都是1,結果才是1;否則,「與」的結果為0。邏輯與的結果送到目的運算元。用and指令可以將乙個位元組或字中的某些特定位清零,或者說將某些位擷取下來。如將ascii碼的高4位清零,亦即擷取低4位,假設這個ascii碼已在al中,則and al,00001111b就會將al中的低4位擷取下來,將al中的高4位清零。其中00001111b稱為邏輯乘常數。and指令及後面介紹的其他雙運算元邏輯指令or、xor和test,源運算元可以是任意定址方式,而目的運算元只能是立即數之外的其他定址方式,並且兩個運算元不能同時為儲存器定址方式。所有雙運算元的邏輯指令均設定cf=of=0,根據結果設定sf、zf和pf狀態,而對af未定義。
2、測試指令test
test dest,src ;dest∧src(符號∧表示邏輯與)
test指令對兩個運算元執行按位的邏輯與運算,但結果不回送目的運算元。test指令執行的操作與and相同,但不儲存執行結果,只根據結果來設定狀態標誌。test指令通常用於檢測一些條件是否滿足,但又不希望改變源運算元的情況,這條指令之後,一般都是條件轉移指令,目的是利用測試條件轉向不同的程式段。
3、邏輯或指令or
or dest,src
or指令對兩個運算元執行按位的邏輯或運算:即只要相「或」的兩位有一位是1,結果就是1。or指令可用於置位某些位。
4、邏輯異或指令xor
xor dest,src
相異或的兩位不相同時,結果就是1,否則,異或的結果為0。xor可用於求反某些位,要求求反的位同「1」異或,維持不變的位同「0」異或。xor指令經常給暫存器清0,同時使cf也清零。
xor ax,ax ;ax=0,cf=of=0,sf=0,zf=1,pf=1
5、邏輯非指令not
not reg/mem ;reg/mem←~reg/mem(~表示邏輯反)
not指令對運算元按位求反,not指令是乙個單運算元指令,運算元可以是立即數以外的任何定址方式。not指令不影響標誌位。
二、移位指令
1、邏輯移位指令shl和shr
shl reg/mem,1/cl ;邏輯左移:reg/mem左移1/cl位,最低位補0,最高位進入cf
shr reg/mem,1/cl ;邏輯右移:reg/mem右移1/cl位,最高位補0,最低位進入cf
2、算術移位指令sal和sar
sal reg/mem,1/cl ;算術左移,功能與shl相同
sar reg/mem,1/cl ;算術右移:reg/mem右移1/cl位,最高位不變,最低位進入cf
移位指令按照移入的位設定進製標誌cf,根據移位後的結果影響sf、zf、pf,對af沒有定義。如果進行一位移動,則按照運算元的最高符號位是否改變,相應設定溢位標誌of:如果移位前的運算元最高位與移位後運算元的最高位不同(有變化),則of=1;否則of=0。當移位次數大於1時,of不確定。
邏輯左移指令shl執行一次移位,相當於無符號數的乘2;邏輯右移指令shr執行一位移位,相當於無符號數除以2,商在目的運算元中,餘數由cf標誌反映。算術右移指令sar執行一次移位,相當於有符號數除以2。但應注意,當運算元為負(最高位為1),並且最低位有1移出時,sar指令產生的結果與idiv指令的結果不同。
三、迴圈移位指令
迴圈移位指令類似移位指令,但要從一端移出的位返回到另一端形成迴圈。分成不帶進製標誌迴圈和帶進製標誌迴圈。
1、不帶進製標誌迴圈指令rol和ror
rol reg/mem,1/cl ;不帶進製迴圈左移
ror reg/mem,1/cl ;不帶進製迴圈右移
2、帶進製迴圈移位指令rcl和rcr
rcl reg/mem,1/cl ;帶進製迴圈左移
rcr reg/mem,1/cl ;帶進製迴圈右移
迴圈移位指令按照指令功能設定進製標誌cf,不影響sf、zf、pf、af標誌。對of標誌的影響,迴圈移位指令與移位指令一樣。
移位操作指令和迴圈移位操作指令示意圖:
C語言入門(十一)位操作
位域 允許把乙個位元組拆開來使用,把乙個位元組的二進位制位劃分成不同的區域,並支援命名 使用位域的做法是在結構體定義時,在結構體成員後面使用冒號和數字來表示該成員所佔的位數 位域的寬度不能超過它所依附型別的長度 位域成員可以沒有名稱,只要給出資料型別和位寬即可 不能對位域進行取址運算 如 struc...
彙編中的操作指令
不太會搞,將就著看吧。說明 小括號裡是指令格式,後面是指令的功能,opd是目的運算元,ops是源運算元1 加法指令 add加法 add opd,ops opd opd ops adc帶進製加法 adc opd,ops opd opd ops cf inc加1 inc opd opd的內容加 opd可...
彙編(十) 算術運算類指令
算術運算類指令用來執行二進位制及十進位制的算術運算 加減乘除。這類指令會根據運算結果影響狀態標誌,有時要利用某些標誌才能得到正確的結果。一 加法指令 1 加法指令add add reg,imm reg mem reg reg imm reg mem add mem,imm reg mem mem i...