Assembler proqramlaşdırma dili

xlat çevirmə əmri

xlat çevirmə əmri

Verilənləri çevirmək üçün, mikroprosessorun bir neçə əmrləri mövcudur. Bunların bəziləri bu və ya başqa xüsusiyyətlərə malik olduğundan onları başqa funksional qruplara aid etmək lazım gəlir. Bu səbəbdən verilənlərin çevrilməsi əmrlərinə bilavasitə mikroprosessorun xlat/XLATB (TransLATe Byte from table) əmrlərini aid etmək olar. Əmrlər aşağıdakı kimi yazılır:

xlat [kodlaşdırma_cədvəlinin_ünvanı]

və ya xlatB

Kvadrat mötərizə içərisindəki parametr məcburi deyil. Onu yazmamaq da olar. xlat əmri AL registrindəki baytı kodlaşdırma_cədvəlinin_ünvanı operandı ilə təyin edilən ünvandakı baytlar ardıcıllığında olan (cədvəldəki) baytla əvəz edir.

Burada «cədvəl» sözü tamamilə şərti olub, mahiyyətcə sadəcə baytlar sətridir. AL registrində olan verilənlər dəyişdiriləcək sətrdəki baytın ünvanı (bx)+(al) və ya (Ebx)+(al) cəmi ilə təyin olunur. Yəni, AL registrinin məzmunu baytlar massivində indeks rolunu oynayır.

Əmrdə yeni qiyməti daxil ediləcək baytın ünvanı göstərilsə də, onu əvvəlcədən (məsələn, Lea əmrinin köməyi ilə) bx registrinə yükləmək lazımdır. Ona görə də xlat əmrindəki kodlaşdırma_cədvəlinin_ünvanı operandının mənası yoxdur. Baytlar cədvəli isə 0, … 255 baytlar diapazonundakı yaddaş sahəsinin ölçüsüdür.

xlat əmri seqmenti dəyişdirməyə imkan verir.

XLATB əmrindən o zaman istfadə olunur ki, EBX/BX registrinin qiyməti, DS registri ilə təyin olunmuş seqmentindəki ünvanı göstərir.

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

Bu əmrlərin işləmə prinsipinə, klaviaturadan simvol şə­kilində daxil edilən onaltılıq ədədi, aL registrində uyğun ikilik təsvirə çevirən proqram listinqində baxaq. Onaltılıq rəqəmlərin ASCII_kodları aşağıdakı cədvəldə göstə­ril­mişdir:

<1>   ; İkirəqəmli 16-lıq ədədin XLAT əmrindən 
<2>    ; istifadə etməklə ikilik təsvirə çevrilməsi proqramı.
<3> ;Giriş: ilkin16-lıq ədədin klaviaturadan daxil 
        ; edilməsi.
<4> ; Çıxış:  çevirmənin nəticəsi AL registrində.
        MASM
        MODEL SMALL
<5> .DATA              ; Verilənlər seqmenti
<6>  message DB	”İki 16-lıq ədədi daxil et,$”
<7>  tabl  DB	48 dup (0),1,2,3,4,5,6,7,8,9,7 dup (0)
<8>               DB  0Ah,0Bh,0Ch,0Dh,0Eh,0Fh,26 dup (0)
<9>              DB      0ah,0bh,0ch,0dh,0eh,0fh, 152 dup (0)
<10> .STACK 256    ; Stek seqmenti
<11> .CODE
<12>                          ; Kodlar seqmentinin başlanğıcı
<13> main PROC    ; main prosedurunun başlanğıcı
<14>	MOV AX,@DATA ; Verilənlər seq-nin 
                                                   ; ünvanının AX  registrinə
                                                   ; göndərmək
<15>	MOV   DS,AX         ; AX registrinin məzmunu 
                                                   ; DS registrinə göndərmək
<16>	LEA   BX,tabl         ; baytlar sətrinin ünvanını
                                                  ; AX registrinə göndərmək
<17>	MOV   AH,9
<18>	MOV   DX,OFFSET message
<19>	INT  21h    ; 3 əmr ilə ‘İki 16-lıq ədədi daxil et’ 
                                    ; sözünün ekrana verilməsi
<20>	XOR   AX,AX   ; AX registrini təmizləmək
<21>	MOV   AH,1      ; AH  registrinə 1 yazmaq
<22>	INT 21h              ; birinci rəqəmi AL registrinə 
                                             ; daxil etmək
<23>		XLAT              ; AL registrinə daxil edilmiş 
                                            ; birinci simvolu kodlaşdırmaq
<24>	MOV   DL,AL
<25>	SHL   DL,4       ; DL-i 4 bit sola sürüşdürmə 
<26>	INT   21h           ; İkinci simvolu AL registrinə 
                                            ; daxil etmək
<27>	XLAT                ; AL registrinə daxil edilmiş 
                                            ; 2-ci  simvolu kodlaşdırmaq
<28>	ADD   AL,DL  ; Nəticəni almaq üçün toplama
<29>	MOV  AX,4C00h
<30>	INT   21h          ; proqramın sonu
<31> main ENDP           ; main prosedurunun sonu
<32> END   main            ; main giriş nöqtəsindən 
                                          ; proqramın sonu

Əvvəlcə kodlaşdırma cədvəlinin təşkili üçün qiymətləri dəyişdiriləcək baytların qiymətlərini təyin edək. İlkin halda bunlar onaltılıq rəqəmlərdir. Buna görə də verilənlər seqmentində cədvəl qurulur və burada onaltılıq rəqəmlər simvoluna uyğun baytların yerində onların yeni qiymətləri, başqa sözlə, onaltılıq rəqəmlərin ikilik ekvivalentləri yerləşdirilir. Cədvəlin bütün 256 baytını təyin etmək daha məqsədə uyğundur. Listinqin 7-9-cu sətrlərində bunun necə edildiyi göstərilmişdir. Bu cədvəldə sürüşməsi onaltılıq rəqəmlərin kodlarının qiyməti ilə uyğun olmayan baytlar sıfır götürülür. Bunlar cədvəlin birinci 48 baytı, aralıq baytlar və cədvəlin son hissəsidir. İş ondadır ki, əgər biz AL registrində, səhv olaraq, onaltılıq rəqəm simvolunun kodundan fərqli simvol kodunu yerləşdirsək XLAT əmrinin icrasından sonra arzu olunmayan nəticə alarıq.

Cədvəl tərtib olunduqdan sonra onunla işləmək olar. 16-cı sətrdə tabl cədvəlinin ünvanının qiyməti bx registrinə yüklənir. Sonra növbə ilə iki onaltılıq rəqəm simvolu daxil edilir və onların uyğun ikilik ekvivalentinə kodlaşdırma aparılır.