Assembler proqramlaşdırma dili

Bitlərə ardıcıl baxış ( skanlaşma) əmrləri

Bitlərə ardıcıl baxış ( skanlaşma) əmrləri

BSF (Bit Scaning Forward, i80386) və BSR (Bit Scaning Reset, i80386) əmrləri, mənbənin bitlər ardıcıllığında qiyməti 1 olan birinci biti axtarır. BSF əmrimənbənin bitlər ardıcıllığının başlanğıcından sonuna və BSR əmri isə sonundan başlanğıcına doğru axtarış aparır.

BSF əmri ümumi şəkildə aşağıdakı kimi yazılır:

BSF qəbuledici,mənbə

Bu əmr, söz və ya ikiqat söz (registr və ya dəyişən) uzunluğunda mənbənin kiçik mərtəbəsindən başlayaraq, böyük mərtəbəyə (0-cı bitdən böyük 15/31bitə doğru) doğru ardıcıl baxış keçirərək, qiyməti 1 olan birinci biti axtarır. Əgər axtarış zamanı 1 olan bit tapılarsa onda, ZF bayrağına 0 yazılır və bu bitin nömrəsi qəbulediciyə (registrə) yazılır. Əks halda, ZF=1 vəziyyətinə gətirilir.

Məsələn, BX registrinin məzmununu sağa elə sürüşdürün ki, sıfırıncı bit vahid olsun:

.386   
MOV BX,0002h    ;  BX=0000 0010b
...
BSF   CX,BX         ; CX=0001h, ZF=0 1-ci vahid 
                     ; bitin nömrəsi CX-də
JZ NULL
SHR BX,CL           ;  BX=0000 0001B
...
NULL:
BSF əmrinin tətbiqinə aid daha bir neçə misala baxaq:

a) MOV AX, 4     ; 0000 0000 0000 0100b
BSF BX,AX   ; BX=2, ZF=0
b)
MOV AX,0
BSF   BX,AX   ; BX=0, ZF=1

BSR əmri ümumi şəkildə aşağıdakı kimi yazılır:

BSR qəbuledici,mənbə

Bu əmr söz və ya ikiqat söz (registr və ya dəyişən) uzunluğunda mənbənin bitlərinə əks istiqamətdə, yəni böyük mərtəbəsindən başlayaraq kiçik mərtəbəyə doğru ardıcıl baxış keçirir. Başqa sözlə birinci 1 olan biti axtarır. Əgər axtarış zamanı 1 olan bit tapılarsa, onda qəbulediciyə onun nömrəsi tam qiymət kimi qeyd olunur (nömrə 0-cı bitdən olan məsafəyə görə qiymətləndirilir). Əgər mənbənin bütün bitləri 0 olarsa, onda ZF bayrağı 1 vəziyyətinə, əks halda isə 0 vəziyyətinə gətirilir.

BSR əmrindən, bitlər səviyyəsində iş zamanı, operandda soldan axırıncı vahid bitin mövqeyini müəyyənləşdirmək üçün istifadə olunur. Məsələn: BX registrinin məzmununu elə sürüşdürün ki, ilkin qiymətdəki böyük vahid bit BX registrində sıfırıncı mövqedə yerləşsin:

MASM
MODEL SMALL
.386
.STACK 256
...
 XOR AX,AX
MOV AX, 8000h; 1000 0000 0000 0000b
BSR BX,AX ; BX=0Fh, ZF=0
...