BT BTS BTR BTC 位測試指令

2021-06-16 14:10:59 字數 3625 閱讀 4233

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 測試是為了發...