PDA

View Full Version : ساعت و تاریخ یک سیستم



maryam206
چهارشنبه 17 دی 1382, 18:25 عصر
سلام
برنامه ای بنویسید که ساعت و تاریخ کامپیوتر را خوانده و آن را در پنجره ای که به همین منظور ترسیم می شود به فرم مناسب نمایش دهد(منظورم از فرم مناسب یعنی ساعت را به شکل مثلا 23:16:55 نمایش دهد و یا تاریخ را به شکل 17/10/82 نمایش دهد .
لطفا مرا راهنمایی کنید.
با تشکر

Best Programmer
پنج شنبه 18 دی 1382, 14:01 عصر
بد نیست کتاب Pcinterیا Peter Notron Advanced Assembly یا ...... رو بخونی تو اولین مثالهاشون هست. اگر هم میخوای بدون وقت تلف کردن پروژه بولید کنی بد نیست پروژهاتون رو بدیدکس دیگه بنویسه. :lol: :twisted:

Best Programmer
پنج شنبه 18 دی 1382, 14:02 عصر
بد نیست کتاب Pcinterیا Peter Norton Advanced Assembly یا ...... رو بخونی تو اولین مثالهاشون هست. اگر هم میخوای بدون وقت تلف کردن پروژه تولید کنی بد نیست پروژهاتون رو بدیدکس دیگه بنویسه. :lol: :twisted:

Best Programmer
پنج شنبه 18 دی 1382, 14:04 عصر
راستی مقیم در حافظه میخوای یا ...؟

maryam206
جمعه 19 دی 1382, 14:12 عصر
مقیم در حافظه یا ... یعنی چی؟یعنی ساعتی که در حافظه است.
در ضمن نیازی نیست بدم کسی بنویسه من خودم می خوام این کارو بکنم چون هم وقتشو دارم و هم دوست دارم خودم یاد بگیرم فقط می خوام که منو یک کمی راهنمایی کنید

B-Vedadian
شنبه 20 دی 1382, 16:47 عصر
با سلام،

مختصر بگویم، برای برنامه های DOS از وقفه 1Ah استفاده کنید که ساعت و تاریخ خود سیستم را برمی گرداند.

Inprise
شنبه 20 دی 1382, 17:14 عصر
الف. از 2Ah برای گرفتن تاریخ فعلی
ب. از 2Bh برای تنظیم تاریخ فعلی
ج. از 2Ch برار گرفتن زمان (ساعت) فعلی
د. از 2Dh برای تنظیم زمان (ساعت) فعلی

استفاده کن .

Best Programmer
یک شنبه 21 دی 1382, 10:31 صبح
دوست عزیز اینم Source ولی من خیلی دوست داشتم که بربد دنبال یاد گیریش تا ...... البته بعصی ها فکر میکنند که ....... البته 2 تا Source میذارم تا کارت راه بیوفته ولی همون طور که گفتم کاری کردم که مجبور بشی باهاشون ور بری تا بتونی اراپه بدی. :oops:


;ÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛ& Ucirc;ÛÛÛÛÛÛ&U circ;ÛÛÛÛÛÛ&Uc irc;ÛÛÛÛÛÛ&Uci rc;ÛÛÛÛÛÛ&Ucir c;ÛÛÛÛÛÛ&Ucirc ;ÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛ& Ucirc;ÛÛÛÛÛÛ&U circ;ÛÛ
;ÛÛ ÛÛ
;ÛÛ CLOCK ÛÛ
;ÛÛ ÛÛ
;ÛÛ Created: 17-May-98 ÛÛ
;ÛÛ Passes: 5 Analysis Flags on: H ÛÛ
;ÛÛ ÛÛ
;ÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛ& Ucirc;ÛÛÛÛÛÛ&U circ;ÛÛÛÛÛÛ&Uc irc;ÛÛÛÛÛÛ&Uci rc;ÛÛÛÛÛÛ&Ucir c;ÛÛÛÛÛÛ&Ucirc ;ÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛ& Ucirc;ÛÛÛÛÛÛ&U circ;ÛÛ

.286c


SEG_A SEGMENT
ASSUME CS:SEG_A, DS:SEG_A


ORG 100h

clock PROC FAR

start:
JMP LOC_6 ; (0236)
DATA_1 DB 0
DATA_2 DB 0
DATA_3 DB 0
DATA_4 DB 6
DATA_5 DB 5
DATA_6 DB 3

clock ENDP

;ÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛ& Ucirc;ÛÛÛÛÛÛ&U circ;ÛÛÛÛÛÛ&Uc irc;ÛÛÛÛÛÛ&Uci rc;ÛÛÛÛÛÛ&Ucir c;ÛÛÛÛÛÛ&Ucirc ;ÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛ& Ucirc;ÛÛÛÛÛÛ&U circ;ÛÛ
;
; External Entry Point
;
;ÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛ& Ucirc;ÛÛÛÛÛÛ&U circ;ÛÛÛÛÛÛ&Uc irc;ÛÛÛÛÛÛ&Uci rc;ÛÛÛÛÛÛ&Ucir c;ÛÛÛÛÛÛ&Ucirc ;ÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛ& Ucirc;ÛÛÛÛÛÛ&U circ;ÛÛ

INT_1CH_ENTRY PROC FAR
PUSH AX
; MOV AL,20H ; ' '
; OUT 20H,AL ; port 20H, 8259-1 int command
; al = 20H, end of interrupt
PUSHF ; Push flags
PUSH DS
PUSH CS
POP DS
DEC DATA_4 ; (6284:0106=6)
JNZ LOC_3 ; Jump if not zero
PUSH BX
PUSH CX
PUSH DX
PUSH ES
MOV DATA_4,6 ; (6284:0106=6)
DEC DATA_6 ; (6284:0108=3)
JNZ LOC_2 ; Jump if not zero
MOV DATA_6,3 ; (6284:0108=3)
DEC DATA_5 ; (6284:0107=5)
JNZ LOC_1 ; Jump if not zero
INC DATA_4 ; (6284:0106=6)
MOV DATA_5,5 ; (6284:0107=5)
LOC_1:
INC DATA_1 ; (6284:0103=0)
CMP DATA_1,3CH ; (6284:0103=0) '<'
JNE LOC_2 ; Jump if not equal
INC DATA_2 ; (6284:0104=0)
MOV DATA_1,0 ; (6284:0103=0)
CMP DATA_2,3CH ; (6284:0104=0) '<'
JNE LOC_2 ; Jump if not equal
INC DATA_3 ; (6284:0105=0)
MOV DATA_2,0 ; (6284:0104=0)
CMP DATA_3,18H ; (6284:0105=0)
JNE LOC_2 ; Jump if not equal
MOV DATA_3,0 ; (6284:0105=0)
LOC_2:
CALL SUB_1 ; (0176)
POP ES
POP DX
POP CX
POP BX
LOC_3:
POP DS
POPF ; Pop flags
POP AX
IRET ; Interrupt return
INT_1CH_ENTRY ENDP


;ßßßßßßß ßßßßßßß& szlig;ßßßßßß&s zlig;ßßßßßß&sz lig;ßßßßßß&szl ig;ßßßßßß&szli g;ßßßßßß&szlig ;ßßßßßßß ßßßßßßß& szlig;ßßßßßß&s zlig;ßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜ& Uuml;ÜÜÜÜÜÜÜ&Uu ml;ÜÜÜÜÜÜÜ&Uuml ;ÜÜÜÜÜÜÜÜ& Uuml;ÜÜÜÜÜÜÜ&Uu ml;ÜÜÜÜÜÜÜ&Uuml ;ÜÜÜÜÜÜÜÜ& Uuml;ÜÜÜÜÜÜÜ&Uu ml;ÜÜÜÜÜÜÜ

SUB_1 PROC NEAR
PUSH DS
MOV AX,40H
MOV DS,AX
MOV BX,49H
MOV AH,[BX]
MOV BX,0
CMP AH,2
JE LOC_4 ; Jump if equal
CMP AH,3
JE LOC_4 ; Jump if equal
CMP AH,7
JNE LOC_5 ; Jump if not equal
MOV BH,8
LOC_4:
MOV DX,0B809H
SUB DX,BX
MOV BX,62H
MOV CL,[BX]
XOR AH,AH ; Zero register
MOV AL,80H
MUL CL ; ax = reg * al
SHL AX,1 ; Shift w/zeros fill
ADD DX,AX
POP DS
MOV ES,DX
MOV BX,0
MOV AL,DATA_3 ; (6284:0105=0)
CALL SUB_2 ; (01CC)
MOV ES:[BX-2],AX
MOV AL,DATA_2 ; (6284:0104=0)
CALL SUB_2 ; (01CC)
MOV ES:[BX-2],AX
MOV AL,DATA_1 ; (6284:0103=0)
CALL SUB_2 ; (01CC)
PUSH DS
LOC_5:
POP DS
RETN
SUB_1 ENDP


;ßßßßßßß ßßßßßßß& szlig;ßßßßßß&s zlig;ßßßßßß&sz lig;ßßßßßß&szl ig;ßßßßßß&szli g;ßßßßßß&szlig ;ßßßßßßß ßßßßßßß& szlig;ßßßßßß&s zlig;ßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜ& Uuml;ÜÜÜÜÜÜÜ&Uu ml;ÜÜÜÜÜÜÜ&Uuml ;ÜÜÜÜÜÜÜÜ& Uuml;ÜÜÜÜÜÜÜ&Uu ml;ÜÜÜÜÜÜÜ&Uuml ;ÜÜÜÜÜÜÜÜ& Uuml;ÜÜÜÜÜÜÜ&Uu ml;ÜÜÜÜÜÜÜ

SUB_2 PROC NEAR
AAM ; Ascii adjust
OR AX,3030H
MOV CH,AH
MOV AH,2FH ; '/'
MOV ES:[BX+2],AX
MOV AL,CH
MOV ES:[BX],AX
MOV AL,3AH ; ':'
ADD BX,6
RETN
SUB_2 ENDP

DATA_7 DB 0DH, 0AH, 'CLOCK (c) 1991 BY A.H.'
DB ' DALIRROYFARD', 0DH, 0AH, 'CLOCK'
DB ' is installed correctly. GOOD LU'
DB 'CK.', 0DH, 0AH, '$'
LOC_6:
MOV AH,2CH ; ','
INT 21H ; DOS Services ah=function 2Ch
; get time, cx=hrs/min, dh=sec
MOV DATA_3,CH ; (6284:0105=0)
MOV DATA_2,CL ; (6284:0104=0)
MOV DATA_1,DH ; (6284:0103=0)
MOV DX,OFFSET DATA_7 ; (6284:01E4=0DH)
MOV AH,9
INT 21H ; DOS Services ah=function 09h
; display char string at ds:dx
MOV AX,251CH
MOV DX,109H
INT 21H ; DOS Services ah=function 25h
; set intrpt vector al to ds:dx
MOV DX,1E4H
MOV CL,4
SHR DX,CL ; Shift w/zeros fill
INC DX
MOV AX,3100H
INT 21H ; DOS Services ah=function 31h
; terminate & stay resident

SEG_A ENDS



END START

این اولی Disassembly یه source اسمبلی هست.


;******************************
;* *
;* CLOCK.ASM *
;* *
;******************************
;
;
;After typing the list
;enter the following commands:
;
; MASM CLOCK;
; LINK CLOCK;
; EXE2BIN CLOCK.EXE CLOCK.COM
; DEL CLOCK.EXE
;******************************
;* Start of macros *
;******************************
@CHARIN MACRO
MOV AH,0
INT 16H
ENDM

@CLS MACRO
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DX
MOV AH,6
MOV AL,0
MOV BH,7
MOV CX,0
MOV DX,0184FH
INT 10H
POP DX
POP CX
POP BX
POP AX
ENDM

@DECDEC MACRO POSITION,UPPER
LOCAL D1,D2
PUSH AX
PUSH BX
PUSH SI
MOV SI,POSITION
MOV AX,UPPER
MOV BH,[SI]
MOV BL,[SI+1]
CMP BX,03030H
JNE D1
MOV BX,AX
INC BL
D1:
CMP BL,'0'
JNE D2
DEC BH
MOV BL,58
D2:
DEC BL
MOV [SI],BH
MOV[SI+1],BL
POP SI
POP BX
POP AX
ENDM

@DECINC MACRO POSITION,UPPER
LOCAL D1,D2
PUSH AX
PUSH BX
PUSH SI
MOV SI,POSITION
MOV AX,UPPER
MOV BH,[SI]
MOV BL,[SI+1]
CMP BX,AX
JNE D1
MOV BX,0302FH
D1:
CMP BL,'9'
JNE D2
INC BH
MOV BL,47
D2:
INC BL
MOV [SI],BH
MOV [SI+1],BL
POP SI
POP BX
POP AX
ENDM

@GET_VEC MACRO INTNR
PUSH AX
PUSH BX
STI
MOV AL,INTNR
MOV AH,35H
INT 21H
MOV DX,BX
POP BX
POP AX
ENDM

@POP MACRO
POPF
POP DS
POP ES
POP SI
POP DI
POP BP
POP DX
POP CX
POP BX
POP AX
ENDM

@PUSH MACRO
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH BP
PUSH DI
PUSH SI
PUSH ES
PUSH DS
PUSHF
ENDM

@PUT_VEC MACRO INTNR
PUSH AX
PUSH DS
ASSUME DS:NOTHING
MOV AX,ES
MOV DS,AX
MOV AL,INTNR
MOV AH,25H
INT 21H
ASSUME DS:CODE
POP DS
POP AX
ENDM

@COMPARE MACRO OFFSET1,OFFSET2,LENGTH
LOCAL LIKE,END
PUSH SI
PUSH DI
PUSH AX
MOV SI,OFFSET2
MOV DI,OFFSET1
MOV CX,LENGTH
LIKE:
MOV AL,[SI]
CMP AL,ES:[DI]
JNE END
INC SI
INC DI
LOOP LIKE
END:
POP AX
POP DI
POP SI
ENDM

@PLACEMENT MACRO OFFSET1,OFFSET2,LENGTH
LOCAL PLACE
PUSH SI
PUSH DI
PUSH AX
PUSH CX
MOV SI,OFFSET2
MOV DI,OFFSET1
MOV CX,LENGTH
PLACE:
MOV AL,[SI]
MOV ES:[DI],AL
INC SI
INC DI
LOOP PLACE
POP CX
POP AX
POP DI
POP SI
ENDM

;*****************************
;* End of macros *
;*****************************

CODE SEGMENT
ASSUME CS:CODE, DS:CODE
ORG 100H
START:
JMP PROGCODE

;*****************************
;* Start of data segment *
;*****************************
DIGIT DB ' Clock v 1.0 '
INT16H DB 00000000
INT1CH DD 00000000
HOUR DB 24
MIN DB 59
SECOND DB 59
SEC_H DW 65520
SEC_M DW 1092
TIMET DW 182
SEC_DIF DB 0
TEXT DB '1 2 : 5 9 : 5 9 '
TIME_OLD DB '1 2 : 5 9 : 5 9 '
TIME_NEW DB '1 2 : 5 9 : 5 9 '
TEXTPOS DW 144
COLOR DB 7
WATCH DB 1
KEYS DB 0
BELL DB 0
WINDOW1 DB 201,15,38 DUP(205,15),187,15
DB 186,15,13 DUP(32,7),'C',0Eh,'l',0Eh,'o',0Eh
DB 'c',0Eh,'k',0Eh,32,7,'V',0Eh,32,7,'1',0Eh,'.',0Eh
DB '0',0Eh,32,7,10 DUP(32,7)
DB 3 DUP(32,7),186,15
DB 199,15,38 DUP(196,15),182,15
DB 186,15,4 DUP(32,7),'A',7,'l',7,'a',7,'r'
DB 7,'m',7,'t',7,'i',7,'m',7,'e',7,32,7,'1'
DB 7,':',7,22 DUP(32,7),186,15
DB 186,15,4 DUP(32,7),'A',7,'l',7,'a',7,'r'
DB 7,'m',7,'t',7,'i',7,'m',7,'e',7,32,7,'2'
DB 7,':',7,22 DUP(32,7),186,15
DB 199,15,38 DUP(196,15),182,15
DB 186,15,32,7,'K',9,'e',9,'y',9,'s',9
DB 32,7,'f',9,'o',9,'r',9,32,7,'s',9
DB 'e',9,2 DUP('t',9),'i',9,'n',9,'g',9,32
DB 7,'t',9,'h',9,'e',9,32,7,'a',9,'l',9,'a'
DB 9,'r',9,'m',9,32,7,'t',9,'i',9,'m',9
DB 'e',9,':',9,5 DUP(32,7),186,15
DB 186,15,32,7,'[',4,'1',4,':',4,'2',4,']',4
DB 3 DUP(32,7),'A',7,'l',7,'a',7,'r',7,'m'
DB 7,'t',7,'i',7,'m',7,'e'
DB 7,32,7,'1',7,32,7,'o',7,'r',7,32,7,'2',7
DB 13 DUP(32,7),186,15
DB 186,15,32,7,'[',3,'H',3,':',3,'M',3,':',3
DB 'S',3,']',3,32,7,'H',7,'o',7,'u',7,'r',7
DB 's',7,',',7,32,7,'M',7,'i',7
DB 'n',7,'u',7,'t',7,'e',7,'s',7,',',7,32,7
DB 'S',7,'e',7,'c',7,'o',7,'n',7,'d',7,'s'
DB 7,6 DUP(32,7),186,15
DB 186,15,32,7,'[',5,'h',5,':',5,'m',5,':',5
DB 's',5,']',5,32,7,'U',7,'p',7,32,7,'a',7
DB 'n',7,'d',7,32,7,'D',7,'o',7,'w',7,'n',7,32,7
DB 'c',7,'o',7,'u',7,'n',7,'t',7,'i',7,'n',7,'g',7
DB 9 DUP(32,7),186,15
DB 186,15,32,7,'[',6,'E',6,'n',6,'t',6,'e',6
DB 'r',6,']',6,32,7,'O',7,'n',7,32,7,'a',7,'n',7,'d', 7
DB 32,7,'O',7,'f',7,'f',7,32,7,'a',7,'c',7
DB 't',7,'i',7,'v',7,'a',7,'t',7,'i',7,'n'
DB 7,'g',7,8 DUP(32,7),186,15
DB 186,15,32,7,'[',2,'E',2,'s',2,'c',2,']',2
DB 3 DUP(32,7),'Q',7,'u',7,'i',7,'t',7
DB 25 DUP(32,7),186,15
DB 200,15,38 DUP(205,15),188,15
WINDOW2 DB 1040 DUP(?)
WINDOW3 DB 201,15,26 DUP(205,15),187,15
DB 186,15,32,7,'A',7,'l',7,'a',7,'r',7,'m',7
DB 32,7,'1',7,32,7,'i',7,'s',7,32,7,'a',7,'c',7
DB 't',7,'i',7,'v',7,'a',7,'t',7,'e',7
DB 'd',7,'!',7,4 DUP(32,7),186
DB 15
DB 186,15,32,7,'Q',7,'u',7,'i',7,'t',7,'t',7
DB 'i',7,'n',7,'g',7,32,7,'w',7,'i',7,'t',7
DB 'h',7,32,7,'[',7,'E',7,'s',7
DB 'c',7,']',7,6 DUP(32,7),186,15
DB 200,15,26 DUP(205,15),188,15
WINDOW4 DB 201,15,26 DUP(205,15),187,15
DB 186,15,32,7,'A',7,'l',7,'a',7,'r',7,'m',7
DB 32,7,'2',7,32,7,'i',7,'s',7,32,7,'a',7,'c',7
DB 't',7,'i',7,'v',7,'a',7,'t',7,'e',7
DB 'd',7,'!',7,4 DUP(32,7),186
DB 15
DB 186,15,32,7,'Q',7,'u',7,'i',7,'t',7,'t',7
DB 'i',7,'n',7,'g',7,32,7,'w',7,'i',7,'t',7
DB 'h',7,32,7,'[',7,'E',7,'s',7
DB 'c',7,']',7,6 DUP(32,7),186,15
DB 200,15,26 DUP(205,15),188,15
WINDOW5 DB 224 DUP(?)
VIDEO DW 0B800H
RAMBIOS DW 0000H
KBFLAG DW 0417H
ALARM1 DB '00:00:00 OFF'
ALARM2 DB '00:00:00 OFF'
ALARM DB '00:00:00 OFF'
ALARML DW 15
ALPOS1 DW 1338
ALPOS2 DW 1498
;*****************************
;* End of data segment *
;*****************************

INT_1C:
@PUSH
ASSUME CS:CODE, DS:CODE, ES:CODE
MOV AX,CS
MOV DS,AX
MOV ES,AX
STI
CALL KEY
CMP AX,2
JNZ A1
CALL RINGER
MOV AX,0
A1:
CALL CLOCK
CALL ALTEST
@POP
PUSHF
CALL CS:[INT1CH]
IRET
;
ALTEST PROC
CMP BELL,1
JZ ALT4
MOV DX,1
MOV BX,OFFSET ALARM1
ALT0:
MOV BP,OFFSET TIME_NEW
MOV DI,0
MOV SI,0
MOV CX,8
CMP BYTE PTR [BX+13],'N'
JNE ALT4
ALT1:
MOV AL,[BX+DI]
CMP AL,DS:[BP+SI]
JNE ALT2
INC DI
INC SI
INC SI
LOOP ALT1
JMP ALT3
ALT2:
CMP DX,2
JAE ALT4
INC DX
MOV BX,OFFSET ALARM2
JMP ALT0
ALT3:
MOV BELL,1
MOV AL,20H
OUT 20H,AL
CALL TON
CALL TONOFF
MOV BELL,0
ALT4:
RET
ALTEST ENDP
;
ALWINDOW PROC
@PLACEMENT <OFFSET ALARM>,<OFFSET ALARM2>,ALARML
MOV DX,2
MOV BL,7
CALL ALOUT
@PLACEMENT <OFFSET ALARM>,<OFFSET ALARM1>,ALARML
MOV DX,1
MOV BL,112
CALL ALOUT
RET
ALWINDOW ENDP
ALOUT PROC
PUSH AX
PUSH CX
PUSH SI
PUSH DI
PUSH ES
ASSUME ES:NOTHING
MOV ES,VIDEO
MOV CX,ALARML
CMP DX,2
JE AL1
MOV DI,ALPOS1
JMP AL2
AL1:
MOV DI,ALPOS2
AL2:
MOV SI,OFFSET ALARM
AL3:
MOV AL,[SI]
MOV ES:[DI],AL
INC DI
MOV ES:[DI],BL
INC DI
INC SI
LOOP AL3
ASSUME ES:CODE
POP ES
POP DI
POP SI
POP CX
POP AX
RET
ALOUT ENDP
ALSET PROC
PUSH AX
PUSH BX
PUSH DX
PUSH SI
CHAR:
@CHARIN
CMP AL,0
JE CHAR
CMP AL,27
JNE C0
JMP ESC0
C0:
CMP AL,'1'
JNE C1
JMP C11
C1:
CMP AL,'2'
JNE C2
JMP C21
C2:
CMP DX,0
JE CHAR
MOV SI,OFFSET ALARM
CMP AL,'H'
JNE C3
MOV AX,03233H
JMP INCREMENT
C3:
CMP AL,'h'
JNE C4
MOV AX,03233H
JMP DECREMENT
C4:
CMP AL,'M'
JNE C5
ADD SI,3
MOV AX,03539H
JMP INCREMENT
C5:
CMP AL,'m'
JNE C6
ADD SI,3
MOV AX,03539H
JMP DECREMENT
C6:
CMP AL,'S'
JNE C7
ADD SI,6
MOV AX,03539H
JMP INCREMENT
C7:
CMP AL,'s'
JNE C8
ADD SI,6
MOV AX,03539H
JMP DECREMENT
C8:
CMP AL,13
JNE C9
ADD SI,12
CMP BYTE PTR [SI+1],70
JE C81
MOV BYTE PTR [SI],79
MOV BYTE PTR [SI+1],70
MOV BYTE PTR [SI+2],70
JMP C82
C81:
MOV BYTE PTR [SI],79
MOV BYTE PTR [SI+1],78
MOV BYTE PTR [SI+2],32
C82:
CALL ALOUT
JMP CHAR
C9:
JMP CHAR
C11:
CMP DX,1
JNE C12
JMP CHAR
C12:
MOV BL,7
CALL ALOUT
@PLACEMENT <OFFSET ALARM2>,<OFFSET ALARM>,ALARML
@PLACEMENT <OFFSET ALARM>,<OFFSET ALARM1>,ALARML
MOV DX,1
MOV BL,112
CALL ALOUT
JMP CHAR
C21:
CMP DX,2
JNE C22
JMP CHAR
C22:
MOV BL,7
CALL ALOUT
@PLACEMENT <OFFSET ALARM1>,<OFFSET ALARM>,ALARML
@PLACEMENT <OFFSET ALARM>,<OFFSET ALARM2>,ALARML
MOV DX,2
MOV BL,112
CALL ALOUT
JMP CHAR
INCREMENT:
@DECINC SI,AX
JMP C82
DECREMENT:
@DECDEC SI,AX
JMP C82
ESC0:
CMP DX,1
JNE ESC2
ESC1:
@PLACEMENT <OFFSET ALARM1>,<OFFSET ALARM>,ALARML
JMP ENDALSET
ESC2:
@PLACEMENT <OFFSET ALARM2>,<OFFSET ALARM>,ALARML
ENDALSET:
POP SI
POP DX
POP BX
POP AX
RET
ALSET ENDP
;
CHANGE PROC
CMP KEYS,1
JE CHG1
MOV KEYS,1
XOR WATCH,1
CMP WATCH,1
JNE OFF
ON:
ASSUME ES:CODE, DS:NOTHING
MOV ES,DX
MOV DS,VIDEO
@PLACEMENT <OFFSET TEXT>,TEXTPOS,16
ASSUME DS:CODE
MOV DS,DX
@PLACEMENT <OFFSET TIME_OLD>,<OFFSET TEXT>,16
JMP CHG1
OFF:
ASSUME ES:NOTHING
MOV ES,VIDEO
@PLACEMENT TEXTPOS <OFFSET TEXT>,16
CHG1:
ASSUME ES:CODE
MOV ES,DX
MOV KEYS,1
RET
CHANGE ENDP
;
CLOCK PROC
PUSH DX
MOV DX,CS
CMP AX,0
JNZ U1
JMP TIME_TEST
U1:
CALL CHANGE
JMP U2
TIME_TEST:
MOV KEYS,0
U2:
CALL TIME
CALL CLOCKSTR
CMP WATCH,1
JNE U3
CALL OUTPUT
U3:
POP DX
RET
CLOCK ENDP
;
WINDOW PROC
PUSH CX
PUSH BP
MOV BP,DX
MOV CL,BL
SUB CL,AL
MOV DL,BH
SUB DL,AH
MOV DH,0
MOV CH,0
ADD CX,CX
MOV BL,AL
MOV AL,AH
MOV BH,80
MUL BH
MOV BH,0
ADD AX,BX
ADD AX,AX
CMP BP,0
JNE DO
JMP UNDO
DO:
PUSH AX
MOV BP,CS ;BP
ASSUME DS:NOTHING, ES:CODE
MOV DS,VIDEO
MOV ES,BP
MOV BH,DL
MOVE1:
@PLACEMENT DI,AX,CX
ADD DI,CX
ADD AX,160
DEC BH
JNZ MOVE1
ASSUME DS:CODE, ES:NOTHING
MOV DS,BP
MOV ES,VIDEO
POP AX
MOV BH,DL
MOVE2:
@PLACEMENT AX,SI,CX
ADD SI,CX
ADD AX,160
DEC BH
JNZ MOVE2
JMP WINDOWEND
UNDO:
PUSH AX
MOV BP,CS ;BP
ASSUME DS:CODE, ES:NOTHING
MOV DS,BP
MOV ES,VIDEO
MOV BH,DL
MOVE3:
@PLACEMENT AX,SI,CX
ADD SI,CX
ADD AX,160
DEC BH
JNZ MOVE3
POP AX
WINDOWEND:
ASSUME DS:CODE, ES:CODE
MOV DS,BP
MOV ES,BP
POP BP
POP CX
RET
WINDOW ENDP
;
KEYBORDFLAG PROC
PUSH DI
ASSUME DS:NOTHING
MOV DS,RAMBIOS
MOV DI,KBFLAG
MOV AL,[DI]
PUSH AX
ASSUME DS:CODE
MOV AX,CS
MOV DS,AX
POP AX
POP DI
RET
KEYBORDFLAG ENDP
;
OUTPUT PROC
MOV AX,CS
ASSUME ES:CODE, DS:NOTHING
MOV ES,AX
MOV DS,VIDEO
@COMPARE <OFFSET TIME_OLD>,TEXTPOS,16
CMP CX,0
JE O1
@PLACEMENT <OFFSET TEXT>,TEXTPOS,16
O1:
ASSUME DS:CODE
MOV DS,AX
@PLACEMENT <OFFSET TIME_OLD>,<OFFSET TIME_NEW>,16
ASSUME ES:NOTHING
MOV ES,VIDEO
@PLACEMENT TEXTPOS,<OFFSET TIME_NEW>,16
ASSUME ES:CODE
MOV ES,AX
RET
OUTPUT ENDP
;
KEY PROC
CALL KEYBORDFLAG
TEST AL,00000001B
JZ KEY0
TEST AL,00001000B
JZ KEY0
TEST AL,00000010B
JNZ KEY1
TEST AL,00000100B
JZ KEY0
JMP KEY2
KEY0:
MOV AX,0
JMP ENDKEY
KEY1:
MOV AX,1
JMP ENDKEY
KEY2:
MOV AX,2
ENDKEY:
RET
KEY ENDP
;
TON PROC
MOV AL,182
OUT 43H,AL
CMP DX,1
JNE TO2
MOV AX,6833
JMP TO3
TO2:
MOV AX,3416
TO3:
OUT 42H,AL
MOV AL,AH
OUT 42H,AL
IN AL,61H
MOV AH,AL
OR AL,00000011B
OUT 61H,AL
MOV AL,AH
RET
TON ENDP
;
TONOFF PROC
PUSH DX
PUSH AX
MOV AX,050AH
MOV BX,0926H
CMP DX,1
JNE TA1
MOV SI,OFFSET WINDOW3
JMP TA2
TA1:
MOV SI,OFFSET WINDOW4
TA2:
MOV DI,OFFSET WINDOW5
MOV DX,1
CALL WINDOW
TA3:
@CHARIN
CMP AX,011BH
JNE TA3
MOV AX,050AH
MOV BX,0926H
MOV SI,OFFSET WINDOW5
MOV DX,0
CALL WINDOW
POP AX
OUT 61H,AL
POP DX
RET
TONOFF ENDP
;
CLOCKSTR PROC
MOV BP,OFFSET TIME_NEW
MOV DI,0
SHOURS:
MOV DL,HOUR
TIMESTRING:
MOV DH,0
MOV AX,0
MOV AL,DL
MOV bL,10
DIV BL
PUSH AX
ADD AL,48
MOV AH,COLOR
MOV DS:[BP+DI],AX
ADD DI,2
POP AX
MOV AL,AH
ADD AL,48
MOV AH,COLOR
MOV DS:[BP+DI],AX
ADD DI,2
CMP DI,10
JA ENDCALL
MOV AL,58
MOV AH,COLOR
MOV DS:[BP+DI],AX
ADD DI,2
CMP DI,6
JA SSECONDS
MINUTE:
MOV DL,MIN
JMP TIMESTRING
SSECONDS:
MOV DL,SECOND
JMP TIMESTRING
ENDCALL:
RET
CLOCKSTR ENDP
;
RINGER PROC
CMP BELL,1
JNE W1
JMP BELLEND
W1:
MOV BELL,1
MOV AL,20H
OUT 20H,AL
MOV AX,050AH
MOV BX,01232H
MOV SI,OFFSET WINDOW1
MOV DI,OFFSET WINDOW2
MOV DX,1
CALL WINDOW
CALL ALWINDOW
CALL ALSET
MOV AX,050AH
MOV BX,01232H
MOV SI,OFFSET WINDOW2
MOV DX,0
CALL WINDOW
W2:
MOV BELL,0
BELLEND:
RET
RINGER ENDP
;
TIME PROC
MOV AL,[TEXT+1]
MOV COLOR,AL
MOV AH,0
INT 1AH
T_HOURS:
MOV AX,DX
MOV DX,CX
DIV SEC_H
MOV HOUR,AL
MOV BL,13
MUL BL
MOV BL,10
DIV BL
MOV SEC_DIF,AL
MOV AX,DX
MOV DX,0
T_MINUTES:
DIV SEC_M
MOV MIN,AL
MOV BL,47
DIV BL
ADD SEC_DIF,AL
MOV AX,DX
MOV DX,0
T_SECONDS:
MOV BX,10
MUL BX
DIV TIMET
MOV SECOND,AL
MOV AL,SEC_DIF
CMP AL,SECOND
JBE CORRECTION
CMP MIN,0
JNE Z1
CMP HOUR,0
JNE Z0
MOV HOUR,24
Z0:
DEC HOUR
MOV MIN,60
Z1:
DEC MIN
CMP SECOND,0
JE Z2
SUB AL,SECOND
Z2:
MOV SECOND,60
CORRECTION:
SUB SECOND,AL
RET
TIME ENDP
;
PROGCODE:
@PUSH
STI
ASSUME DS:CODE
MOV AX,CS
MOV DS,AX
CALL PARAM
CMP AX,1
JE I0
INT 20H
I0:
CALL INSTALL
@POP
MOV DX,OFFSET PROGCODE
INT 27H
;
CLT PROC
MOV AX,0
MOV CX,0
MOV DI,0
MOV BL,CS:[080H+DI]
MOV CL,BH
MOV DI,CX
MOV CL,BL
NEXT:
INC DI
CMP CX,DI
JB STOP
MOV DH,CS:[080H+DI]
CMP DH,32
JE COMP
CMP DH,44
JE COMP
CMP AX,0
JNE NEXT
ADD AX,080H
ADD AX,DI
JMP NEXT
COMP:
CMP AX,0
JE NEXT
STOP:
MOV BX,DI
DEC DI
ADD DI,080H
SUB DI,AX
MOV CX,DI
MOV BH,CL
INC BH
RET
CLT ENDP
;
INSTALL PROC
MOV AH,15
INT 10H
CMP AL,2
JE MONO
CMP AL,7
JE MONO
MOV VIDEO,0B800H
JMP I1
MONO:
MOV VIDEO,0B000H
I1:
@GET_VEC 1CH
MOV WORD PTR INT1CH,DX
MOV WORD PTR INT1CH+2,ES
MOV DX,OFFSET INT_1C
MOV AX,DS
MOV ES,AX
@PUT_VEC 1CH
MOV DX,OFFSET OUT1
MOV AH,9
INT 21H
RET
INSTALL ENDP
;
PARAM PROC
MOV BH,0
CALL CLT
MOV CL,0
MOV DX,0
CMP AX,0
JE PARAMETER
CMP BH,2
JA ERROR
MOV DI,AX
P1:
MOV AL,CS:[DI]
CMP AL,'?'
JE HELP
CMP AL,48
JB ERROR
CMP AL,57
JA ERROR
SUB AL,48
CMP CL,0
JNE P2

INC DI
INC CL
CMP CL,BH
JAE P3
MOV DL,AL
JMP P1
P2:
MOV DH,AL
MOV AL,DL
MOV BL,10
MUL BL
ADD AL,DH
CMP AL,72
JA ERROR
P3:
ADD AL,AL
MOV TEXTPOS,AX
JMP PARAMETER
HELP:
MOV DX,OFFSET OUT2
JMP OUTS
ERROR:
MOV DX,OFFSET OUT3
OUTS:
MOV AH,9
INT 21H
MOV AX,0
JMP ENDPARAM
PARAMETER:
MOV AX,1
ENDPARAM:
RET
PARAM ENDP
;
;******************************
;* *
;*Data segment of installation*
;* *
;******************************

OUT1 DB 10,13,' CLOCK V 1.0 '
DB ' ',10,10,13
DB 'The clock will activate and deactivate',10,13
DB 'with [Alt+ShiftL+ShiftR]. ',10,13
DB 'The program has succesfully ',10,13
DB 'installed. ',10,10,13,'$'
OUT2 DB 10,13,' CLOCK V 1.0 ',10,10,13
DB 'The program will display '
DB ' in the upper corner of your screen , ',10,13
DB 'a clock in the format of HH:MM:SS .',10,13
DB 'The position of clock is determined '
DB 'through input parameter. ',10,13
DB 'This parameter is valid '
DB 'between 0 and 72 ,the number of columns.',10,13
DB 'In the case of an illegal input an '
DB 'error message will be displayed.',10,13
DB 'Syntax of the program is : ',10,10,13
DB 'CLOCK [?] | [POS]',10,10,13
DB 'After calling the ',10,13
DB 'program ,it will be memory resident.',10,13
DB 'The clock will appear ',10,13
DB 'and disappear with ',10,13
DB 'pressing [Alt+ShiftL+ShiftR] together.',10,13
DB 'With the key combinations of ',10,13
DB '[Alt+Ctrl+ShiftR] ,a window will be ',10,13
DB 'displayed for setting the two ',10,13
DB 'alarm times.',10,13
DB 'With pressing the Esc key , ',10,13
DB 'you can turn off the alarm. ',10,10,13,'$'
OUT3 DB 10,10,13,' CLOCK V 1.0 ',10,13
DB 10,'Error ! ',7,'Wrong parameter .'
DB 10,13,'You must enter a number ',10,13
DB 'between 0 and 72 .',10,13,'$'
;******************************
;* *
;* End of data segment *
;* *
;******************************

CODE ENDS


این کد دومی هم مقیم در حافظه هست. امید وارم این کار درسی برای دیگران باشه که بیشتر کتاب اعلام کنند تا......

linux
شنبه 15 فروردین 1383, 00:11 صبح
اَهههههههههههههههههههه!
این همه کد برای یه ساعت!
بی خیال!