Please enable JavaScript.
Coggle requires JavaScript to display documents.
Ch6 (Boolean and Comparison Instructions (XOR Instruction (Flag變化 (CF = 0,…
Ch6
Boolean and Comparison Instructions
Bit-Mapped Sets(位元映射集合) : 最右邊是bit0
XOR Instruction
Flag變化
CF = 0, OF = 0
改變 SF、ZF、PF
Parity
XOR(reg,0) Can be used to check the parity of a number without changing its value
xOR ah,al
檢查16-bits的parity (因為兩個1會被cancel掉)
檢查32bits data 則要拆部分來XOR ( B0 XOR B1 XOR B2 XOR B3)
用途
可用來做翻轉(0變1,1變0)
TEST Instruction
執行"沒有破壞性"的AND
不改變destination運算元
SF,ZF,PF會被改變,OF,CF會被清除(跟AND相同)
CMP Instruction
說明
執行一個隱含的減法
兩個運算元都不會被修改
Unsigned
Destination < source ZF = 0, CF = 1 (借位)
Destination > source ZF = 0, CF = 0 (沒借位)
Destination = source ZF = 1, CF = 0
Signed
Destination < source SF != OF
Destination > source SF = OF
Destination = source ZF = 1
Setting and Clearing Individual CPU Flags (有地方怪怪的)
AND / OR 指令
CF = 0, OF = 0
改變 SF、ZF、PF
Boolean Instructions in 64-Bit Mode
當運算元為32-bits時,只有較低位的32-bits會被影響
但當immediate value 為 8, 16, or 24 bits時,RAX upper 32 bits會被清空
小結 : AND/OR/XOR/TEST 都是 clear CF.OF 然後更改SF.ZF.PF
應用 : 有限狀態機
說明
initaial state : 被箭頭指向的node
terminal state : 被粗框框起來的node
兩種不合法情況
下一個字元無法對應到任何狀態
input結束了,但卻無法達到終止狀態
IsDigit
Procedure : if(isDigit) ZF = 1;
Conditional Jumps
Specific jumps
JB, JC : CF = 1
JE, JZ : ZF = 1
JS : SF = 1
JNE, JNZ : ZF = 0
JECXZ : ECX = 0
JL, JG : less與greater
Conditional Jump
四大類型
特定旗標值
JZ/JNZ : ZF = 1 / 0
JC/JNC : CF = 1 / 0
JO/JNO : OF = 1 / 0
JS/JNS : SF = 1 / 0
JP/JNP : PF = 1 / 0
相等
JE/JNE : leftOP = rigntOP / leftOP != rigntOP
JCXZ/JECXZ/JRCXZ : CX/ECX/RCX = 0
無號數比較
JA/JNBE/JAE/JNB/JB/JNAE/JBE/JNA
A : above (>)
E : eaual (=)
B : below (<)
有號數比較
JG = JNLE (>)
JGE = JNL (>=)
JL = JNGE (<)
JLE = JNG (<=)
有號無號的比較
無號 : A、B、E
有號 : G、L、E
Conditional Loop Instructions
LOOPZ、LOOPE
if ( ECX>0 && ZF = 1 ) → jump (可用來搜尋陣列中第一個
不符合
條件的元素在哪裡)
LOOPNZ、LOOPNE
if ( ECX>0 && ZF = 0 ) → jump (可用來搜尋陣列中第一個
符合
條件的元素在哪裡)
Conditional Control Flow Directives
說明
在64-bit中不能用
在組譯我們寫的code之前,組譯器會事先處理好directives
Directive為組譯器所提供之為讓程式設計者容易撰寫程式之特殊指令,在組譯過程中將先被轉為組合語言,類似C語言的macro。
ex
.IF, .ELSE, .ELSEIF, .ENDIF, .REPEAT, .WHILE
Conditional Structures
Table-Driven Selection
使用表格查找的方式,替代多路選擇的結構
建一個含有lookup values跟procedure lables offset(value+1)的表格
使用loop來做整個表格的搜尋
適用於多個比較