Графические устройства

         

Чтение очередного символа из буфера обмена



Пример 3.25. Чтение очередного символа из буфера обмена

Nxt sym: cmp si, incount в буфере есть символы ?
jb @F -> да, можно читать очередной символ
push ex сохраняем содержимое сх
mov ex, -I указываем размер порции данных
call Readf читаем данные из файла
mov incount, ax сохраняем размер порции данных
xor si, si очищаем указатель адреса
pop ex восстанавливаем содержимое сх
@@: lods byte ptr fs : [si] чтение очередного байта
ret ; возврат из подпрограммы

Подпрограмма примера 3.25 сравнивает текущее значение указат еля адреса буфера обмена (содержимое регистра si) с переменной incount.-, значение которой соответствует размеру считанной из файла порции данных, т. е. количеству байтов, находящихся в буфере обмена.

Если в буфере достаточно данных, то происходит переход на локальную метку @@ Для чтения кода символа в регистр al, увеличения указат-теля адреса на 1 и выхода из подпрограммы.

Если достигнута граница данных, хранящихся в буфере обменна, то надо прочитать новую порцию данных. Для этого сохраняется содержимое регистра сх, в него записывается предельное количество байтов для чтения (-1 имеет код OFFFFh) и происходит обращение к подпрограмме Readf, описанной в примере 3.23.

После чтения в переменную incount записывается количество прочитанных байтов, очищается регистр si и восстанавливается из стека содержимое регистра сх. Теперь можно прочитать очередной символ, увеличить значение сх на единицу и выйти из подпрограммы.

В примере 3.25 отсутствует проверка состояния С-разряда регистра признаков после чтения. Вы можете включить ее в текст примера 3.25., но целесообразнее контролировать правильность чтения непосредственно-о в подпрограмме Readf. Это упростит структуру всех подпрограмм, котогдрые обращаются К Readf.

Замечание 1
Замечание 1

В литературе встречаются сведения о существовании файлов, че.астично не соответствующих стандарту фирмы ZSoft — при их сжатии цикл упаковки не прекращается в конце строки. Для распаковки подобных файлов подпрограмму примера 3.24 надо изменить так, чтобы она выдавала заданноное количество распакованных кодов независимо от размера строки.



Содержание раздела