Вывод системного времени - 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

Объяснение кода листинга программы

  1. Сначала выполняется команда mov, которая переносит значение 0Bh в регистр AL.
  2. Затем выполняется команда out, которая передает значение регистра AL на порт 70h.
  3. После этого выполняется команда in, которая принимает данные из порта 71h и сохраняет их в регистре AL.
  4. Код не содержит дополнительных комментариев или пояснений.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.545 из 5