; свободных кластеров
RET
DISC ENDP
Q10SCR PROC NEAR; Процедура прокрутки экрана
; AX установлен при вызове
MOV BH,31; Цвет (07 для ч/б)
SUB CX,CX
MOV DX,184FH
INT 10H; прокрутка экрана
RET
Q10SCR ENDP
Q20CURS PROC NEAR; Процедура установки курсора
MOV AH,02
SUB BH,BH
MOV DH,ROW
MOV DL,COL
INT 10H; Установка курсора
RET
Q20CURS ENDP
MEMORY2 PROC; Процедура анализирования и вывода размера памяти
MOV COL,2
MOV ROW,6
CALL Q20CURS; Установка курсора
LEA DX,MEMMS; Вывод сообщения о памяти
MOV AH,09H
INT 21H
MOV COL,30
MOV ROW,6
CALL Q20CURS; Установка курсора
mov al,15h; Установка для чтения из CMOS
out 70h,al; младшего байта размера памяти
nop
xor ax,ax
in al,71h; Чтение из CMOS размера памяти
mov bx,ax
mov al,16h; Установка для чтения из CMOS
out 70h,al; старшего байта размера памяти
nop
xor ax,ax
in al,71h; Чтение из CMOS размера памяти
shl ax,8
add bx,ax
mov dx,bx
call dec16out; Перевод размера памяти в строку и его вывод
MOV COL,2
MOV ROW,7
CALL Q20CURS; Установка курсора
LEA DX,MEMMS1; Вывод сообщения о расширенной памяти
MOV AH,09H
INT 21H
MOV COL,30
MOV ROW,7
CALL Q20CURS; Установка курсора
mov al,17h; Установка для чтения из CMOS
out 70h,al; младшего байта размера расширенной памяти
nop
xor ax,ax
in al,71h; Чтение из CMOS размера расширенной памяти
mov bx,ax
mov al,18h; Установка для чтения из CMOS
out 70h,al; старшего байта размера расширенной памяти
nop
xor ax,ax
in al,71h; Чтение из CMOS размера расширенной памяти
shl ax,8
add bx,ax
mov dx,bx
call dec16out; Перевод расширенного размера памяти в строку
; и его вывод
RET
MEMORY2 ENDP
dec16out proc near; Процедура перевода 16-битного кода в строку
; DX-число для перевода
dec16out0:
push ds; сохраняем используемые регистры в стеке
push di
push dx
push cx
push ax
; помещение символьных цифр во временный буфер
mov cx,0
mov di, offset cs: tbuff; адрес временного буфера
dec16out1:
push cx; сохранить cx
mov ax,dx
mov dx,0
mov cx,10
div cx; деление на 10
xchg ax,dx; получение остатка
add al,30h; перевод цифры в символ
mov cs: [di],al; поместить символ в буфер
inc di; переход к следующему символу
pop cx; восстановить cx
inc cx; увеличить количество цифр
cmp dx,0; проверка частного на 0
jnz dec16out1; если не равно, продолжать выделение цифр
dec16out2:
dec di; вывод символов буфера в обратном порядке
mov al,cs: [di]
call stdout; Вызов процедуры вывода символа на экран
loop dec16out2
pop ax; восстанавливаем сохраненные регистры из стека
pop cx
pop dx
pop di
pop ds
ret
dec16out endp
stdout proc near; Процедура вывода символа на экран
push dx
mov dl,al;
mov ah,2; функция вывода символа на экран
int 21h; вывод символа
pop dx
ret
tbuff db 255 dup ('$')
stdout endp
CODESG ENDS
END BEGIN