Assembler proqramlaşdırma dili

Ardıcıl fayldan verilənlərin oxuması

Ardıcıl fayldan verilənlərin oxuması

21h kəsilməsinin 3fh funksiyası fayldan ardıcıl olaraq məlumatları oxuyur. Fayl əvvəlcədən 3dh funksiyasının 0 (yalnız oxumaq üçün) və ya 2 (oxumaq/yazmaq) kodu ilə açılmalıdır. Fayl açılarkən avtomatik olaraq fayl göstəricisi onun birinci baytının təyin olunduğu mövqeyinə gətirilir.

3fh funksiyası çağırılan zaman BX registrinə faylın nömrəsi, CX registrinə oxunacaq sətrin baytlarının sayı, DX registrinə isə yaddaşdan oxunacaq sahənin ilk baytının ünvanı yüklənir.

Funksiya icra olunduqdan sonra AX registrində real oxunmuş baytların sayı göstərilir. AX=0 olarsa, onda fayl boş fayldır. Əgər oxu zamanı səhv baş verərsə, onda CX=1 olur və AX registrinə səhvin kodu yazılır.

Tələb olunan sayda baytlar oxunduqdan sonra fayl göstəricisi sonuncu oxunan baytdan sonrakı baytın mövqeyinə tənzimlənir. Misal:

C diskinin Asm1 kataloqundakı val.txt faylının məzmununu həmin diskin Asm2 kataloqundakı ABD.TXT adlı fayla köçürən proqrama baxaq:

MASM
MODEL SMALL
.STACK 100h
.DATA
f1	DB 'C:\ASM1\VAL.TXT ',0
f2	DB 'C:\ASM1\ASM2\ABD.TXT ',0
nom1	DW 0
nom2	DW 0
mes	DB 'SEHV',0Ah,0Dh,'$'
mes1	DB 'SEHV1',0Ah,0Dh,'$'
mes2	DB 'SEHV2',0Ah,0Dh,'$'
mes3	DB 'SEHV3',0Ah,0Dh,'$'
dbuf	DB 1024 DUP (?)
.CODE
start:
     MOV AX,@DATA
     MOV DS,AX
; Biringi faylın açılması
      MOV AH,3Dh	      ; birinci faylın ASCIIZ 
                                  ; sətrini  açan funksiya
      LEA DX,f1	
	MOV AL,0	       ; yalnız oxuma rejimi
	INT 21h
	JC error 	       ; əgər səhvdirsə, keçid
	MOV nom1,AX     ; faylın nömrəsini nom1 
                                   ; xanasına göndərmək 
                                   ; İkinci faylın açılması
	MOV AH,3Ch       ; faylın açılması funksiyası
	LEA DX,f2	       ; birinci faylın ASCIIZ-sətri
	MOV AL,1	        ; yalnız yazma rejimi
       MOV CX,0
	INT 21h
	JC  error1	         ; əgər səhvdirsə, keçid
	MOV nom2,AX       ;faylın nömrəsini nom2 
                                      ; xanasına göndərmək
; Birinci fayldan oxuma 
FAYL_1:	MOV BX,nom1 ;VX registrinə birinci faylın 
                                          ; nömrəsini göndərmək
	MOV AH,3Fh   	   ; fayldan oxuma funksiyası
	MOV CX,1024	  ; 1024 baytı oxumaq
	LEA DX,dbuf	             ; DX registrinə buferin 
                                         ; ünvanını göndərmək 
	INT 21h
	JC  error2 	            ; əgər  səhvdirsə, keçid
	CMP AX,0	  ;faylın sonu olmasını yoxlamaq?
	JE  end_file	  ; əgər doğrudursa, onda sona keçid
;İkinci fayla yazmaq
	MOV CX,AX  	; oxunacaq baytların sayını 
                                      ; SX registrinə göndərmək
	MOV BX,nom2	; ikinci faylın nömrəsini BX 
                                      ; göndərmək	
      MOV AH,40h    	; fayla yazma funksiyası
     LEA DX,dbuf	           ; DX reqistrinə 
                                       ; ünvanını göndərmək
     INT 21h
     JC error3	            ; əgər  səhvdirsə, keçid
     JMP SHORT  FAYL_1
; Faylların bağlanması
end_file: MOV AH,3Eh    ; faylın bağlanması funksiyası 
	MOV BX,nom1         ; birinci faylın nömrəsini 
                                        ; BX göndərmək
	INT 21h
	MOV BX,nom2          ; ikinci faylın nömrəsini 
                                        ; BX göndərmək
	INT 21h
	JMP SHORT SON
; Səhvlər haqqında məlumatın çıxışı
error:MOV AH,9          ; sətrlərin  çıxarılması funksiyası
	LEA DX,mes	        ; DX registrinə sətrlərin ünvanını 
                                  ; yükləmək
	INT 21h
	JMP SHORT SON
error1:  MOV AH,9      ; sətrlərin  çıxarılması funksiyası
	LEA DX,mes1       ; DX registrinə sətrlərin 
                                    ; ünvanını yükləmək
	INT 21h
	JMP SHORT SON
error2:   MOV AH,9    ; sətrlərin  çıxarılması funksiyası
	LEA DX,mes2       ;DX registrinə sətrlərin 
                                     ; ünvanını yükləmək
	INT 21h
	JMP SHORT SON
error3: MOV AH,9  ;sətrlərin  çıxarılması funksiyası
	LEA DX,mes3  ;DX registrinə sətrlərin 
                                 ; ünvanını yükləmək
	INT 21h
SON: MOV AH,4Ch    ; proqramın sona çatdırılması
                                    ; funksiyası 
	INT 21h
END start