Всем привет. Программа должна выводить системное время и дату на экран большими буквами...все работает кроме символа " : " находящегося между минутами и секундами, этот символ должен мигать а он у мя не мигает..( помогите пожалуйста разобраться что не так..(
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
VGA видеокарты в текстовом видеорежиме могут работать в двух режимах:
1 - режим повышенной яркости цвета фона (это цвета от 8 до 15)
2 - режим мерцания символов (тогда цвета фона от 8 до 15 не доступны).
Дело в том, что за повышенную яркость фона и мерцание символов отвечает один и тот же бит байта атрибутов символов - самый старший бит в цвете фона байта атрибутов. По умолчанию BIOS включает режим повышенной яркости фона и нужно самому переключить режимы. Режим мерцания включается так:
mov ax, 1003h
mov bl, 1
int 10h
Здравствуйте!
Подскажите пожалуйста, что за значения написаны в сегменте данных?
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 ;/ КОД В
IUnknown, большое спасибо
Оказывается все элементарно просто, достаточно перевести в двоичную систему и все встает на свои места