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ərilmiş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.