Лекции по Вычислительным машинам, системам и сетям   

5. Программирование на языке Ассемблер

5.15. Пример программы, работающей с клавиатурой и экраном

В качестве примера работы с экраном и клавиатурой, приведем программу, демонстрирующую тривиальное передвижение на экране принятого с клавиатуры символа. Программа очищает экран, ждет нажатия любой символьной клавиши, после чего принятый символ пролетает по 12-й строке от левого края экрана к его центру, где и останавливается. Затем программа снова ждет нажатия символьной клавиши и все повторяется сначала. Выход из программы по ESC.

code segment                   

assume cs:code, ds:code        

org 100h        

start:                                                                    

jmp begin

x db 0    ;координата курсора по Х, исходный столбец 0

simb db 0

begin:

; прячем курсор

mov ah, 1

mov ch, 20

mov cl, 0

int 10h

; чистим экран красным цветом, символ будет черным

mov cx, 0

mov dx, 184fh

mov bh, 40h

mov ax, 600h

int 10h

m1:

; ждем нажатия клавиши

mov ah, 0

int 16h

; отсекаем функциональные клавиши

cmp al, 0

je m1

; проверяем на ESC

cmp al, 1bh

je exit

; сохраняем принятый символ

mov simb, al

;выводим пробел в центр экрана (стираем старый ;символ)

mov ah, 2

mov dx, 0c28h

mov bh, 0

int 10h

mov ah, 0eh

mov al, ' '

int 10h

m2:

;устанавливаем курсор для вывода символа

mov ah, 2

mov bh, 0

mov dh, 12      ;символ летит по 12-й строке

mov dl, x

int 10h

     ; выводим символ в текущую позицию курсора

mov ah, 9

mov cx, 1

mov bl, 40h

mov bh, 0

mov al, simb

int 10h

; задержка

mov ah, 0

int 1ah

mov bx, dx

add bx, 2

m3:

mov ah, 0

int 1ah

cmp dx, bx

jb m3

; увеличиваем Х координату курсора на единицу

inc x

; проверка на выход за центр экрана (40-й столбец)

cmp x, 41

jne m4

mov x, 0     ; восстанавливаем исходное значение Х ;координаты курсора

jmp m1       ; пошли на ожидание нажатия клавиши 

m4:

; стираем символ в текущей позиции (пробелом)

mov ah, 0eh

mov al, ' '

int 10h

jmp m2       ; пошли на вывод символа в следующей ;позиции

exit:

mov ah, 4ch

int 21h

code ends

end start



*****

© 2009-2017 Банк лекций siblec.ru
Лекции для преподавателей и студентов. Формальные, технические, естественные, общественные, гуманитарные, и другие науки.