Assembler proqramlaşdırma dili

Faylların emalı

Faylların emalı

Assembler dilində fayllarla ilə işləmək üçün xüsusi vasitələr yoxdur. Belə bir tələb yarandıqda əməliyyat sisteminin (ƏS) vasitələrinə müraciət edərək fayl sistemi ilə qarşılıqlı işi təşkil etmək üçün proqramda xüsusi kodlar fraqmenti göstərilməlidir. Bu faktın özü Assembler proqramının xarici aləm ilə qarşılıqlı təsir cəhətdən konkret aparat və konkret əməliyyat platforması ilə bağlı olduğunu bir daha təsdiqləyir.

Bu günkü vəziyyətdə də proqramçılar ƏS üçün proq-ramların yaradılması tələbi ilə qarşılaşırlar. Bu səbəbdən də əməliyyat platformasında fayllarla işləmək üçün vasitələrin öyrənilməsi öz aktuallığını itirməyib.

ƏS kimi MS DOS –un əsas funksiyalarından biri diskdəki fayllar yığımına və kataloqlara (direktoriyalara) müraciəti təşkil etməkdir. Assembler dilində fayl əməliyyatları ƏS-də fayl sisteminin yaradılması ilə sıx bağlıdır. MS DOS yalnız FAT (File Allocation Table- faylların paylanması cədvəli) adlanan fayl sistemini dəstəkləyirdi. MS DOS 7.0 (Windows 95) versiyasından başlayaraq isə FAT-ın modifikasıyası olan VFAT uzun adlı fayllar (uzunluğu 255 simvola qədər ola bilər) sistemi ilə işləyirlər. Əvvəllər MS DOS 1.0 tərəfindən fayllarla işləmək üçün təklif olunan funksiyalar rahat deyil idi. Çünki hər bir açıq fayl FCB (File Control Block-faylı idarəedən blok) adlanan 37 baytli struktura ilə təsvir edilirdi və onun ünvanı bütün fayl əməliyyatlarında göstərilməli idi. Verilənlərin ötürülməsi isə DTA (Disk Transfer Area-verilənlərin ötürülmə sahəsi) adlanan verilənlərin strukturası ilə həyata keçirilirdi. MS DOS 2.0-dan başlayaraq isə təkmilləşdirilmiş FAT ilə yanaşı (məsələn, artıq bir-birnin daxilində yaradılan direktoriyalardan istifadə) UNİX-dəki funksiyalar kimi fayllarla işləyən dəstdən istifadə edildi. Bu da faylların və ya quğuların identifikatorlarını 16 bitli ədədilə təsvir etməyə imkan verirdi. Bu nömrə təyin edildikdən sonra fayllarla işləyən bütün funksiyalarda bu nömrədən istifadə edilə bilərdi. ƏS tərəfindən ilk 5 identifikator aşağadakı kimi insiallaşdırılıb:

0- STDIN- giriş üçün standart qurğu (adətən klaviatura);

1- STDOUT- çıxış üçün standart qurğu (adətən ekran);

2- STDERR- səhvlər haqqında xəbərin çıxışı üçün qurğu (adətən ekran);

3- AUX- ardıcıl port (adətən COM1);

4- PRN- paralel port (LPT1);

Beləliklə, fayllara verilənlərin yazılması və ya fayllardan verilənlərin oxunması zamanı bu qurğulardan istifadə etmək olar.

MS DOS-da xarici qurğularla iş kəsilmələr sistemi vasitəsi ilə həyata keçirilir. BİOS-un 13h kəsilməsinin bir sıra funksiyaları disk qurğuları ilə işi dəstəkləyir. Lakin bu səviyyədə fayllarla işləmək üçün sistemə diskin konkret hansı sektorundan verilənlərin oxunacağını və ya hansı sektoruna yazılacağını göstərmək lazımdır. Bildiyimiz kimi MS DOS faylları daşıyıcılarda sektorlara yazır. Əgər fayl bir sektora (512 bayta) yerləşmirsə onda o, müxtəlif yerlərdə yerləşmiş sektorlara yazıla bilər. Ona görə də faylın sektorlar üzrə emalı proqramçılar üçün çox zəhmət tələb edən prosesdir.

DOS-un 21h kəsilməsinin bir çox funksiyaları faylları emal etmək üçün istifadə edilə bilər. Bu funksiyalar yüksək səviyyəli dillərin operatorlarına maksimum yaxınlaşdırılıb.

Əgər 21h kəsilməsinin faylı emal edən funksiyasının icrasından sonra səhv baş veribsə onda Assambler səhvin qeyd edilməsi üçün köçürmə bayrağını vahid vəziyyətinə gətirir və AX registrinə səhvin kodunu yazır ki, qeyri standart vəziyyətin baş vermə səbəbini araşdırmaq mümkün olsun.

MS DOS-da kəsilmə funksiyalarının icrası zamanı baş verən səhvlərin bir neçəsini göstərək:

Bir çox faylları idarəedən kəsilmə funksiyaları ASCİİZ-sətri (Zero-sıfır) parametr kimi tələb edir. Bu faylı identifikasiya edən simvollar sətridir. Bu sətr disk daşıyıcısının adını, fayla yolu (əgər lazım isə), faylın adını və sonda mütləq qiyməti sıfır olan baytı (ASCİİ kodlar sistemindəki sıfır kodu deyil) saxlayır.

Path DB 'D:\ TASM \ ASM', 0 
P1 DB 'C:\ TEXT\ A1. ASM', 0 

Burada 1-ciASCİİZ sətr D sürücüsündə yerləşən TASM direktoriyasının alt direktoriyası olan ASM-ı göstərir. 2-ciASCİİZ sətr isə C sürücüsünün TEXT direktoriyasında yerləşən A1. ASM faylını gösətrir.