Assembler proqramlaşdırma dili

Dövrü sürüşdürmə əmrləri

Dövrü sürüşdürmə əmrləri

Dövrü sürüşdürmə əmrlərinə, sürüşdürülən bitin qiymətini saxlayan əmrlər daxildir. İki cür dövrü sürüşdürmə əmrləri mövcudur:

- sadə dövrü sürüşdürmə əmrləri;

- CF köçürmə bayrağından keçməklə dövrü sürüşdürmə əmrləri.

Sadə dövrü sürüşdürmə əmrlərinə ROL (ROtate Left- dövrü sola sürüşdürmə) və ROR (ROtate Right – dövrü sağa sürüşdürmə) əmrləri daxildir.

ROL əmri qəbuledicinin məzmununu, sayğacda verilmiş qiymətə görə təyin olunmuş bitlərin sayı qədər mərtəbələri sola sürüşdürür. Soldan sürüşdürülən bitlər, eyni zamanda, qəbulediciyə sağdan yazılır

ROR əmri qəbuledicinin məzmununu sayğacda verilmiş qiymətə görə təyin olunmuş bitlərin sayı qədər mərtəbələri sağa sürüşdürür. Sağdan sürüşdürülən bitlər CF köçürmə bayrağına və eyni zamanda qəbulediciyə soldan yazılır.

Bu əmrlərdə dövrü sürüşdürülən bit qəbuledicinin o biri sonundan daxil edilir və onun qiyməti CF bayrağına yazılır.

Misal üçün EAX registrinin kiçik və böyük hissələrinin məzmununu dəyişdirmək üçün aşağıdakı əmrlər ardıcıllığını icra etmək lazımdır:

MOV EAX, 0FFFF0000h
MOV CL,16
ROL EAX,CL

CF köçürmə bayrağından keçməklə dövrü sürüşdürmə əmrlərində, sadə dövrü sürüşdürmə əmrlərindən fərqli olaraq, sürüşdürülən bit əvvəlcə CF köçürmə bayrağına yazılır (CF-in qiyməti isə qəbuledicinin obiri sonuna yazılır), qəbuledicinin o biri sonundan daxil edilir.

CF köçürmə bayrağından keçən dövrü sürüşdürmə əmrlərinə RCL (Rotate through Carry Left –köçurməklə dövrü sola sürüşdürmə) və RCR (Rotate through Carry Right- köçurməklə dövrü sağa sürüşdürmə) əmrləri daxildir.

RCL əmri qəbuledicinin məzmununu, sayğacda verilən qiymətə görə təyin olunmuş bitlərin sayı qədər mərtəbələri sola sürüşdürür və sürüşdürülən bitlər növbə ilə CF köçürmə bayrağına yazılır

RCR əmri qəbuledicinin məzmununu, sayğacda verilən qiymətə görə təyin olunmuş bitlərin sayı qədər mərtəbələri sağa sürüşdürür. Sürüşdürülən bitlər növbə ilə CF köçürmə bayrağına yazılır.

Misal: AL=10110100b, CF=1 olduqda:
a) ROL AL,1     	; əmrinin icrasından sonra :
                   		;AL=01101001b, CF=1 
b) ROR AL,1    	; AL=01011010b, CF=0
v) RCL AL,1     	; AL=01101001b, CF=1
q) RCR AL,1     	; AL=11011010b, CF=0      alınar.

İndi isə göstərilən əmrlərin iştirakı ilə EAX registrinin böyük yarısını BX registrinə yazıb, eyni zamanda, EAX registrində onun yerini sıfırlarla dolduran proqram fraqmentinə baxaq:

            XOR  BX,BX
            MOV CX,16 
m1:     CLC                   ; CF bayrağını sıfır 
                                       ;vəziyyətinə gətirmək  
            RCL EAX,1     ; EAX –dan kənar sol biti 
                                       ; CF-ə sürüşdürmək
            RCL BX,1        ; CF –dən biti sağdan 
                                      ;BX-ə köçürmək
            LOOP m1         ; 16 dəfə dövrü təkrar etmək 
            ROL EAX,16   ; EAX –in sağ hissəsini 
                                       ;bərpa etmək

Növbəti proqram fraqmenti EAX registrindəki vahid bitlərin sayını hesablayır:

             XOR DX, DX 
             MOV CX,32      ; hesablanan dövrlərin sayı
cycl: 
             ROR EAX,1     ;1 bit sağa dövrü sürüşdürmə
             JNC no_one      ; əgər CF –dəki bit
                                        ; vahidə bərabər deyilsə,keçid
              INC DX 
no_one:
             LOOP cycl        ; cycl nişanına keçid, əgər
                                        ;  CX-də  qiymət  0 deyilsə