汇编语言XOR指令:对两个操作数进行逻辑(按位)异或操作
XOR 指令在兩個操作數的對應位之間進行(按位)邏輯異或(XOR)操作,并將結果存放在目標操作數中:
?
XOR destination, source
XOR 指令操作數組合和大小與 AND 指令及 OR 指令相同。兩個操作數的每一對對應位都應用如下操作原則:如果兩個位的值相同(同為 0 或同為 1),則結果位等于 0;否則結果位等于 1。
下表描述的是布爾運算 X十y:
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
與 0 異或值保持不變,與 1 異或則被觸發(求補)。對相同操作數進行兩次 XOR 運算,則結果逆轉為其本身。如下表所示,位 x 與位 y 進行了兩次異或,結果逆轉為 x 的初始值:
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 1 |
| 1 | 1 | 0 | 1 |
異或運算這種“可逆的”屬性使其成為簡單對稱加密的理想工具。
標志位
XOR 指令總是清除溢岀和進位標志位,并根據目標操作數的值來修改符號標志位、零標志位和奇偶標志位。
檢查奇偶標志
奇偶檢查是在一個二進制數上實現的功能,計算該數中 1 的個數;如果計算結果為偶數,則說該數是偶校驗;如果結果為奇數,則該數為奇校驗。
x86 處理器中,當按位操作或算術操作的目標操作數最低字節為偶校驗時,奇偶標志位置 1。反之,如果操作數為奇校驗,則奇偶標志位清 0。一個既能檢查數的奇偶性,又不會修改其數值的有效方法是,將該數與 0 進行異或運算:
mov al,10110101b? ? ? ? ? ? ? ;5 個 1,奇校驗
xor al, 0?????????????????????????????? ;奇偶標志位清 0 (奇)
mov al, 11001100b? ? ? ? ? ? ?;4 個 1,偶校驗
xor al, 0?????????????????????????????? ;奇偶標志位置 1(偶)
Visual Studio 用 PE=1 表示偶校驗,PE=0 表示奇校驗。
16 位奇偶性
對 16 位整數來說,可以通過將其高字節和低字節進行異或運算來檢測數的奇偶性:
mov ax,64Clh??? ;0110 0100 1100 0001
xor ah, al??????????? ;奇偶標志位置1 (偶)
將每個寄存器中的置 1 位(等于 1 的位)想象為一個 8 位集合中的成員。XOR 指令把兩個集合交集中的成員清 0,并形成了其余位的并集。這個并集的奇偶性與整個 16 位整數的奇偶性相同。
那么 32 位數值呢?如果將數值的字節進行編號,從 B? 到 B? 那么計算奇偶性的表達式為:B? XOR B?? XOR B?? XOR B?。
6.1?布爾和比較指令簡介
6.2?AND指令
6.3?OR指令
6.4?位向量(位映射)
6.5?XOR指令
6.6?NOT(反碼)指令
6.7?TEST指令
6.8?CMP(比較)指令
6.9?置位和清除單個CPU標志位
6.10?64位模式下的布爾指令
6.11?條件跳轉簡介
6.12?條件跳轉指令匯總
6.13?條件跳轉應用及示例
6.14?LOOPZ和LOOPE指令
6.15?LOOPNZ和LOOPNE指令
6.16?使用匯編語言實現IF語句
6.17?使用匯編語言實現邏輯表達式
6.18?使用匯編語言實現WHILE循環
6.19?表驅動選擇
6.20?有限狀態機
6.21?條件控制流偽指令
6.22 .IF、.ELSE、.ELSEIF、.ENDIF偽指令
6.23?用.REPEAT和.WHILE實現循環
總結
以上是生活随笔為你收集整理的汇编语言XOR指令:对两个操作数进行逻辑(按位)异或操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 异或(xor)的讲解和使用方法
- 下一篇: 异或(XOR)的基本理解