Tələb olunan yerdən fayla verilənlərin yazılması
Faylın tələb olunan yerinə verilənləri yazmaq üçün əvvəl göstəricinin yerini təyin etmək lazımdır. Bunun üçün 21h kəsilməsinin 42h funksiyasından istifadə edilir. Bu zaman BX registrinə faylın nömrəsi, CX:DX registrlər cütlüyünə göstəricinin qiyməti (yəni fayl göstəricinin faylın başlanğıc ünvanına nəzərən sürüşməsinin baytlarla qiyməti) yazılmalıdır (CX-ə yuxarı mərtəbələr). AL registrində isə aşağıdakı qiymətlərdən biri olmalıdır:
0 – göstərici faylın başlanğıcına nəzərən CX:DX registrlər cütlüyü ilə təyin edlən bayt sayda sürüşmə ilə tənzimlənir;
1 – göstərici faylın cari yerindən CX:DX baytlar sürüşməsi ilə tənzimlənir;
2 – göstərici faylın sonundan CX:DX baytlar sürüşməsi ilə tənzimlənir.
Mənfi ədədlərdən göstəricinin qiyməti kimi istifadə etmək olmaz. 42h funksiya icra olunduqdan sonra DX:AX registrlərində göstəricinin yeni mövqeyi (DX registrində böyük mərtəbələr olmaq şərti ilə) saxlanacaq. Əgər köçürmə bayrağı CF=1 olarsa, onda funksiyanın icrası zamanı səhvə yol verilib və AX registrinə həmin səhvin kodu yerləşdirilir. Beləliklə, bu funksiyanın köməyi ilə faylın ixtiyari yazısına birbaşa müraciət etmək etmək olar. Faylın yazısının uzunluğu əvvəlcədən məlum olmalıdır.
40H funksiyası ardıcıl üsulda olduğu kimi birbaşa üsulda da yazıların daxil edilməsi üçün istifadə edilir. Fərqi ondadır ki, burada göstərici proqramçı tərəfindən idarə olunur.
40H funksiyasına müraciət edərkən, BX registrində faylın nömrəsi, CX registrində yazılan baytların sayı, DX registrində isə buferin ünvanı yerləşdirilir. Funksiya icra edildikdən sonra AX registrində həqiqətən yazılmış baytların sayı yerləşir. Əgər bu ədəd CX –dəki ədədlə eyni olmazsa, ((AX)(CX)), onda yazı üçün diskdə yer çatmayıb. Bu halda köçürmə bayrağı CF=1 olacaq. Deməli, funksiyanın icrası zamanı səhvə yol verilib və AX registrində həmin səhvin kodu yerləşəcək.
RANDOM.TXT adlı faylını yaradılması və ona hər biri 30 simvoldan ibarət olan 5 sətrin yazılması proqramına baxaq:
MASM MODEL SMALL .STACK 100h .DATA FILE DB ”RANDOM.TXT”,0 nom DW ? mes DB 'SEHV',0Ah,0Dh,'$' ; fayla yazılacaq 5 sətrin məzmunun təsviri rec DB ”INFORMATIKA”,17 DUP(' '),0Ah,0Dh DB ”INTERNETE GIRISH”,12 DUP(' '),0Ah,0Dh DB ”emeliyyat sistemleri”, 8 DUP(' '),0Ah,0Dh DB ”obyekt yonlu proqramlash-ma ”, 0Ah, 0Dh DB ”komputer qrafikasi”, 10 DUP(' '),0Ah,0Dh .CODE start: MOV AX,@DATA MOV DS,AX ; FAYLIN YARADILMASI MOV AH,3Ch ; faylı yaradan funksiya LEA DX,FILE ; faylın ASCIIZ-sətri MOV CX,0 ; faylın atributu INT 21h JC error ; əgər səhv varsa, keçid ; göstəricini faylın başlanğına gətirmək MOV nom,AX MOV BX,nom MOV CX,0 MOV DX,0 MOV AL,0 ; faylın başlanğına nəzərən ; göstəricinin sürüşməsi MOV AH,42h ;göstəricini tənzimləyən funksiya INT 21h ; fayla yazma MOV DI,0 MOV CX,5 ; fayla yazılacaq sətrlərin sayı again: MOV AH,40h LEA DX,rec[DI] PUSH CX MOV CX,30 ; fayla yazılacaq baytların sayı INT 21h POP CX ADD DI,30 LOOP again ; FAYLIN BAĞLANMASI MOV AH,3Eh ;faylın bağlanması funksiyası MOV BX,nom ;faylın nömrəsinin BX göndərilməsi INT 21h JMP SHORT son ; səhv haqqında məlumatın verilməsi error: MOV AH,9 ; sətrlərin çıxışa verilməsi funksiyası LEA DX,mes INT 21h son: MOV AH,4Ch INT 21h END start Növbəti proqram əvvəlcədən yaradılmış RANDOM.TXT faylına “proqramlaşdırma texnalogiyası” sətrini yazır. Yeni sətr faylın ikinci sətrindən sonra “ emeliyyat sistemleri ” sətrinin yerinə yazılır. MASM MODEL SMALL .STACK 100h .DATA file DB ”RANDOM.TXT”,0 nom DW ? mes DB 'SEHV',0Ah,0Dh,'$' rec DB ”proqramlash-ma texnologiyasi”, 0Ah,0Dh .CODE start: MOV AX,@DATA MOV DS,AX ; FAYLI AÇMAQ MOV AH,3Dh ; faylın açan funksiya MOV AL,2 LEA DX,file ; faylın ASCIIZ sətri INT 21h JC error ; əgər səhvdirsə,keçid MOV nom,AX ; göstəricinin faylın tələb olunan yerinə gətirilməsi MOV AX,30 ; yazıların ölçüsü MOV CX,2 ; yazının nömrəsi MUL CX MOV CX,DX ; fayl göstəricisinin ;sürüşməsi nin böyük sözü CX-də, MOV DX,AX ;kiçik sözü isə DX-də MOV AL,0; göstəricisinin sürüşməsi nin ;faylın başlanğıcına nəzərən vəziyyəti MOV BX,nom MOV AH,42h ; göstəricini tənzimlənməsi funksiyası INT 21h ; fayla yazma LEA DX,rec MOV CX,30 ; yazılacaq baytların sayı MOV AH,40h ; fayla yazma funksiyası INT 21h ; FAYLIN BAĞLANMASI MOV AH,3Eh ; faylı bağlayan funksiyası MOV BX,nom ; faylın nömrəsinin BX göndərilməsi INT 21h JMP SHORT SON ; səhv haqqında məlumatın çıxışı error: MOV AH,9 ; sətrlərin çıxışı funksiyası LEA DX,mes INT 21h SON: MOV AH,4Ch INT 21h END start