Контрольная работа по "Программированию"

Автор: Пользователь скрыл имя, 10 Октября 2011 в 15:21, контрольная работа

Описание работы

Задание 1
При нажатии клавиши HOME (int 16h) включить индикатор NumLock и отключить индикаторы ScrollLock и CapsLock (контроллер). Если введен символ 1 или 3, вывести на дисплей его значение, увеличенное в два раза.

Работа содержит 1 файл

Контрольная Работа ПУ.doc

— 71.00 Кб (Скачать)

    Задание 1 

    При  нажатии клавиши HOME (int 16h) включить индикатор NumLock и отключить индикаторы ScrollLock и CapsLock (контроллер). Если введен символ 1 или 3, вывести на дисплей его значение, увеличенное в два раза.

   

    Листинг 1 

model small

include IO.asm

.stack 100

.data

inkey  db 'Нажмите на клавишу    ',10,13,'$'

outmes db 'Символ увеличенный на 2 = ','$'

error  db 'ERROR ','$'

.code

main:

      mov ax,@data  ;установить начало данных

      mov ds,ax   ; 

      mov ah,9h   ;вывести приветствие

      lea dx,inkey  ;нажатия на клавишу

      int 21h   ;

nnwe_m:

      mov ah,0   ;установить номер функции

      int 16h   ;ожидать нажатие на клавишу 

      cmp al,0   ;проверим на расширенный код

      je nn_ext  ;расширенный код

      cmp al,'1'  ;проверить введенный символ

      je mmwe_w  ;если равно 1 

      cmp al,'3'  ;проверить введенный символ

      je mmwe_w  ;если равно 3

      jmp quit   ;выйти если условие не совпало

mmwe_w:

      push ax

      mov ah,9h   ;вывести сообщение

      lea dx,outmes  ;

      int 21h   ;

      pop dx   ;символ скопируем dx

      and dx,0fh  ;

      add dl,dl   ;увеличить в 2 раза   

      outword dx

      jmp quit   ;выйти

nn_ext:

      int 21h   ;получить расширенный код

      cmp al,047h  ;проверить на нажатие "HOME"

      je nnxt   ;

      jmp quit   ;выйти если условие не совпало

nnxt:

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

;работа с  клавиатурой

      cli    ;запретить прерывания

      xor cx,cx

w1:

      in al,64h  ;прочитать байт состояния клавиатуры

      test al,02h  ;ожидать готовность

      loopnz w1  ;

      jz ner1   ;

      jmp er   ;перейти на выполнение ошибки

ner1:

      mov al,0edh  ;код работы со светодиодами клавиатуры

      out 60h,al  ;передать код команды

      xor cx,cx

w2:

      in al,64h  ;прочитать байт состояния с порта

      test al,02h  ;ожидать готовность

      loopnz w2  ;

      jz ner2

      jmp er   ;перейти на выполнение ошибки

ner2:

      mov al, 02h  ;включить NumLock и выключить

      out 60h,al  ;остальные

      sti    ;разрешить прерывания

      jmp quit

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

er:

      mov ah,9

      lea dx,error

      int 21h

quit:

      mov ah,1

      int 21h

      mov ax,4c00h

      int 21h

end main

 

    Задание 2 

    Если нажата клавиша СТРЕЛКА -ВЛЕВО, выключить курсор, иначе разрешить передвижение мыши по вертикали до 130 и вывести сообщение: «Движение мыши ограничено» (+ЗВУК).

   

    Листинг 2 

model small

include IO.asm

.stack 100

.data 

Dlit db 2, 3, 3, 3, 5, 8, 4, 2  ;для организации нужной

                                    ; длительности нот

Nota dw 2281,2032,1810,1522,380,380,2712,5119 ;таблица относительных

                                                ;частот

nom db 0     ;номер ноты

txtA db 'Нажмите любую клавишу ',10,13,'$'

txtB db 'Движение мыши ограничено ',10,13,'$' 

miniz db 'Мышь не подключена ',10,13,'$'

error db 'Ошибка ','$'

.code 
 

main: 

      mov ax,@data  ;установить начало данных

      mov ds,ax   ;

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

;инициализация  мыши

      xor ax,ax   ;

      int 33h   ;

      cmp ax,0   ;мышь не подключена

      jne wwait   ;

      mov ah,09h  ;выйти из программы

      lea dx,miniz  ;с сообщением

      int 21h   ; 

      jmp quit

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

