Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скляров И. Изучаем Assembler за 7 дней (2010).pdf
Скачиваний:
1680
Добавлен:
23.02.2015
Размер:
2 Мб
Скачать
☆

http://www.sklyaroff.ru

 

117

mov

di,80*2*12+40*2 ; смещение начала в центр видеопамяти

mov

ah,30

; атрибут символа (цвет, фон)

mov

al,'+'

; код символа ("+")

; копируем символ и атрибут в видеопамять

mov

word ptr es:[di],ax

int

20h

; выход из программы

end

start

 

 

Листинг 6.3. Вывод слова в верхнем левом углу экрана прямым обращением к видеопамяти (outchar2.asm)

.model tiny

.code

org 100h

start:

 

mov

ax,0003h

; видеорежим 3 (очистка экрана)

 

int

10h

 

 

cld

 

; обработка строк в прямом направлении

 

mov

ax,0B800h

; сегментный адрес видеопамяти

 

mov

es,ax

 

 

mov

di,0

; адрес начала видеопамяти в ES:DI

 

mov

si,offset txt

; в SI начало строки txt

 

mov

cx,txtlen

; в CX длина строки txt

 

cld

 

 

 

rep

movsb

; копирование символов строки в видеопамять

 

int

20h

; выход из программы

txt

db 'I',034h,'v',0E9h,'a',0C5h,'n',05Dh

txtlen = $-txt

 

 

 

end

start

 

6.3. Ввод с клавиатуры

Прежде чем рассмотреть способы ввода символов с клавиатуры, вам необходимо познакомиться с некоторыми важными понятиями, которые часто встречаются в описаниях функций DOS и BIOS:

Скан-коды (scan-code) — это встроенные уникальные номера, которые имеет каждая клавиша клавиатуры (см. табл. П2.9). Причем каждая клавиша генерирует два типа скан-кодов: при нажатии (make-код) и при отпускании клавиши (breakкод). Скан-код нажатия содержит в старшем разряде 1, а скан-код отпускания 0; в оставшихся разрядах располагается код-идентификатор клавиши. Поэтому сканкоды нажатия отличаются от соответствующих скан-кодов отпускания на значение 128 (80h). К примеру, если скан-код отпускания равен 0000 0101 (5), то соответствующий скан-код нажатия 1000 0101 (133), разница между ними составляет 133-5=128. Только не путайте скан-коды с ASCII-кодами и прочими