Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовой проект [вариант 30].DOC
Скачиваний:
24
Добавлен:
02.05.2014
Размер:
134.14 Кб
Скачать

Текст программы с необходимыми комментариями

Блок-схема программы представлена в приложении 1, листинг программы в приложении 2.

В начале программы происходит описание заголовка программы и сегмента кода:

title F10BORDUR ;заголовок

CODESG SEGMENT 'CODE' ;начало сегмента кода

ASSUME CS:CODESG, DS:CODESG,SS:CODESG,ES:CODESG ;назначение адресаций регистров

ORG 100H ; устанавливаем относительный адрес для начала выполнения программы

begin:

main proc ;начало процедуры

  1. Фрагмент программы, осуществляющий переход в текстовый режим (так же используется для очистки экрана):

mov ah,00h; функция 00hпозволяющая переключать режимы

mov al,03; 80х25 стандартный 16-цветовой текстовый режим

int 10h; вызовBIOSдля выполнения функции

  1. Фрагмент программы, осуществляющий вывод на экран строки символов (сообщений):

MOV AH,09h ;Функция вывода на экран строки до символа $

LEA DX,MSG1 ; Команда LEA загружает адрес области NAMPRMP

; в регистр DX для передачи в DOS адреса выводимой информации.

INT 21H ; Вызов DOS

  1. Фрагмент программы, осуществляющий вычисление размера программы и вывод на экран результата с разбиением числа на цифры и выводом этих цифр справа налево.

mov ax,(newstk-begin) ; заносим в регистрAXразность конца и начала адресов

; сегмента

GG: div ten ; делим на 10 для выделения цифры справа

mov c1,al ;цифра заносится вAL, ее перемещаем вC1 для того

;сохранить ее

add ah,t3 ; для вывода на экран цифры, а не символаASCII

; соответствующего цифре 48, так как в таблице ASCII

; цифры от 0 до 9 имеют соответственно код 48 - 57

mov c2,ah ;сохраняем «цифру» так как регистрAHбудет

; использоваться далее

MOVAH,02h ;функция установки положения курсора

MOV BH,00 ;указываем страницу 0

MOV DH,1 ; строка 1

MOVDL,i; столбец соответствует переменнойI

INT 10H ; Вызов BIOS

dec i ;уменьшениеIна единицу для сдвига курсора влево

MOV AH,40h;Функция вывода на экран

mov bx,01 ; дескриптор дисплея

mov cx,1 ; количество выводимых байт

LEA DX,c2 ; загружаем адрес строки С2 где хранится код цифры

INT 21H ; вызываемDOS

cmp c1,0 ;проверяем остались ли цифры в числе

je mainl ; если да то переходим к меткеMAINL

mov al,c1 ; возвращаем в регистр оставшееся число

xor ah,ah ; обнуляем регистрAHдля того чтобы число переместилось вAX

JMP GG ;переходим к меткеGGдля вывода следующей цифры

  1. Основной фрагмент программы выполняющий считывание с клавиатуры без эхо-отображения вводимый символ и в случае нажатия F10 смены цвета границы экрана, Esc – выход из программы, если же будет нажата какая-нибудь другая клавиша, то вывод сообщения об ошибке и ожидание повторного ввода.

MAINl: MOV AH,07h ; Функция прямого ввода с клавиатуры без эхоотображения

INT 21H ; ВызовDOS

CMPAL,0 ; Если в регистреALпосле ввода с клавиатуры 0, то это означает

JE func; что была нажата функциональная клавиша, переходим к меткеfunc

cmp al,1bh ;Иначе, проверяем наESC– код 1BH,

je exitprog ; если да, то переходим к метке exitprog для завершения программы

mist: mov ah,00h ; в случае если была нажата другая клавиша, очищаем экран

mov al,03 ; методом перехода в текстовый режим

int 10h

; и выводим на экран сообщение MSG2

MOV AH,9h;Функция вывода на экран строки

lea dX,MSG2

INT 21H

JMPMAINl ; переходим для ожидания ввода к метке Mainl

func:INT21H;для проверки функциональной клавиши нужно повторно вызватьDOS

CMPAL,44h; Проверяем наF10, кодASCII– 44H

JEEX;если это она, то переходим к меткеEXдля смены цвета границы экрана

JMP mist ; иначе означает что была нажата какая то другая функциональная

; клавиша, переходим к метке MIST для вывода сообщения об ошибке

ex: MOV AH,0bh;Функция установки цвета

MOV BH,00 ;границы экрана

MOV BL,colorborder ; в переменной colorborder

INT 10H ;Вызвать BIOS

cmp colorborder,0fh ; Проверяем равена ли переменнаяcolorborder15

je obnul ;если да то к метке obnul

inc colorborder ; иначе инкреметируем

jmp mainl ; переходим к ожиданию ввода с клавиатуры

obnul: mov colorborder,0 ;Заносим нулевой цвет в colorborder

jmp mainl ; переходим к ожиданию ввода с клавиатуры

exitprog: ret ; Завершение программы возврат вDOS

main endp ; завершение процедуры

  1. Фрагмент программы, осуществляющий определение данных:

MSG1 DB 'For change color of screen border press F10, for exit ESC. The program size in bytes is$'

MSG2 DB 'Wrong key is pressed, press F10. Or Esc for exit$'

colorborder db 1

c1 db 0

c2 db 0

ten db 10

i db 20

t3 db 48

newstk=$ ; newstk присваиваем адрес конца программы

CODESGENDS; конец сегмента

end begin;конец программы