Глава 3
mov ax,offset file_name2
;ввод адрес
;ввод нового значения по введенному адресу
pop ax
call press_key
exit_nsk: ;очистка текущей строки
call scr_page
;**************************************************************
;вызов стандартной функции DOS выход из программы
main endp
end main
edit_cmos: ;редактирование CMOS ******************************************
call save_file
mov kolonka,0
mov stroka,47
call print_position
mov color,0Ah
mov bp,offset message4
mov cx,dlmessage4
call print_string
call read_int
mov al,chislo
push ax
mov bp,offset message5
mov cx,dlmessage5
call print_string
call press_key
;очистка текущей строки
mov kolonka,0
mov stroka,47
call clear_string
mov color,0Ah
mov bp,offset message7
mov cx,dlmessage7
call print_string
call read_int
mov al,chislo
push ax
mov bp,offset message5
mov cx,dlmessage5
call print_string
pop ax
mov tek_el,al
mov svalue,al
call writeSR
mov stroka,47
mov color,0Ah
call clear_string
popa
jmp non_sys_key
;******************************************************************************
;востановление графического режима который был до запуска программы
exit_dos: call set_screeng_mode
;************************
mov ax,4c00h
int 21h
;************************************************
;******************************************************************************
Анализ кода:
mov ax,offset file_name2
call save_file
После сохранения в стеке регистра a вызывается функция save_file (запись файла). Эта функция создает новый файл по указанному в переменной file_name2 имени и записывает в него данные из памяти начиная с адреса 00h и заканчивая 40h.
file_name2 DB "CMOS.SAV",0
После этого на экран в координаты kolonka,0 и stroka,47 выводится сообщение:
message4 DB "Введите редактируемый адрес в hex форме - "
;ввод адрес
mov kolonka,0
mov stroka,47
call print_position
mov color,0Ah
mov bp,offset message4
mov cx,dlmessage4
call print_string
После этого вызывается процедура read_int
В этой процедуре программа ждет ввода пользователя,
затем обрабатывает этот ввод.
А именно считывает с клавиатуры 16-ричное число, введенное пользователем
и записывает это число в переменную chislo
(см.подробнее процедура read_int)
chislo DB 0 ;bcd число
Далее сохраняем значение из переменной chislo в стеке, и выводим сообщение, с предложением нажать любую клавишу: " О.К. Press any key". Вызываем функцию ожидания нажатия клавиши.
Далее очищаем предыдущую строку, для того чтобы на ее месте вывести новое сообщение. И выводим новое сообщение: "Введите значение в hex форме - "
;ввод нового значения по введенному адресу
mov bp,offset message7
mov cx,dlmessage7
call print_string
Снова вызываем процедуру read_int, которая сначала ожидает ввода пользователем клавиши, затем присваивает это значение опять же переменной chislo. Далее значение переменной chislo сохраняем в стеке, и выводим новое сообщение " О.К. Press any key"
После этого достаем из стека сначала значение (присваиваем его переменной tek_el), затем адрес (присваиваем значение адреса переменной svalue). После этого вызываем процедуру writeSR, которая запишет по указанному адресу это значение в память компа.
pop ax
mov svalue,al
call writeSR
call press_key
Далее очищаем строку сообщений, и при помощи процедуры scr_page
выводим на экран обновленную страницу, отражающую обновленное содержание CMOS-памяти компа.
exit_nsk: ;очистка текущей строки
call scr_page
Наконец восстанавливаем регистр из стека и переходим на метку non_sys_key:
Таким образом программа работает в цикле задавая вопросы пользователю и обрабатывая клавиши, нажатые пользователем до тех пор, пока пользователь не нажмет клавишу F10 скан-код которой соответствует значению 44h, после чего прыжок на метку окончания программы exit_dos:
;**************************************************************
;востановление графического режима который был до запуска программы
exit_dos: call set_screeng_mode
;************************
;вызов стандартной функции DOS выход из программы
mov ax,4c00h
int 21h
;************************************************
main endp
end main
Назад |
Начало урока |
Вверх |
Вперед
Содержание