Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Функция BIOS INT 10/00 – вход al – код видеорежима (в практической работе 03 – text 80x25, 13 – graphics 640x480x256. ) ⇐ ПредыдущаяСтр 3 из 3
Установка курсора: функция 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; просмотров: 241; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.16.70.101 (0.013 с.) |