ВУЗ:
Составители:
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 (очистка вывода) пред-
Страницы
- « первая
- ‹ предыдущая
- …
- 146
- 147
- 148
- 149
- 150
- …
- следующая ›
- последняя »