IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

 
 Ответить  Открыть новую тему 
> Работа с Bios, Вывод на экран системного времени и даты из Bios.
сообщение
Сообщение #1


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


Всем привет. Программа должна выводить системное время и дату на экран большими буквами...все работает кроме символа " : " находящегося между минутами и секундами, этот символ должен мигать а он у мя не мигает..( помогите пожалуйста разобраться что не так..(

			     DATASG  SEGMENT 'DATA'
      				     NUMBERS LABEL BYTE
      		     DB	     7CH, 0C6H,	0CEH, 0DEH, 0F6H, 0E6H,	7CH, 00	     ;0	КОД 0
     
      		     DB	     30H, 70H, 30H, 30H, 30H, 30H, 0FCH, 00	     ;1	КОД 1
     
      		     DB	     78H, 0CCH,	0CH, 38H, 60H, 0CCH, 0FCH, 00	     ;2	КОД 2
     
     		     DB	     78H, 0CCH,	0CH, 38H, 0CH, 0CCH, 78H, 00	     ;3	КОД 3
  
    		     DB	     1CH, 3CH, 6CH, 0CCH, 0FEH,	0CH, 1EH, 00	     ;4	КОД 4
     
   		     DB	     0FCH, 0C0H, 0F8H, 0CH, 0CH, 0CCH, 78H, 00	     ;5	КОД 5
    
     		     DB	     38H, 60H, 0C0H, 0F8H, 0CCH, 0CCH, 78H, 00	     ;6	КОД 6
  
     		     DB	     0FCH, 0CCH, 0CH, 18H, 30H,	30H, 30H, 00	     ;7	КОД 7
     
     		     DB	     78H, 0CCH,	0CCH, 78H, 0CCH, 0CCH, 78H, 00	     ;8	КОД 8
    
     		     DB	     78H, 0CCH,	0CCH, 7CH, 0CH,	18H, 70H, 00	     ;9	КОД 9
  
     		     DB	     00, 30H, 30H, 00, 00, 30H,	30H, 00		     ;:	КОД А
  
     		     DB	     06, 0CH, 18H, 30H,	60H, 0C0H, 80H,	00	     ;/	КОД В
    
     
     			     DELT    EQU     9
   			     DATASG  ENDS
     
    			     STACKSG SEGMENT STACK 'STACK'
     		     DB	     100H DUP(?)
   		     STACKSG ENDS
    
     			     CODESG  SEGMENT 'CODE'
     					     ASSUME CS:	CODESG,	SS: STACKSG, DS: DATASG
    
    			     PRINT   PROC
     			     ;IN:    AL	- КОД СИМВОЛА; BH - СТРОКА НАЧАЛА ПЕЧАТИ; BL - СТОЛБЕЦ НАЧАЛА ПЕЧАТИ
     			     PUSHF
     			     PUSH    AX
   			     PUSH    DX
     			     PUSH    CX
     			     PUSH    DS
     			     PUSH    SI
     			     PUSH    ES
    			     PUSH    DI
     
     			     XOR     AH, AH
 			     MOV     CL, 8
     			     MUL     CL
    			     MOV     SI, AX
  
    			     MOV     AX, DATASG
     			     MOV     DS, AX
     			     MOV     AX, 0B800H
     		     MOV     ES, AX

    			     ;DESTONATION INDEX: DI=(80*(BH-CL)+BL)*2
    			     MOV     AL, BH
     			     MOV     CL, 80
     			     MUL     CL
    			     XOR     CH, CH
    			     MOV     CL, BL
    			     ADD     AX, CX
   			     MOV     CX, 2
     			     MUL     CX
     			     MOV     DI, AX
     
			     MOV     AH, 1AH
    			     MOV     CX, 8
     			     PRINT_IC:
     			     PUSH    CX
     			     PUSH    DI
   
   		     LODSB
    
    			     MOV     CX, 8
    			     PRINT_EC:
     			     ROL     AL, 1
    			     PUSH    AX
   			     AND     AL, 1
     			     JNZ     ONE
			     MOV     AL, ' '
    			     JMP     PRINTP
    		     ONE:  MOV AL, '&'
    		     PRINTP: STOSW
    			     POP     AX
    			     LOOP    PRINT_EC
   
    			     POP     DI
   		     ADD     DI, 160
    			     POP     CX
     			     LOOP    PRINT_IC
   			     POP     DI
     			     POP     ES
  			     POP     SI
   			     POP     DS
    			     POP     CX
    			     POP     DX
    			     POP     AX
    			     POPF
    			     RET
    			     PRINT   ENDP
    
    			     CLS     PROC
    			     PUSHF
    			     PUSH    AX
    			     PUSH    CX
  
    			     PUSH    DI
    			     PUSH    ES
   
   			     MOV     AH, 05
    			     MOV     AL, 0
 		     INT     10H
   
  		     MOV     AX, 0B800h
   			     MOV     ES, AX
    			     MOV     CX, 2000
    			     XOR     DI, DI
    			     MOV     AH, 1AH
    			     MOV     AL, ' '
   			     REP     STOSW
    
    			     POP     ES
    			     POP     DI
    			     POP     CX
   			     POP     AX
    			     POPF
   
    			     RET
    			     CLS     ENDP
    
    		     TIMEPRT PROC
    			     PUSHF
    			     PUSH    AX
    			     PUSH    BX
    			     PUSH    CX
    			     PUSH    DX
    
    			     MOV     BX, 0107H
   			     MOV     AH, 2CH
    			     INT     21H
   
    			     XOR     AH, AH
    			     MOV     AL, CH
    			     MOV     CH, 10
    			     DIV     CH
    			     CALL    PRINT
   




  			     ADD     BL, 8
   			     MOV     AL, AH
   			     CALL    PRINT
   
    			     ADD     BL, 8
   			     MOV     AL, 0AH
   			     CALL    PRINT
    
    			     ADD     BL, 8
    			     XOR     AH, AH
   			     MOV     AL, CL
    			     DIV     CH
			     CALL    PRINT
    
   			     ADD     BL, 8
   			     MOV     AL, AH
   			     CALL    PRINT
  
   			     ADD     BL, 8
    			     MOV     AL, 0AH
    			     CALL    PRINT
  
  			     ADD     BL, 8
   			     XOR     AH, AH
   			     MOV     AL, DH
 			     DIV     CH
    			     CALL    PRINT
  
   			     ADD     BL, 8
   		     MOV     AL, AH
   		     CALL    PRINT
  
  			     POP     DX
    			     POP     CX
   			     POP     BX
    			     POP     AX
    			     POPF
    			     RET
    			     TIMEPRT ENDP
  
   			     DATAPRT PROC
 		     PUSHF
  			     PUSH    AX
    			     PUSH    BX

 			     PUSH    CX
    			     PUSH    DX
   
    			     MOV     BX, 0900H
   
  			     MOV     AH, 2AH
   			     INT     21H
   
 			     MOV     AX, CX
    			     PUSH    DX
   			     XOR     DX, DX
    			     MOV     CX, 1000
    			     DIV     CX
    			     CALL    PRINT
    		     ADD     BX, 8
   			     MOV     AX, DX
    			     XOR     DX, DX
   			     MOV     CX, 100
    		     DIV     CX
    		     CALL    PRINT
   
   		     ADD     BX, 8
   			     MOV     AX, DX
    			     XOR     DX, DX
   			     MOV     CX, 10
    			     DIV     CX
		     CALL    PRINT
  
   		     ADD     BX, 8
    			     MOV     AX, DX
   			     CALL    PRINT
   
			     ADD     BX, 8
    		     MOV     AX, 0BH
    			     CALL    PRINT
 
   			     ADD     BX, 8
   			     POP     DX
    			     XOR     AH, AH
    			     MOV     AL, DH
  			     DIV     CL
   			     CALL    PRINT
  
 			     ADD     BX, 8
    			     MOV     AL, AH
   			     CALL    PRINT
  
    			     ADD     BX, 8
   			     MOV     AX, 0BH
    			     CALL    PRINT
  
   			     ADD     BX, 8
    			     XOR     AH, AH
    			     MOV     AL, DL
 			     DIV     CL
    			     CALL    PRINT
  
    			     ADD     BX, 8
   			     MOV     AL, AH
   			     CALL    PRINT
  
   			     POP     DX
   			     POP     CX
   			     POP     BX
    			     POP     AX
    			     POPF
    			     RET
    			     DATAPRT ENDP
 
    		     BEGIN:
   			     MAIN    PROC
   			     CALL    CLS
   
    			     GET_KEY:
    			     MOV     AH,0   ;номер функции для "чтения"
  			     INT     1AH    ;получаем значение счетчика
   			     ADD     DX, DELT  ;добавляем время	задержки к младшему слову
    			     MOV     BX,DX  ;запоминаем	требуемое значение в BX
   
   		     DCCL:   INT     1AH    ;получаем значение счетчика
    			     CMP     DX,BX  ;сравниваем	с искомым
   			     JB	     DCCL ;если	не равен, то повторяем снова
   
    			     CALL    TIMEPRT
    			     CALL    DATAPRT
   
    			     MOV     AH, 06
   			     MOV     DL, 0FFH
  			     INT     21H
   			     CMP     AL, 27
    			     JNZ     GET_KEY
  
   		       CALL  CLS
   			     MOV     AX, 4C00H
    			     INT     21H
   			     MAIN    ENDP
   			     CODESG  ENDS
   			     END     BEGIN
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2





Группа: Пользователи
Сообщений: 2
Пол: Мужской
Реальное имя: Andrey

Репутация: -  1  +


VGA видеокарты в текстовом видеорежиме могут работать в двух режимах:
1 - режим повышенной яркости цвета фона (это цвета от 8 до 15)
2 - режим мерцания символов (тогда цвета фона от 8 до 15 не доступны).
Дело в том, что за повышенную яркость фона и мерцание символов отвечает один и тот же бит байта атрибутов символов - самый старший бит в цвете фона байта атрибутов. По умолчанию BIOS включает режим повышенной яркости фона и нужно самому переключить режимы. Режим мерцания включается так:
        mov     ax, 1003h
        mov     bl, 1
        int     10h

После этого все символы на экране, у которых установлен старший бит цвета фона, начнут мигать.
Переключиться обратно можно точно так же, но задав BL = 0.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 2
Пол: Мужской

Репутация: -  0  +


Здравствуйте!
Подскажите пожалуйста, что за значения написаны в сегменте данных?

 DB	     7CH, 0C6H,	0CEH, 0DEH, 0F6H, 0E6H,	7CH, 00	     ;0	КОД 0
         		     DB	     30H, 70H, 30H, 30H, 30H, 30H, 0FCH, 00	     ;1	КОД 1
           		     DB	     78H, 0CCH,	0CH, 38H, 60H, 0CCH, 0FCH, 00	     ;2	КОД 2
          		     DB	     78H, 0CCH,	0CH, 38H, 0CH, 0CCH, 78H, 00	     ;3	КОД 3
      		     DB	     1CH, 3CH, 6CH, 0CCH, 0FEH,	0CH, 1EH, 00	     ;4	КОД 4
        		     DB	     0FCH, 0C0H, 0F8H, 0CH, 0CH, 0CCH, 78H, 00	     ;5	КОД 5
         		     DB	     38H, 60H, 0C0H, 0F8H, 0CCH, 0CCH, 78H, 00	     ;6	КОД 6
       		     DB	     0FCH, 0CCH, 0CH, 18H, 30H,	30H, 30H, 00	     ;7	КОД 7
          		     DB	     78H, 0CCH,	0CCH, 78H, 0CCH, 0CCH, 78H, 00	     ;8	КОД 8
         		     DB	     78H, 0CCH,	0CCH, 7CH, 0CH,	18H, 70H, 00	     ;9	КОД 9
       		     DB	     00, 30H, 30H, 00, 00, 30H,	30H, 00		     ;:	КОД А
       		     DB	     06, 0CH, 18H, 30H,	60H, 0C0H, 80H,	00	     ;/	КОД В


И по какому принципу записаны эти значения...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Цитата
Подскажите пожалуйста, что за значения написаны в сегменте данных?
А ты переведи эти значения в двоичные (7CH = 0111_1100, 0C6H = 1100_0110 и так далее), и нарисуй строка за строкой на бумаге. Единица - есть пиксел, ноль - нету. В каждой строке - одно значение:

.*****..
**...**.
**..***.
**.****.
****.**.
***..**.
.*****..
........


Ничего не замечаешь? Что нарисовано?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 2
Пол: Мужской

Репутация: -  0  +


IUnknown, большое спасибо good.gif
Оказывается все элементарно просто, достаточно перевести в двоичную систему и все встает на свои места
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 6.04.2025 4:16
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name