Вывод системного времени - Assembler
Формулировка задачи:
Программа выводит на экран время , но делает это два раза, в чем проблема -без понятия . Буду благодарен за помощь.
.model tiny
.code
.186 ; для shr al,4
org 100h ; com- программа
start:
mov al,0Bh ; CMOS OBh - управл¤ющий регистр ¬
out 70h,al ; порт 70h - индекс CMOS
in al,71h ; порт 71h - данные CMOS
mov al,4 ; CMOS 04h - час
call print_cmos
mov al,':' ;
int 29h
mov al,2 ; CMOS 02h - минута
call print_cmos
mov al,':' ; двоеточие
int 29h
mov al,0h ; CMOS 00h - секунда
call print_cmos
ret
; процедура print_cmos
; выводит на экран содержимое ¤чейки CMOS с номером в AL
; считает, что число, читаемое из CMOS, находитс¤ в формате BCD
print_cmos proc near
out 70h,al ; послать AL в индексный порт CMOS
in al,71h ; прочитать данные
push ax ; размещение значения в стеке
shr al,4 ; выделить старшие четыре бита
add al,'0' ; добавить ASCII-код цифры 0
int 29h ; вывести на экран
pop ax ; извлекает значение из стека
and al,0Fh ; выделить младшие четыре бита
add al,30h ; добавить ASCII-код цифры 0
int 29h ; вывести на экран
ret
print_cmos endp
end startРешение задачи: «Вывод системного времени»
textual
Листинг программы
mov al,0Bh ; CMOS OBh - управл¤ющий регистр out 70h,al ; порт 70h - индекс CMOS ; in al,71h ; порт 71h - данные CMOS
Объяснение кода листинга программы
- Сначала выполняется команда mov, которая переносит значение 0Bh в регистр AL.
- Затем выполняется команда out, которая передает значение регистра AL на порт 70h.
- После этого выполняется команда in, которая принимает данные из порта 71h и сохраняет их в регистре AL.
- Код не содержит дополнительных комментариев или пояснений.