wwait:  

      mov ax,1h   ;включить курсор

      int 33h   ; 

      mov ah,09h  ;вывести сообщение

      lea dx,txtA  ;

      int 21h   ;  
 

      mov ah,0   ;ожидать нажатие на клавишу

      int 16h   ; 

      cmp al,0   ;проверить на расширенный код

      je ttrr   ;перейти если не расширенный код

      jmp gger

ttrr:

      cmp ah,4dh  ;проверим код стрелка влево

      je ttre   ;кнопка стрелка влево

      jmp gger

ttre: 

      mov ax,2h   ;выключить курсор

      int 33h   ;

      jmp quit   ;выйти из программы 
 

gger:

      xor cx,cx

      mov dx,130  ;ограничим перемещение курсора до 130

      mov ax,8h   ;функция ограничить перемещения курсора

      int 33h   ;выполним через стандартную функцию 

      mov ah,09h  ;вывести сообщение

      lea dx,txtB  ;

      int 21h   ;  

;воспроизведение  звука

      mov al,0b6h  ;настроить таймер

      out 43h,al  ;

      in al,61h  ;включаем динамик

      or al,011b  ;установкой 2-х

      out 61h,al  ;битов

      mov si,0   ;смещение на массив

      mov di,0   ; 

note_next: 

      inc nom   ;увеличиваем номер ноты

      cmp nom,9   ;выполняем до 9 ноты

      jne mmq

      jmp endsson  ;и выходим

mmq:

      mov ax,nota[si]  ;копируем код ноты

      out 42h,al  ;пересылаем младший байт

      xchg al,ah   ;поменять местами старший и младший байт

      out 42h,al  ;пересылаем старший байт 

      xor cx,cx   ;сбросить регистр

      mov cl,dlit[di] 

      mov ax,0ffffh

      mov bx,07fffh

sdvig:

      shr bx,1

      rcr ax,1 

      loop sdvig

      mov cx,bx

cycle_0:

      push cx

      mov cx,ax

cycle_1:

      loop cycle_1

      pop cx

      mov ax,0ffffh 

      loop cycle_0

      add si,02h

      inc di

      jmp note_next

endsson:

;выключить динамик

      in al,61h  ;выключаем динамик

      and al,0fch  ;сбросим 2-а

      out 61h,al  ;бита

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

;завершить работу  программы 

quit:

      mov ah,1h

      int 21h

      mov ax,4c00h

      int 21h 

end main

 

    Задание 3 

Составить программу, выполняющую следующие действия:

  1. вывод на дисплей прямоугольника с координатами левого верхнего угла (20, 6), правого нижнего угла (60, 22) с заданными атрибутами. Прямоугольник обрамлен рамкой (использовать один или несколько символов по усмотрению студента);
  2. при каждом нажатии клавиши СТРЕЛКА-ВВЕРХ слева на право от окна выводить сообщение «ДИСК», написанное прописными буквами, при нажатии клавиши СТРЕЛКА-ВНИЗ - строчными, изменяя при этом атрибуты символов.
  3. при нажатии клавиши отличной от указанной в задании, программа завершает работу.
 

    Листинг 3 

model small

.stack 100

.data

txtA db 'ДИСК', '$'

txtB db 'диск', '$' 

.code

main:

      mov ax,@data  ;установить начало данных

      mov ds,ax   ; 

;установить  режим экрана

      mov ax,0003h  ;режим 3h 80х25

      int 10h

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

;очистить содержимое  экрана

      mov ah,06h  ;номер функции

      mov al,00h  ;содержимое всего экрана

      mov bh,4fh  ;красный фон и белый текст

      xor cx,cx   ;с начала координат

      mov dx,184fh

      int 10h

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

;вывести рамку

      mov bh,0   ;страница 0

      mov bl, 4fh  ;атрибут символа

      mov dh,6   ;строка

      mov dl,20   ;столбец

      push dx   ;сохранить в стеке

      mov cx,2   ;вывод повторить 2 раза (2 строки) 

met1:

      push cx   ;сохранить в стеке

      push dx

      mov cx,40   ;количество символов в строке

met2:

      push cx   ;сохранить регистр для дальнейшего применения

      mov ah,02h  ;функция перемещения курсора

      int 10h   ;вызвать стандартную функцию

      inc dl   ;перемещаться по горизонтали 

      mov ah,09h  ;функция вывода символа

      mov al,'-'  ;код символа <->

      mov cx,1   ;повторить 1 раз

      int 10h

      pop cx   ;восстановить регистр

      loop met2   ;вывести строку полностью

      pop dx   ;восстановить регистр

      add dh,15   ;переместить на следующую строку

      pop cx   ;восстановить регистр

Информация о работе Контрольная работа по "Программированию"