X86 匯編/邏輯

維基教科書,自由的教學讀本

匯編的邏輯操作對被操者逐位進行, 及逐位邏輯運算. 類似高級語言之位運算, 而非高級語言之邏輯運算.

逐位取反: 
not X  ; X<-not X, 不影响标存器

逐位与,或及异或: X<-X {and,or,xor} Y, 更新SF,ZF,PF标志
and X, Y;
or X,Y;
xor X,Y;

位测试及操作: op X,Y; 将X中的第Y位存入CF标志, 再做op操作
bt X, Y ; CF<-X之Y位
bts X, Y; CF<-X之Y位, 再置X之Y位
btr X, Y; CF<-X之Y位, 再清X之Y位
btc X, Y; CF<-X之Y位, 再反X之Y位

寻1: 
bsf ,  ; bsf对源从低权位向高权位逐位寻找,找到1停止, 并将此1之权位入靶. bsr逆向寻1. 若未找到, 则置ZF否则清0.

移位 X, Y ; 将X左或右移Y位, shl,sal左移, shl同sal, shr,sar右移, Y为立即数或CL暂存器.
shl al, cl ; 将al左移cl位, al右空位补0, 最后移出位存CF中.
shr al, 5 ; 将al右移5位, 最后移出位存CF中, shr对al左空位补零, sar对al左空位补以al初始值之符号位.

补移 D,S,IC ; 将D左移或右移IC位, D之空位补以S同侧cl位,S值不变
shld ax,bx,cl ; 将ax左移cl位, ax右之空位由bx左cl位补齐, bx不变
shrd [di],ax,6; 将[di]右移6位, [di]左侧空位由ax右6位补齐, ax不变

位转圈 D, S ; 将D转动S位
rol D, S ; 将D左移出S位并按移出次序补于D之右空位
rcl D, S ; 将D左移出S位并按移出次序补于D之右空位, 并将D最后移出位存于CF标志
ror,rcr 分别为 rol,rcl之右移版

test D, S ; 逻辑比较, 做 D and S运算并更新SF,ZF,PF标志, 同and指令但不改变D.

bswap R ; 字节交换指令, 逆转R内字节顺序, 用于大小尾模式转换.