Assembler proqramlaşdırma dili

Tələb olunan yerdən fayla verilənlərin yazılması

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 re­gistr­lər cütlüyü ilə təyin edlən bayt sayda sürüşmə ilə tən­zim­lə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