bt、bts、btr、btc: 位測試指令
;bt(bittest): 位測試;bts(bit test and set): 位測試並置位;btr(bit test and reset): 位測試並復位
;btc(bit test and complement): 位測試並取反
;它們的結果影響 cf
;它們的指令格式相同:
btr16/r32/m16/m32, r16/r32/m16/m32
btr16/r32/m16/m32, i8
; test23_1.asm
.386
.modelflat,stdcall
includewindows.inc
includekernel32.inc
includemasm32.inc
includedebug.inc
includelibkernel32.lib
includelibmasm32.lib
includelibdebug.lib
.code
mainproc
;bt 把 10000001b 的第七位複製到 cf, 得知是 1
movdx, 10000001b
btdx, 7
lahf
printhexah;47 - 01000111b (cf=1)
;bt 把 10000001b 的第六位複製到 cf, 得知是 0
btdx, 6
lahf
printhexah;86 - 10000110b (cf=0)
;bts 在執行 bt 命令的同時, 把運算元的指定位置為 1
movdx, 10000001b
btsdx, 6
printhexdl;c1 - 11000001b
;btr 在執行 bt 命令的同時, 把運算元的指定位置為 0
movdx, 10000001b
btrdx, 7
printhexdl;01 - 00000001b
;btc 在執行 bt 命令的同時, 把運算元的指定位取反
movdx, 10000001b
btcdx, 0
printhexdl;80 - 10000000b
btcdx, 0
printhexdl;81 - 10000001b
ret
mainendp
endmain
bsf、bsr: 位掃瞄指令
;bsf(bit scan forward): 位掃瞄, 低 -> 高;bsr(bit scan reverse): 位掃瞄, 高 -> 低;它們的結果影響 zf
;掃瞄的是引數二, 找到是 1 的位後, 把位置數給引數一併置 zf=0
;找不到(也就是引數二是 0)時, 置 zf=1
;它們的指令格式相同:
bsfr16/r32, r16/r32/m16/m32
; test23_2.asm
.386
.modelflat,stdcall
includewindows.inc
includekernel32.inc
includemasm32.inc
includedebug.inc
includelibkernel32.lib
includelibmasm32.lib
includelibdebug.lib
.code
mainproc
;掃瞄到時
movdx, 0000111100001100b
bsfcx,dx
printdeccx;2 - 也就是左數第 3 位
bsrcx,dx
printdeccx;11 - 也就是左數第 12 位
;掃瞄不到時
movcx, 0ffffh
movdx, 0
bsfcx,dx
lahf
printhexah;c6 - 11000110 (zf=1)
printhexcx;ffff - 找不到時不會影響到目的值
ret
mainendp
endmain
測試標誌位指令
測試某些示志位的情況來設定位元組的指令 這是一大類指令,格式為 setxx reg8 mem8 它的功能是 若條件xx成立,則位元組暫存器reg8或節儲存器單元被設定為1,否則被設定為0.條件xx 見下表 setz sete zf 1 等於零 相等 setnz setne zf 0 不等於零 不相等...
劍指Offer(五) 位運算
寫乙個函式,求兩個整數之和,要求在函式體內不得使用 四則運算符號。位運算 coding utf 8 class solution def add self,num1,num2 write code here a,b num1,num2 while b 0 a,b a b,a b 1 a 0xffff...
軟體測試是指什麼?
為了發現程式中的錯誤而執行程式的過程 它是幫助識別開發完成 中間或最終的版本 的計算機軟體 整體或部分 的正確度 correctness 完全度 completeness 和質量 quality 的軟體過程 是sqa software quality assurance 的重要子域。1 測試是為了發...