Буквы на зеленом фоне
- Подробности
- Категория: Исходники
- Опубликовано 22.04.2014 07:39
- Автор: Админ
- Просмотров: 476
Задание:Вывести из текстового файла латинские буквы на зеленом фоне.
Ассемблер: 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