نمایش نتایج 1 تا 9 از 9

نام تاپیک: ساعت و تاریخ یک سیستم

  1. #1

    ساعت و تاریخ یک سیستم

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

  2. #2
    بد نیست کتاب Pcinterیا Peter Notron Advanced Assembly یا ...... رو بخونی تو اولین مثالهاشون هست. اگر هم میخوای بدون وقت تلف کردن پروژه بولید کنی بد نیست پروژهاتون رو بدیدکس دیگه بنویسه. :lol: :twisted:

  3. #3
    بد نیست کتاب Pcinterیا Peter Norton Advanced Assembly یا ...... رو بخونی تو اولین مثالهاشون هست. اگر هم میخوای بدون وقت تلف کردن پروژه تولید کنی بد نیست پروژهاتون رو بدیدکس دیگه بنویسه. :lol: :twisted:

  4. #4
    راستی مقیم در حافظه میخوای یا ...؟

  5. #5
    مقیم در حافظه یا ... یعنی چی؟یعنی ساعتی که در حافظه است.
    در ضمن نیازی نیست بدم کسی بنویسه من خودم می خوام این کارو بکنم چون هم وقتشو دارم و هم دوست دارم خودم یاد بگیرم فقط می خوام که منو یک کمی راهنمایی کنید

  6. #6
    با سلام،

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

  7. #7
    الف. از 2Ah برای گرفتن تاریخ فعلی
    ب. از 2Bh برای تنظیم تاریخ فعلی
    ج. از 2Ch برار گرفتن زمان (ساعت) فعلی
    د. از 2Dh برای تنظیم زمان (ساعت) فعلی

    استفاده کن .
    UNIX is simple. It just takes a genius to understand its simplicity
    -- Dennis Ritchie

  8. #8

    دوست عزیز اینم Source

    دوست عزیز اینم Source ولی من خیلی دوست داشتم که بربد دنبال یاد گیریش تا ...... البته بعصی ها فکر میکنند که ....... البته 2 تا Source میذارم تا کارت راه بیوفته ولی همون طور که گفتم کاری کردم که مجبور بشی باهاشون ور بری تا بتونی اراپه بدی. :oops:

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

    .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;ÛÛÛÛ& amp;Ucirc;ÛÛÛ&Uc irc;ÛÛÛÛ&a mp;Ucirc;ÛÛÛ&Uci rc;ÛÛÛÛ&am p;Ucirc;ÛÛÛ&Ucir c;ÛÛÛÛ&amp ;Ucirc;ÛÛÛ&Ucirc ;ÛÛÛÛ& Ucirc;ÛÛÛÛ ÛÛÛÛ&U circ;ÛÛÛÛ& amp;Ucirc;ÛÛÛ&Uc irc;Û
    ;
    ; External Entry Point
    ;
    ;ÛÛÛÛ& Ucirc;ÛÛÛÛ ÛÛÛÛ&U circ;ÛÛÛÛ& amp;Ucirc;ÛÛÛ&Uc irc;ÛÛÛÛ&a mp;Ucirc;ÛÛÛ&Uci rc;ÛÛÛÛ&am p;Ucirc;ÛÛÛ&Ucir c;ÛÛÛÛ&amp ;Ucirc;ÛÛÛ&Ucirc ;ÛÛÛÛ& Ucirc;ÛÛÛÛ ÛÛÛÛ&U circ;ÛÛÛÛ& amp;Ucirc;ÛÛÛ&Uc irc;Û

    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;ßßßß& amp;szlig;ßßß&sz lig;ßßßß&a mp;szlig;ßßß&szl ig;ßßßß&am p;szlig;ßßß&szli g;ßßßß&amp ;szlig;ßßß&szlig ;ßßßß& szlig;ßßßß ßßßß&s zlig;ßßßß& amp;szlig;ßßß&sz lig;ß
    ; SUBROUTINE
    ;ÜÜÜÜ&Uuml ;ÜÜÜÜ&Uuml ;ÜÜÜÜ&Uuml ;ÜÜÜÜ&Uuml ;ÜÜÜÜ&Uuml ;ÜÜÜÜ&Uuml ;ÜÜÜÜ&Uuml ;ÜÜÜÜ&Uuml ;ÜÜÜÜ&Uuml ;ÜÜÜÜ&Uuml ;ÜÜÜÜ&Uuml ;ÜÜÜÜ&Uuml ;ÜÜÜÜ&Uuml ;ÜÜÜÜ&Uuml ;ÜÜÜÜ

    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;ßßßß& amp;szlig;ßßß&sz lig;ßßßß&a mp;szlig;ßßß&szl ig;ßßßß&am p;szlig;ßßß&szli g;ßßßß&amp ;szlig;ßßß&szlig ;ßßßß& szlig;ßßßß ßßßß&s zlig;ßßßß& amp;szlig;ßßß&sz lig;ß
    ; SUBROUTINE
    ;ÜÜÜÜ&Uuml ;ÜÜÜÜ&Uuml ;ÜÜÜÜ&Uuml ;ÜÜÜÜ&Uuml ;ÜÜÜÜ&Uuml ;ÜÜÜÜ&Uuml ;ÜÜÜÜ&Uuml ;ÜÜÜÜ&Uuml ;ÜÜÜÜ&Uuml ;ÜÜÜÜ&Uuml ;ÜÜÜÜ&Uuml ;ÜÜÜÜ&Uuml ;ÜÜÜÜ&Uuml ;ÜÜÜÜ&Uuml ;ÜÜÜÜ

    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


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

  9. #9
    کاربر دائمی آواتار linux
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    تهران
    پست
    2,313
    اَهههههههههههههههههههه!
    این همه کد برای یه ساعت!
    بی خیال!

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •