pavelkorr
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Добрый день, помогите пожалуйста написать программу. Принцип действия таков: Программа запрашивает у пользователя ввод числа от 0 до 9, по окончанию ввода компьютер считывает значение секунды из CMOS (именно старшее значение, чтобы всегда было от 0 до 9). Компьютер сравнивает введённое пользователем значение со считанным из CMOS. В случае совпадения выводится сообщение типа "Ура! Вы угадали", в случае неудачи, соответственно, "Ура! Вы не угадали!" Вот немного из набросков: Код: .model large .386 .387 ;------------------------ сегмент кода ------------------------------- .code ; сегмент кода mov AX, @data mov DS, AX mov ES, ax lea DX, s1 mov AH, 9h ; 09h - функция вывода на экран int 21h call in_out ; изучение команд работы с портами call fproc ; изучение команд матем. сопроцессора mov AH, 1h ; 01h - функция ожидания ввода с клавиатуры int 21h mov ax, 4c00h ; корректное завершение программы int 21h ret fproc PROC near finit ; инициализация сопроцессора fild word ptr zoom ; загрузим в стек 50000 ; здесь можно проверить правильность загрузки командой: fbstp tbyte ptr decimal fldpi ; pi,50000 fldpi ; pi,pi,50000 fmul ; pi*pi,50000 fcos ; cos(pi*pi), 50000 fmul ; 50000*cos(pi*pi) fld st(0) ; copy fst qword ptr myfloat ; сохраним в памяти как переменную типа double fbstp tbyte ptr decimal ; сохраним в памяти как десятичное целое lea si,numbers ; вывод на экран десятичного числа lea di,decimal add di,9 mov cx,10d f_loop: mov al,[di] mov ah,al ; сделаем копию в ah shr al,4 ; обработка первого числа add al,'0' mov [si],al ; сохранили and ah,00001111b add ah,'0' mov [si+1],ah ; сохранили dec di add si,2 dec cx jnz f_loop lea DX, math mov AH, 9h ; 09h - функция вывода на экран int 21h ret fproc ENDP ;===================================================================== ;=== Процедура считывания из микросхемы CMOS текущего времени ;===================================================================== in_out PROC near PR_CMOS MACRO NUM,ADDR mov al,NUM ; считаем из CMOS час lea si,ADDR call print_cmos ENDM mov al,0bh ; подготовка к взаимодействию с микросхемой CMOS out 70h,al in al,71h and al,11111011b out 71h,al PR_CMOS 0h,secondh ; считаем из CMOS старшую часть секунды lea DX, s_d mov AH, 9h ; 09h - функция вывода на экран int 21h ret in_out ENDP print_cmos PROC near ; входные параметры ; al - номер регистра CMOS ; si - адрес символьного буфера куда помещаем результат out 70h,al ; считаем из CMOS in al,71h mov ah,al ; сделаем копию в ah shr al,4 ; обработка первого числа add al,'0' mov [si],al ; сохранили and ah,00001111b add ah,'0' mov [si+1],ah ; сохранили ret print_cmos ENDP ;-------------------------- Сегмент данных ------------------------- .data ; сегмент данных s_d db 10,13,10,13,' Загаданное число: ' secondh db ?,? db '$' | |