Автор: Пользователь скрыл имя, 07 Декабря 2012 в 11:25, реферат
Ассемблер является одним из самых старых из существующих на сегодня языков. Когда-то это был основной язык, но со временем появились более удобные средства общения с компьютером. Тем не менее язык не стал «мертвым» языком. Ассемблер, по словам В.Ю. Пирогова, – “это язык процессора и, следовательно, он будет нужен до тех пор, пока будут существовать процессоры” [11]. Являясь, по сути, символическим представлением машинного языка, Ассемблер позволяет в случае необходимости разрабатывать высокоэффективные программы, решая проблемы, связанные, в частности, с аппаратурой компьютера. Особенно ценен он в особых случаях, когда существуют жесткие ограничения на использование памяти или программа “критична” по времени
error db 10, 13, 'Ошибка контроллера$'
.code
start:
mov ax, @data
mov ds, ax
; вывод приглашения
lea dx, Press
mov ah, 9h
int 21h
; ожидание нажатия клавиши,
mov ah, 8h
int 21h ; в AL код введенного символа (первый байт)
; Идентификация введенного кода:
cmp al, 0 ; AL = 0? (код расширенный?)
jne ascii ; если нет à на метку ascii
; если да (код расширенный) à на следующую команду
int 21h ; вторичный вызов для получения в AL второго байта кода
cmp al, 5Eh ;сравнение второго байта кода со скан-кодом Ctrl+F1
jne kon ; если не равно (расширенный, но не Ctrl+F1),
; переход на метку kon
; равно, т.е. введен Ctrl+F1 !!!
; ******************** БЛОК 2 ******************************
; вывод приглашения
lea dx, PressShift
mov ah, 9h
int 21h
; ожидание нажатия клавиши,
mov ah, 0
int 16h
; считывание байта состояния в AL (см. п. 1.3.5)
xor ax, ax
mov es, ax
mov al, es:[417h]
; тестирование бита №1 (выяснение состояния левого Shift)
test al, 10b
jz net ; Shift не нажат à на метку net
; Shift нажат
lea dx, ShiftDa ; в dx начальный адрес сообщения ShiftDa
jmp vivod ; переход на vivod
net:
lea dx, ShiftNet ; в dx начальный адрес сообщения ShiftNet
vivod: ; вывод нужного сообщения
mov ah, 9h
int 21h
; БЛОК 2 завершен à выход
jmp exit
;******** ******************************
; в al код 'w' ?
ascii: cmp al, 'w'
jne kon ; нет (это и не 'w', и не Ctrl+F1) à на метку kon
; в al код 'w' !!!
; ************************ БЛОК 1 ************************
; работа с контроллером клавиатуры (см. подробно в п. 1.3.3)
cli
xor cx, cx
wait1:
in al, 64h
test al, 10b
loopnz wait1
jnz er
mov al, 0EDh
out 60h, al
xor cx, cx
wait2:
in al, 64h
test al, 10b
loopnz wait2
jnz er
; отправка второго байта (см. формат байта в п.1.2.4)
mov al, 100b
out 60h, al
sti
; БЛОК 1 завершен à выход
jmp exit
;******** ******************************
kon:
lea dx, konec ; вывод сообщения «Конец»
mov ah, 9h
int 21h
jmp exit
er: ; вывод сообщения « Ошибка контроллера »
lea dx, error
mov ah, 9h
int 21h
exit:
mov ah, 0 ; задержка до нажатия любой клавиши
int 16h
mov ax, 4C00h ; завершение программы
int 21h
end start
РазмещЛЛено на
Allbes
ЛИТЕРАТУРА
С.В.Краснов, В.Ф.Ларина. Периферийные устройства.
Содержит примеры использования языка Ассемблер при программировании работы клавиатуры, мыши, аудио- и видеосистем, дисков. Каждый пример сопровождается кратким изложением теоретического материала.
t.ru