Assembler proqramlaşdırma dili

Verilənlərin genişləndirilməsi əmrləri

Verilənlərin genişləndirilməsi əmrləri

Əmrlərdə operandların ölçüsünü uyğunlaşdırmaq üçün verilənlərin genişləndirilməsi əmrlərindən istifadə olunur. Bu əmrlər işarə mərtəbəsinin qiymətini nəzərə almaqla, baytı sözə, sözü ikiqat sözə və ikiqat sözü dördqat sözə genişləndirir.

Bu əmrlər iki qrupa bölünür:

1. Birinci qrupa konkret registrlərlə işləyən aşağıdakı operandsız əmrlər daxildir:

CBW/CWDE (Convert Byte to Word/Convert Word to Double word Extended) əmrləri uyğun olaraq baytı sözə və sözü ikiqat sözə, CDQ (Convert Double word to Quarter word, i80386) əmri isə ikiqat sözü dördqat sözə tamamlayır.

Bu qrupa daxil olan bütün əmrlər operandsız əmrlərdir. Əmrlərin işləmə alqoritmi aşağıdakı kimidir:

CBW əmrinində yalnız AL və AX registrlərindən istifadə olunur. Əmrin icrası zamanı AL registrinin işarə mərtəbəsi analiz olunur:

- əgər AL registrinin işarə mərtəbəsi 0 –dırsa, onda AH=00h (AH registrinin bütün mərtəbələri sıfırlarla doldurulur) kimi doldurulur;

- əgər AL registrinin işarə mərtəbəsi 1-ə bərabərdirsə, onda AH=0FFh (AH registrinin bütün mərtəbələri vahidlərlə doldurulur) kimi doldurulur.

CWDE əmrində yalnız AX və EAX registrlərindən istifadə olunur. Əmr icra olunduqda AX registrinin işarə mərtəbəsinin qiyməti ilə EAX registrlərinin böyük sözünün bütün mərtəbələri doldurulur.

Bu əmrlərdən, işarə mərtəbəsini nəzərə almaqla operandları tələb olunan ölçüyə gətirmək üçün istifadə olunur. Belə tələb isə, xüsusi halda hesab əməliyyatlarının proqramlaşdırılmasında yarana bilər. Məsələn:

    MOV EDX, 10FECD23H
    MOV AX, -3              ; AX= 1111 1111 1111 1101B
    CWDE                     ;EAX=1111 1111 1111 1111 1111 1111 1111 1101B
    ADD EAX, EDX

Verilənlərin genişləndirilməsi əmrlərinin icra strukturu aşağıdakı kimi göstərilə bilər:

 

Misal:

MOV AL,0F5h 	;=245=-11 ;
CBW 		;indi AX=0FFF5h= 65525=-11

2. İkinci qrupa isə sətirlərin emalı əmrlərinə aid olan MOVSX və MOVZX əmrlər daxildir.

MOVSX (i80386) işarənin genişləndirməsi ilə göndərmə əmri olub, aşağıdakı kimi yazılır:

MOVSX qəbuledici, mənbə

Bu əmr bayt, söz və ya ikiqat söz uzunluğunda (registr və ya dəyişən ola bilər) mənbənin məzmununu işarə bitindən istifadə etməklə, CBW/CWDE əmrlərinə uyğun olaraq 16 və ya 32 mərtəbəyə qədər genişləndirib qəbulediciyə köçürür. Bu əmrdən, işarəli operandlar üzərində hesab əməliyyatlarının aparılması zamanı istifadə etmək əlverişlidir.

Misallar:

a) MOVSX BX,AX        ; MOV əmri kimi işləyir
b) MOVSX EBX,EAX      ; MOV əmri kimi işləyir
v) MOVSX CX,AL        ; baytı sözə genişləndirməklə
                      ; göndərmə 
q) MOVSX ECX,AL      ; baytı ikiqat  sözə
                      ; genişləndirməklə  göndərmə 
d) MOVSX ECX,AX      ; sözü ikiqat sözə 
                      ; genişləndirməklə göndərmə

MOVZX (i80386) sıfır genişləndirməsi aparmaqla göndərmə əmri olub, aşağıdakı kimi yazılır:

MOVZX qəbuledici, mənbə

Bu əmr bayt və ya söz uzunluğunda olan (registr və ya dəyişən ola bilər) mənbənin məzmununu 16 və ya 32 mərtəbəli qəbulediciyə köçürür və bu zaman qəbuledicinin böyük mərtəbələrini sıfırlarla doldurur. Bu əmrdən işarəsiz operandlar üzərində hesab əməliyyatlarının aparılması zamanı istifadə etmək əlverişlidir.

Məsələn:

MOVZX   AX, BL      ; əmri AH-ın bütün mərtəbələrini
		    ; sıfırlaşdırır. 
Bu əmr aşağıdakı əmrlər cütlüyünə ekvivalentdir.
MOV     AL, BL
MOV     AH, 0 

Qeyd edək ki, tiplərin çevrilməsi əmrlərinin icrasından sonra bayraqların vəziyyəti dəyişməz qalır.