Вы здесь: HomeИсходники

Буквы на зеленом фоне

Задание:Вывести из текстового файла латинские буквы на зеленом фоне.
Ассемблер: TASM
Операционная система: DOS.

.MODEL TINY
CODE SEGMENT
ASSUME CS:CODE, DS:CODE
.286c
ORG 100h
START:
	push cs
	pop ds
	
       
        ;---в сегменте данных
		
		 ;открываем файл
        mov AH , 3dH
		mov DX,offset fname ;= адрес строки ASCIIZ с именем файла
		mov AL,0; = режим открытия 0-для чтения
        int 21h
        
        jc error
        
        mov handle,ax ;получаем указатнль файла
        
        mov BX, ax 
        xor cx,cx
		xor dx,dx
		mov ax,4200h
		int 21h    
        
     
        
        
       out_str:
		mov ah,3fh      ; будем читать из файла
		mov cx,1        ; 1 байт
		lea dx,buf      ; в память buf
		int 21h         
		cmp ax,cx       ; если достигнуть EoF или ошибка чтения
		jnz close       ; то закрываем файл закрываем файл
		mov dl,buf
		
		cmp dl,21h
		jl next
		;================
		pusha
		;push dx
		mov ah,9h
		mov	BH,0  ;номер видео страницы
        mov AL,' '; = записываемый символ
        mov CX,1 ;= счетчик (сколько экземпляров символа записать)
        mov BL,0e1h; = видео атрибут (текст) или цвет (графика)
        ;  (графические режимы: +80H означает XOR с символом на экране)
		int 10h
		;pop dx
		popa
		;================
		next:
		mov ah,2    ; выводим символ в dl
		int 21h     ; на стандартное устройство вывода
		inc kol
		mov ah,81
		cmp kol,ah
		je close
		
		jmp out_str
	   close:  
        jmp closeF
        error:
			mov ah,9h
			mov dx, offset mserr
			int 21h
			jmp exit
			
			
	error2:
			mov ah,9h
			mov dx, offset  mserr1
			int 21h
			jmp exit
       
       closeF:
        ;===============
        mov ah,3Eh              ;Функция DOS 3Eh (закрытие файла)
	mov bx,handle         ;Дескриптор
	int 21h                 ;Обращение к функции DOS 
exit:
		
        
		;выводим размер проги	
        mov ah,9h
        mov  DX, offset endl ;адрес второй управляющей строки
		INT  21H        
		lea ax, buf
		add ax,100h
		add ax,257 
		call vuv_chisla
        
        mov ah,9h
        mov  DX, offset stroka ;адрес второй управляющей строки
	INT  21H           ;меняем цвет на мигающий циан
        
        mov ah,1h
	INT  21H           ;меняем цвет на мигающий циан
        ;=====================
                mov ah,4Ch ;эта функция завершает программу     
		mov al,0	;код возврата 0
		int 21h
        ;=============
        vuv_chisla:
        ;меняем значение в строке как в масиве и выводим потом строку
	;число в ax
	push ax
	mov si, offset stroka
	mov al,'0'
	mov [si],al
	mov [si+1],al
	mov [si+2],al
	mov [si+3],al
	mov [si+4],al
	mov [si+5],al
	mov al,'$'
	mov [si+6],al
	pop ax
	add si,5
vuv_chisla_s:
        mov dx,0
	mov bx,10
	div bx
	add dl,30h
	mov [si],dl
	sub si,1
	cmp ax,0
	jne vuv_chisla_s
ret  
	stroka db "00000b",10,13,'$'	
	fname db "FILE_SPO.txt",0
	mserr db "No file$"
	mserr1 db "Not read$"
	handle dw 0
	kol db 1
	endl db 10,13,'$'
	buf  db 0;
CODE ENDS
END START