Системное программное обеспечение. Рощин А.В. - 148 стр.

UptoLike

Составители: 

148
mov cx,ax ; пределы сегмента
input1: rep movsb ; Считывание данных в буфер
call bell2 ; Выключение звука
mov es,cs:rh_seg ; Восстановление
mov bx,cs:rh_ofs ; ES и BX
jmp done ; Выйти с уст. битом "сделано"
; Команды 5, 6 и 7 не обрабаьываются драйверами блоковых
; устройств
; Команда 5: Неразрушающий ввод
nd_input: jmp busy ; Выйти с уст. битом "занят"
; Команда 6: Состояние ввода
input_status: jmp done ; Выйти с уст. битом "сделано"
; Команда 7: Очистка ввода
input_clear: jmp done ; Выйти с уст. битом "сделано"
; Команда 8: Вывод
; Драйвер пересчитывает номeр сектора и количество переда-
; ваемых секторов в физический адрес начала и количество пе-
; редаваемых байтов, после чего заданное количество байтов
; записывается из буфера DOS в RAM-диск
output: call bell1 ; Включение звука (если разрешено)
call save ; Сохранене данных заголовка запроса
call calc ; Определение физического адреса
push ds
pop es ; ES = DS
mov di,si ; ES:DI = DS:SI (адр. RAM-диска)
mov ds,cs:buf_seg ; DS:SI – адрес буфeра c
mov si,cs:buf_ofs ; записываемыми данными
mov ax,si
add ax,cx ; Смещение + длина передачи
jnc output1 ; Переход, если нет переполн.
mov ax,0ffffh ; Коррекция СХ так, чтобы не
sub ax,si ; возникал выход за
mov cx,ax ; пределы сегмента
input1: rep movsb ; Считывание данных в буфер
mov es,cs:rh_seg ; Восстановление ES:BX из-за
mov bx,cs:rh_ofs ; возможного перехода к вводу
cmp cs:verify,0 ; Нужна проверка ?
jz output2 ; Нет
mov cs:verify,0 ; Сброс флага проверки
jmp input ; Считать те же секторы
output2: call bell2 ; Выключить звук
mov es,cs:rh_seg ; Восстановление
mov bx,cs:rh_ofs ; ES:BX
jmp done ; Выйти с уст. битом "сделано"
; Команда 9: Вывод с контролем
; Устанавливает флаг контроля VERIFY и передает управление
; команде "вывод"
output_verify: mov cs:verify,1 ; Установка флага контроля
jmp outpt ; Переход на "вывод"
; Команды 10 (состояние вывода) и 11 (очистка вывода) пред-
                                      148



       mov cx,ax          ; пределы сегмента
input1: rep movsb         ; Считывание данных в буфер
       call bell2         ; Выключение звука
       mov es,cs:rh_seg ; Восстановление
       mov bx,cs:rh_ofs ; ES и BX
       jmp done           ; Выйти с уст. битом "сделано"
; Команды 5, 6 и 7 не обрабаьываются драйверами блоковых
; устройств
; Команда 5: Неразрушающий ввод
nd_input:     jmp busy ; Выйти с уст. битом "занят"
; Команда 6: Состояние ввода
input_status: jmp done ; Выйти с уст. битом "сделано"
; Команда 7: Очистка ввода
input_clear: jmp done ; Выйти с уст. битом "сделано"
; Команда 8: Вывод
; Драйвер пересчитывает номeр сектора и количество переда-
; ваемых секторов в физический адрес начала и количество пе-
; редаваемых байтов, после чего заданное количество байтов
; записывается из буфера DOS в RAM-диск
output:       call bell1 ; Включение звука (если разрешено)
              call save ; Сохранене данных заголовка запроса
              call calc ; Определение физического адреса
              push ds
              pop es      ; ES = DS
              mov di,si ; ES:DI = DS:SI (адр. RAM-диска)
              mov ds,cs:buf_seg         ; DS:SI – адрес буфeра c
              mov si,cs:buf_ofs         ; записываемыми данными
              mov ax,si
              add ax,cx          ; Смещение + длина передачи
              jnc  output1       ; Переход, если нет переполн.
              mov ax,0ffffh      ; Коррекция СХ так, чтобы не
              sub ax,si          ; возникал выход за
              mov cx,ax          ; пределы сегмента
input1:       rep  movsb         ; Считывание данных в буфер
              mov es,cs:rh_seg ; Восстановление ES:BX из-за
              mov bx,cs:rh_ofs ; возможного перехода к вводу
              cmp cs:verify,0 ; Нужна проверка ?
              jz   output2       ; Нет
              mov cs:verify,0 ; Сброс флага проверки
              jmp input          ; Считать те же секторы
output2:      call bell2         ; Выключить звук
              mov es,cs:rh_seg ; Восстановление
              mov bx,cs:rh_ofs ; ES:BX
              jmp done           ; Выйти с уст. битом "сделано"
; Команда 9: Вывод с контролем
; Устанавливает флаг контроля VERIFY и передает управление
; команде "вывод"
output_verify: mov cs:verify,1 ; Установка флага контроля
              jmp outpt          ; Переход на "вывод"
; Команды 10 (состояние вывода) и 11 (очистка вывода) пред-