Assembler proqramlaşdırma dili

COM genişlənməli faylların yaradılması

COM genişlənməli faylların yaradılması

COM genişlənməli faylların yaradılmasını “Bu funksiya $ işarəsini ekrana çıxara bilər” sətrini STDERR (ekran) çıxış qurğusundan istifadə edərək ekrana çıxaran proqram üzərində izah etməyə çalışaq:

   MODEL TINY
.CODE
ORG 100h	          ; COM-faylının başlanğıcı
start: MOV AH,40h  ; DOS funksiyasının  nomərəsi
       MOV BX,2      ;  STDERR qurğusunun nömrəsi
       MOV DX,OFFSET message ; DS:DX – sətrin
                                               ; ünvanı
       MOV CX,message_len         ; CX – sətrin uzunluğu
	INT 21h
	RET	                 ; COM-faylının sonu
Message   DB “Bu funksiya $ işarəsini ekrana çıxara bilər”
message_len=$-message ; Sətrin uzunluğu= cari ünvan- 
                                  ; sətrin başlanğıc ünvanı
END start

Bu faylı icra faylına çevirmək üçün əvvəlcə əmrlər sətrində TASM TEST042.ASM əmrini yığıb onun TEST042.OBJ adlı obyekt faylı yaradılır. Əgər proqram mətni düzgün yığılıbsa, onda TEST042.OBJ obyekt faylı yaranacaq.

Bundan sonra isə aşağıdakı əmri daxil etmək lazımdır:

TLINK /T/X TEST042.OBJ

Bu əmrlərin icrasının nəticəsində TEST042.COM faylı yaranacaq. TLINK əmrindəki /T atributu COM genişlənməli faylın yaradılmasına xidmət edir.

Qeyd edək ki, MASM paketi üçün

TLINK /T/X TEST042.OBJ

sətrinin əvəzinə aşağıdakı iki sətri yazmaq olar:

LINK TEST042.OBJ,,NUL,,,

EXE2BIN TEST042.EXE TEST042.COM

Əgər TEST042.COM proqramını icra etsək “Bu funksiya $ işarəsini ekrana çıxara bilər” sətri ekrana çıxacaq və proqram sona çatacaqdır. İlkin proqram mətnin işləməsini araşdırmaq üçün onun bir neçə sətrini nəzərdən keçirək.

Proqramın birinci sətrində TINY yaddaş modeli təyin olunur. Burada kodlar seqmenti, verilənlər seqmenti və stek seqmenti birləşdirilib. Bu modelin təyinatı COM tipli faylı yaratmaqdır.

.CODE direktivi kodlar seqmentinin təyinatıdır və bu proqramda həmçinin oraya verilənlər də daxildir.

ORG 100h proqram sayğacının qiymətini 100h tənzimləyir. Çünki, COM-faylın yüklənməsi zamanı yaddaşda DOS yaddaşın birinci 256 (100h) baytını PSP (Program Segment Prefix –proqram seqmentinin prefiksi) verilənlər bloku üçün ayırdığından yalnız bu blokdan sonra COM-faylının proqram kodlarını yerləşdirmək olar. COM tipli fayllarda bütün proqramlar bu direktivlə başlamalıdır.

Proqramda birinci əmrin qarşısında yazılmış start nişanı END direktivində istifadə olunacaq ki, buda proqramın hansı əmrlə başladığını gösərərir.

INT 21h əmri DOS-un sistem funksiyasını çağırır. Bizim misalda DOS –un 40h funksiyası çağırılır.

Bu funksiya ünvanı DS:DX. rejistrlərində olan sətri çıxışa verir.

COM-faylı işə salındıqda avtomatik olaraq DS registrinə proqramın seqment ünvanı yüklənir, DX registrinin məzmunu isə

MOV DX,OFFSET message

əmrinin köməyi ilə təyin olunur. Bu çıxışa veriləcək sətrin baytlarla uzunluğu CX reqistrindəki qiymət ilə təyin olunur.

RET əmrindən sadə halda prosedurdan çıxmaq (qayıtmaq) üçün istifadə olunur. RET əmri proqramı korrekt başa çatdırdıqda DOS sistemi tərəfindən COM-proqramını çağırılır.

DOS sistemi COM-faylı çağırarkən proqramın seqment ünvanını və sıfrı stekdə yerləşdirir və beləliklə RET idarəni cari seqmentin sıfırıncı ünvanına, yəni PSP birinci baytına göndərir. Burada olan INT 21h əmri idarəni DOS-a qaytarır. Proqramın sonrakı (RET –dən sonrakı) direktivi “Bu funksiya $ işarəsini ekrana çıxara bilər” verilənlər sətrini təyin edir.

END direktivi proqramın hansı nişandan başlayaraq icra olunduğunu göstərir və proqramı sona çatdırır.