Xətti sürüşdürmə əmrləri
Bu tip əmrlərdə sürüşdürmə zamanı növbəti «sürüşdürülən» bit CF bayrağında yerləşdirilir və bu halda əvvəlki sürüşən bitin qiyməti itir.
Xətti sürüşdürmə əmrləri də iki altqrupa ayrılır:
-məntiqi xətti sürüşdürmə əmrləri;
-hesabi xətti sürüşdürmə əmrləri.
Məntiqi sürüşdürmə əmrləri işarəsiz ədədlər və ya ədədi olmayan verilənlər üzərində, hesabi sürüşdürmə əmrləri isə işarəli ədədlər üzərində əməliyyat zamanı istifadə olunur.
Məntiqi xətti sürüşdürmə əmrlərinə SHL (SHift logical Left- məntiqi sola sürüşdürmə) və SHR (SHift logical Right- məntiqi sağa sürüşdürmə) əmrləri daxildir.
SHL əmri qəbuledicinin məzmununu sayğacın qiyməti ilə təyin olunmuş bitlərin sayı qədər sola sürüşdürür və sağdan kiçik bitin yerinə sıfır yazılır
SHR əmri qəbuledicinin məzmununu, sayğacın qiyməti ilə təyin olunmuş bitlərin sayı qədər sağa sürüşdürür və soldan işarə bitinə sıfır yazılır.
Məsələn, əgər AL registrinin məzmunu 0B4h (və ya 10110100b), CF=1 olarsa,
a) SHL AL,1 ; əmrinin icrasından sonra ; AL=01101000b, CF=1 alınar. b) SHR AL,1 ; əmrinin icrasından sonra isə ;AL=01011010b, CF=0 alınar.
Məntiqi xətti sürüşdürmə əmrlərinin köməyi ilə işarəsiz ədədləri 2 –nin tərtibinə vurmaq və bölmək olar.
Misal:
MOV CL,3 SHL BX,CL ;işarəsiz ədəd 8-ə vurulur SHR BX,CL ;işarəsiz ədəd 8-ə bölünür.
Aşağıda bcd_num adlı söz uzunluqlu yaddaş sahəsindəki iki qeyri-yığcam BCD ədədini AL registrində yığcam BCD ədədinə çevirən proqram fraqmenti verilmişdir;
... bcd _num DW 0203h ; Qeyri yığcam 23 BCD ədədi ... MOV AX,bcd_num ; AX=0203h MOV CL, 4 SHL AH, CL ; AH=20h, AL=03h ADD AL,AH ; nəticədə: AL=23h
Hesabi xətti sürüşdürmə əmrlərinə SAL (Shift Arithometic Left- hesabi sola sürüşdürmə) və SAR (Shift Aritometic Right-məntiqi sağa sürüşdürmə) əmrləri daxildir və onlar məntiqi sürüşdürmə əmrlərindən fərqli olaraq qəbuledicinin işarə mərtəbəsi ilə xüsusi formada işləyir.
SAL əmri qəbuledicinin məzmununu, sayğacda verilmiş qiymətə görə təyin olunmuş bitlərin sayı qədər sola sürüşdürür. Sağdan kiçik bitin mövqeyinə sıfır yazılır. SAL əmri işarəni saxlamır və yalnız növbəti sürüşdürülən bitdə işarə mərtəbəsinin qiyməti dəyişdikdə, OF bayrağına 1 yazır. SAL əmri SHL əmrinə analoji işləyir.
Misal: fərz edək ki, AL=0AAh (AL=10101010b), köçürmə bayrağı isə CF=0 - dır.
SAL AL,1 ; əmri icra olunduqdan sonra
; AL=01010100b, CF=1, OF=1 olar.
SAR əmri qəbuledicinin məzmununu, sayğacda verilmiş qiymətə görə təyin olunmuş bitlərin sayı qədər sağa sürüşdürür. Bu halda qəbuledicinin işarə bitindən başqa bütün bitlər sürüşdürülür və soldan boşaldılmış bitlər işarə mərtəbəsindəki rəqəm ilə doldurulur. SAR əmri hər növbəti sürüşdürülən mərtəbədən sonra işarəni bərpa edərək saxlayır.
Misal: fərz edək ki, AL=0A8h (AL=10101000b), köçürmə bayrağı isə CF=0 - dır
SAR AL,1 ; əmri icra olunduqdan sonra ; AL=11010100b, CF=0, OF=0 olacaq.
Hesabi xətti sürüşdürmə əmrlərinin köməyi ilə işarəli ədədləri 2 –nin tərtibinə vurmaq və bölmək olar.
Misal: MOV CL,2 SAL AX,CL ; işarəli ədədi 4-ə vurmaq SAR AX,CL ; işarəsli ədədi 4-ə bölmək
Aşağıdakı proqram icra edildikdə ‘0123456789’ sətrindəki işarələrin uyğun 2-lik kodları ekranda əks olunur. Belə nəticə sürüşdürmə və məntiqi əmrlərin tətbiqi ilə alınır.
SSEG SEGMENT STACK DB 256 DUP(?) SSEG ENDS ; stek seqmentinin sonu DATA SEGMENT MESSAGE1 DB 'ILKIN VEILENLER',10,13,'$' MESSAGE2 DB 'VERILENLERIN UYQUN 2-LIK KODLARI',10,13,'$' C DB '0123456789',10,13,'$' RES DB ?,' --> ',10 DUP(0),10,13,'$' DATA ENDS ;verilənlər seqmentinin sonu CODE SEGMENT PARA PUBLIC 'CODE' ASSUME CS:COD,SS:SSEG,DS:DAT START PROC FAR PUSH DS PUSH AX MOV AX,DAT MOV DS,AX MOV AX,SSEG MOV SS,AX CALL MAIN RET START ENDP MAIN PROC NEAR MOV AH,9H MOV DX, OFFSET MESSAGE1 INT 21H MOV AH,9H MOV DX, OFFSET C INT 21H MOV AH,9H MOV DX, OFFSET MESSAGE2 INT 21H MOV SI,0 MOV AH,0 TEKRAR: MOV AL,C[SI] MOV RES,AL MOV DI,0 MOV CL,8 NEXT: SHL AX,1 AND AH,1B ADD AH,30H MOV RES[DI+6],AH INC DI LOOP NEXT LEA DX,RES MOV AH,9H INT 21H INC SI CMP SI,10 JNE TEKRAR RET MAIN ENDP CODE ENDS END START