Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2016, 15:01   #1
Max00766
Форумчанин
 
Регистрация: 15.11.2015
Сообщений: 151
По умолчанию Вывести дату

Есть программа которая выводит дату через 1Аh, но препод забраковал и сказал сделать через 70h и 71h с такими индексами:
Индекс 07h RTC день месяца
Индекс 08h RTC месяц
Индекс 09h RTC год (две последние цифры)
Помогите пожалуйста под это переделать мой код:
Код:
.model small                         
.386                    
 
.data                  
Messd   db 'Current date: $'
dt_     db ?,?,'-',?,?,'-',?,?,?,?,0Ah,0Dh,'$'
 
.stack                  
    db  256 dup(?)      
 
.code                              
start:                  
    mov ax,@data        
    mov ds,ax           
                        
    
    mov ax,00h          
    mov al,03h          
    int 10h             
                        
    
    xor ax,ax           
    xor dx,dx          
    
    mov ah,09h         
    mov dx,offset Messd 
    int 21h             
    
    xor dx,dx          
    
    call getdate
    
    mov ah,4Ch                      
    mov al,00h         
    int 21h             
    
    getdate proc        
        mov ah,04h      
                       
        int 1Ah         
    
        xor ah,ah       
        mov al,dl       
        call toasci     
                            
        mov word ptr dt_,ax
        
        xor ah,ah      
        mov al,dh       
        call toasci     
                        
        mov word ptr dt_+3,ax
        
        xor ah,ah      
        mov al,ch      
        call toasci    
                       
        mov word ptr dt_+6,ax
        
        xor ah,ah      
        mov al,cl    
        call toasci   
                       
        mov word ptr dt_+8,ax
        
        mov ah,09h   
        mov dx,offset dt_
        int 21h       
        
        ret           
    getdate endp      
    
    toasci proc   
                   
        ror ax,4        
        shr ah,4      
        
        or ax,'00'      
    
        ret            
    toasci endp         
end start
Max00766 вне форума Ответить с цитированием
Старый 25.05.2016, 19:47   #2
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
сделать через 70h и 71h с такими индексами:
Чтоб считать данные с порта(71), ты должен отправить нужный индекс в порт(70). Ответ получишь в формате BCD, который нужно перевести в ASCII и вывести на экран. BCD-to-ASCII можно организовать или через инструкцию AAM со-значением 10h, или-же ручками передвинув биты. Таблица первых 10-ти индексов выглядит так (в дефолте BCD):

---------------------------------------------------
00h: — текущая секунда (00–59h)
01h: — секунды будильника
02h: — текущая минута (00–59h)
03h: — минуты будильника
04h: — текущий час (0–23h) для 24-часового режима
05h: — часы будильника
06h: — текущий день недели (1–7, 1—воскресенье)
07h: — текущий день месяца (01–31h)
08h: — текущий месяц (01–12h)
09h: — текущий год (00–99h)
---------------------------------------------------

Код:
; FASM code....
org 100h
jmp start

mes0    db  ' Current date: '
        db  0,0,':',0,0,':',0,0,'$'

start:  mov   di,mes0+15      ; приёмник для запись (текст пропущен)
        mov   al,7            ; день
        call  port70          ;
        mov   al,8            ; месяц
        call  port70          ;
        mov   al,9            ; год
        call  port70          ;

        mov   ah,9            ; выводим строку на экран
        mov   dx,mes0         ;
        int   21h             ;

exit:   xor   ax,ax           ;
        int   16h             ;
        int   20h             ;

;eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
; Процедура читает из CMOS по индексу AL ------------------------

port70: out   70h,al          ; задаём индекс
        in    al,71h          ; читаем данные
        xor   ah,ah           ; bcd-2-asc
        shl   ax,4            ; ^
        shr   al,4            ; ^
        or    ax,3030h        ; ^
        xchg  ah,al           ;
        stosw                 ; запись в буфер
        inc   di              ; пропускаем ':' в буфере
        ret                   ;
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вывести дату в textbox Алла94 Microsoft Office Excel 4 08.10.2014 15:57
Как вывести дату из БД? Андрей79 PHP 5 04.10.2011 22:36
Как вывести в таблицу дату и время P10neer Microsoft Office Word 0 24.12.2010 00:25
как вывести дату в делфи? Izlom Помощь студентам 2 02.06.2010 13:08