Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Функция 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; просмотров: 318; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.214 (0.01 с.) |