Системный сервис для ввода символов с клавиатуры. Преобразование символьных кодов в числовые. (Лекция 16)

Слайд 2

Формат кода нажатия клавиши

Формат кода нажатия клавиши

Слайд 3

Чтение нажатия с клавиатуры (функции 1 и 8 прерывания 21h)

Функции 1 и

Чтение нажатия с клавиатуры (функции 1 и 8 прерывания 21h) Функции 1
8 ожидают нажатия клавиши.
Если нажата символьная клавиша, функция 1 отображает символ на экране, функция 8 – не отображает.
Выход функций: AL – младший байт кода нажатия.
Для символьной клавиши – это ASCII-код.
Пример: Чтение одного символа с клавиатуры с отображением
mov ah, 1
int 21h
Замечание: Однократный вызов функции дает младший байт кода нажатия. Для чтения его старшего байта надо повторно вызвать функцию.

Слайд 4

Пример: Прочитать нажатие клавиши. Если это символьная клавиша, записать в память ее

Пример: Прочитать нажатие клавиши. Если это символьная клавиша, записать в память ее
Ascii-код, если управляющая/ функциональная – Scan –код

Ascii db ?
Scan db ?
. . . . .
mov ah, 8
int 21h ; AL ← младший байт кода нажатия
cmp al, 0
jz short m2 ; на m2, если была функ/упр.клавиша
mov ds: Ascii, al
jmp short m3
; повторный вызов функции для получения Scan-кода
m2: mov ah, 8
int 21h ; AL ← старший байт кода нажатия
mov ds: Scan, al
m3: . . . .

Слайд 5

Функция ожидает ввод строки с клавиатуры. Пока не нажата «Enter», строка ввода

Функция ожидает ввод строки с клавиатуры. Пока не нажата «Enter», строка ввода
может редактироваться
Вход: DS:DX – адрес области памяти для размещения строки
!! Требования к области ввода и ее размеру:
1-й байт области должен содержать максимальное количество планируемых нажатий, включая «Enter» («план нажатий»)
2-й байт резервировать под количество фактически введенных символов («факт нажатий»), его запишет сама функция
остальные байты - под символы, согласно «плану нажатий»
Выход :
во 2-й байт области ввода будет записано число фактически введенных символов (без Enter)
с 3-го байта области будут размещены ASCII коды введенных символов и код 0Dh (возврат каретки)

Чтение с клавиатуры строки символов (функция 0Аh прерывания 21h)

Слайд 6

Пример: Организовать ввод с клавиатуры строки символов длиной не более 5 символов

Buffer db

Пример: Организовать ввод с клавиатуры строки символов длиной не более 5 символов
6, 7 dup(0) ; область для ввода. План нажатий - 6 и еще 7
;байт для размещения кодов
. . .
mov ah, 0Аh
lea dx, Buffer
int 21h
Отладочный пример:
Если были нажаты символы: ‘ 2 3 4 ’ и затем Enter, область ввода после вызова сервиса должна будет содержать следующие коды:
ds:Buffer 06 03 32 33 34 0D 00 00

Слайд 7

Пример: Ввести с клавиатуры строку символов (не более 80 символов) и определить

Пример: Ввести с клавиатуры строку символов (не более 80 символов) и определить
в ней количество символов ‘0’

Размещение данных в памяти и регистрах:
Ds: Buf – адрес области ввода ( 83 байта);
DI –косвенный внутрисегм.адрес символа
CX – счетчик циклов
BL - количество символов ‘0’
Выделение памяти под область ввода в исх.тексте:
Buf db 81, 82 dup (?)

Слайд 8

Преобразование символьной строки после ввода с клавиатуры в числовые коды

1. Строка символьного

Преобразование символьной строки после ввода с клавиатуры в числовые коды 1. Строка
2-го представления кода
Пример:
Массив символов после ввода (hex): 30 30 31 31 31 30 31 30h ( “00111010” )
Желаемый результат: получить числовой байт 3А в регистре AL
(00111010)
Алгоритм:
AL ← 0
Цикл для каждого байта массива символов:
сравниваем байт с кодом 31h (“1”)
если равен, AL ← AL ˅ 00000001b
сдвиг AL влево на 1 бит

Слайд 9


2. Строка символьного 16-го представления кода
Пример:
Символьные коды после ввода

2. Строка символьного 16-го представления кода Пример: Символьные коды после ввода с
с клавиатуры: 33 41h (“3А” )
Желаемый результат: числовой байт 3А
Алгоритм (на примере):
Из кодов символов сделать коды цифр: 03 0А
В старшем байте поменять местами тетрады: 30 0А
Логическое ИЛИ между старшим и младшим байтом:
30
˅ 0А

Имя файла: Системный-сервис-для-ввода-символов-с-клавиатуры.-Преобразование-символьных-кодов-в-числовые.-(Лекция-16).pptx
Количество просмотров: 25
Количество скачиваний: 0