ВУЗ:
Составители:
145
mov cs:total,ax ; Кол-во перед. секторов
ret
save endp
; Процедура вычисления адреса памяти
; Вход: cs:start – начальный сектор
; cs:total – кол-во передаваемых секторов
; cs:disk – начальный адрес RAM-диска
; Возврат: ds – сегмент
; cs – число передаваемых данных
; SI=0
; Использует AX, CX, SI, DS
calc proc near
mov ax,cs:start ; Номер начального сектора
mov cl,5 ; Умножить на 32
shl ax,cl ; Номер начального параграфа
mov cx,cs:disk ; Нач. сегмент RAM-диска
add cx,ax ; Абс. нач. парараф (сегмент)
mov ds,cx ; DS = начальный сегмент
xor si,si ; SI = 0
mov ax,cs:total ; Количество передаваемых секторов
cmp ax,129 ; Должно быть не более 128
jc calc1 ; < 129 ( < 64 KB )
mov ax,128 ; Принудительно = 128 сект.
calc1: mov cx,512 ; Байтов в секторе
mul cx ; AX = число перед. байтов
mov cx,ax ; Пересылка в CX
ret
calc endp
; Включение звука (если надо)
bell1 proc near
test byte ptr bell,0ffh ; Звук нужен ?
jz nobell ; Не нужен
mov al,0b6h ; Управляющее слово
out 43h,al ; Посылка его в РУС
mov ax,400h ; Коэффициент деления
out 42h,al ; Мл. байт в канал 2
xchg al,ah
out 42h,al ; Ст. байт в канал 2
in al,61h ; Чтение порта динамика
or al,3 ; Включение динамика
out 61h,al
nobell: ret
bell1 endp
; Выключение звука (без проверки необходимости)
bell2 proc near
in al,61h ; Порт динамика
and al,0fch ; Выключение динамика
out 61h,al
ret
bell2 endp
145 mov cs:total,ax ; Кол-во перед. секторов ret save endp ; Процедура вычисления адреса памяти ; Вход: cs:start – начальный сектор ; cs:total – кол-во передаваемых секторов ; cs:disk – начальный адрес RAM-диска ; Возврат: ds – сегмент ; cs – число передаваемых данных ; SI=0 ; Использует AX, CX, SI, DS calc proc near mov ax,cs:start ; Номер начального сектора mov cl,5 ; Умножить на 32 shl ax,cl ; Номер начального параграфа mov cx,cs:disk ; Нач. сегмент RAM-диска add cx,ax ; Абс. нач. парараф (сегмент) mov ds,cx ; DS = начальный сегмент xor si,si ; SI = 0 mov ax,cs:total ; Количество передаваемых секторов cmp ax,129 ; Должно быть не более 128 jc calc1 ; < 129 ( < 64 KB ) mov ax,128 ; Принудительно = 128 сект. calc1: mov cx,512 ; Байтов в секторе mul cx ; AX = число перед. байтов mov cx,ax ; Пересылка в CX ret calc endp ; Включение звука (если надо) bell1 proc near test byte ptr bell,0ffh ; Звук нужен ? jz nobell ; Не нужен mov al,0b6h ; Управляющее слово out 43h,al ; Посылка его в РУС mov ax,400h ; Коэффициент деления out 42h,al ; Мл. байт в канал 2 xchg al,ah out 42h,al ; Ст. байт в канал 2 in al,61h ; Чтение порта динамика or al,3 ; Включение динамика out 61h,al nobell: ret bell1 endp ; Выключение звука (без проверки необходимости) bell2 proc near in al,61h ; Порт динамика and al,0fch ; Выключение динамика out 61h,al ret bell2 endp
Страницы
- « первая
- ‹ предыдущая
- …
- 143
- 144
- 145
- 146
- 147
- …
- следующая ›
- последняя »