Автор: Пользователь скрыл имя, 10 Октября 2011 в 15:21, контрольная работа
Задание 1
При нажатии клавиши HOME (int 16h) включить индикатор NumLock и отключить индикаторы ScrollLock и CapsLock (контроллер). Если введен символ 1 или 3, вывести на дисплей его значение, увеличенное в два раза.
Задание
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,
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
Составить программу,
выполняющую следующие
Листинг 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 ;восстановить регистр
Информация о работе Контрольная работа по "Программированию"