Функция BIOS INT 10/00 – вход al – код видеорежима (в практической работе 03 – text 80x25, 13 – graphics 640x480x256. ) 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Функция BIOS INT 10/00 – вход al – код видеорежима (в практической работе 03 – text 80x25, 13 – graphics 640x480x256. )



Установка курсора:

функция BIOS INT 10/02 – DH,DL – строка, столбец (BH - video page)

Получение позиции курсора – BIOS INT 10/03

Ввод/вывод точки (в графическом режиме)

BIOS INT 10/0C – вывод DX,CX – строка, столбец AL – color (BH – video page)

BIOS INT 10/0D – ввод (так же)

Другие функции, которые могут понадобиться в практических работах:

Функция BIOS INT 12 – возвращает в AX количество доступной памяти в КБ

Функция BIOS INT 1A/00 – возвращает часы реального времени («тики» таймера) около 18 раз в секунду (1 раз в 55 ms)

 

Итак, продолжаем кодирование подпрограмм для примера:

VvodMas proc

Push cx;сохраним регистры

Push si

Mov cx,N

Mov dx,offset buffer;введем число

Vm1: call vvod

Call ConvAb

Stosb; запомним в массиве

Loop Vm1

Pop si

Pop cx

Ret

Buffer db 5,5 dup(0);буфер для ввода числа с помощью DOS

VvodMas endp

;______________

Vvod proc

Push ax

Mov ah,0ah

Int 21h

Pop ax

Ret

Vvod endp

;--------------------

;Процедура преобразования строки ASCII в число byte

;Входные параметры: DS:DX+1 - длина строки, DS:DX+2 - строка

; т.е. совпадает с форматом буфера ввода в функции 0A DOS

ConvAb proc

Push si

Push cx

Push dx

Mov si,dx

Mov dl,0; обнулим сумму

Mov mno,1

Lodsb

Lodsb; Загрузим длину строки

Cmp al,3; Не может быть более трех цифр

Jg Ext

Cbw

Mov cx,ax; в cx - количество цифр (длина строки)

Add si,cx; устанавливаем указатель на конец строки

Dec si

Std; указываем направление (справа-налево)

Cicl:

Lodsb

Cmp al,'0'; Символ является цифровым?

Jl Ext

cmp al,'9'

Jg Ext

Sub al,30h

Mul mno; умножим на вес текущего разряда

Add dl,al; прибавим очередной разряд

Jc Ext; Произошло ли переполнение?

; Увеличим вес текущего разряда (множитель)

Mov al,mno

Mul des

Mov mno,al

Loop Cicl; повторяем столько раз, сколько символов в строке

Ext:

Cld

Mov al,dl

Pop dx

Pop cx

Pop si

Ret

Mno db 1

Des db 10; Множители для вычисления

ConvAb endp

; выходные параметры:

; AL - число, если произошла ошибка - то, что можно было преобразовать

;-----------------

Sqrr proc; вычисление квадрата числа

Imul al

Ret

Sqrr endp

;----------------

SumMas proc

Push si

Push bx

Push cx

Mov bx,0; Обнулим сумму

Mov cx,N

Sm1: lodsb; загрузим текущий элемент массива

Call sqrr; возведем в квадрат

Add bx,ax; прибавим к сумме

Loop Sm1; повторим столько раз, сколько элементов в массиве

Mov ax,bx; сформируем выходные параметры (рез-т должен быть в ax)

Pop cx

Pop bx

Pop si

Ret

Summas endp

;----------------

Vyvod proc

Push dx;Преобразуем число в AX в символьное представление и выведем

Push ax

Push cx; Счетчик цифр в числе

Mov cx,0

New_Delenie:

Mov dx,0;Обнулить старшую часть для ком. DIV, CWD нельзя

Div desW

Xchg ax,dx;(остаток - в AX)

Add al,30h;(преобразуем в ASCII-символ)

Inc cx;(увеличиваем счетчик цифр)

Push ax;(запоминаем в стеке)

Xchg ax,dx; (Целая часть - в AX)

Cmp ax,0; (целая часть=0, т.е. дошли до конца?)

Jne New_Delenie

V:

Pop ax; (извлекаем из стека и помещаем в буфер)

Mov ah,0eh; вывод символа

Int 10h

Loop V

Pop cx

Pop ax

Pop dx

Ret

DesW dw 10;константа 10 для деления

Vyvod endp

Обратите внимания, что при написании программы целесообразно делать отступы в строках для смыслового выделения участков алгоритма и комментариев!

Теперь, когда все подпрограммы написаны, приступаем к тестированию программы.

Процедуры для ввода и вывода числа вы можете сохранить в отдельном файле (с расширением.asm или.inc) и использовать в дальнейших программах. В этом случае в том месте, где вам надо было писать такие же процедуры, укажите вместо них

Include <имя файла>

Следует только помнить, что директива компилятора include просто включает текст в исходный файл, поэтому необходимо, чтобы все имена переменных и меток были уникальны для обеих файлов.

 

3) Протестировать программу.

Поскольку программа интерактивна, мы можем уже непосредственно запустить её из командной строки файлового менеджера (FAR) или с помощью команды «выполнить» в меню «пуск» Windows. Для проверки работы программы подберите тестовые данные (лучше несколько комплектов) и последовательно запускайте программу, вводя их. В случае, если программа «зависает» или выдает неверный ответ, воспользуйтесь отладчиком Insight для определения ошибочных команд (или данных), выполняя программу по одной команде и наблюдая за результатами команд и логикой её выполнения. При этом вызов подпрограмм может быть выполнен как одна команда, если использовать в отладчике клавишу F8 вместо F7. Найдя ошибку, исправьте текстовый файл с программой, перекомпилируйте и запустите её заново.

Для приведенного примера тестовые данные могут быть например такими – N=5;

A db 1,2,3,3,1

B db 2,4,2,3,0

Результат – 1*1 + 2*2 + 3*3 + 3*3 + 1*1 (= 24)+2*2+4*4+2*2+3*3+0*0=57.

Остальные варианты работ делаются таким же образом.



Поделиться:


Последнее изменение этой страницы: 2016-12-17; просмотров: 240; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.189.177 (0.01 с.)