⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.asm

📁 汇编显示当前系统时间
💻 ASM
字号:
code    segment
        assume cs:code,ds:code
start:  
        jmp     go
oldcur  dw      ?                         ;   保存的原来的光标的位置  
OLD1C   DW      2 DUP(?)
NEWINT1C:
        PUSHF
        CALL DWORD PTR CS:OLD1C        
        push    Ax
        PUSH    BX
        PUSH    CX
        PUSH    DX                     
        XOR     BH,BH
        MOV     AH,3
        INT     10H                       ;    获取光标位置                             
        MOV     CS:OLDCUR,DX              ;   保存原来的光标位置
        ;定属性   
        mov ah,7                          ;to scroll downward function
        mov al,0                          ;code to blank screen
        mov bh,30h                        ;reverse video attribute
        mov ch,0                          ;upper left row
        mov cl,72                         ;upper right column
        mov dh,0                          ;lower right row
        mov dl,72                         ;lower left column
        int 10h                           ;call video ROM
       ;定位
        mov ch,0
        mov cl,79
        mov ah,01h                       ;置光标起始和结束行
        INT 10H
        mov dh,24
        mov dl,79
        mov bh,0
        mov ah,02h
        int 10h
        ;locate cursor
        mov dx,68
        mov ah,2                         ;to locate column
        int 10h                          ;call video BIOS
        MOV     AH,2
        xor     bh,bh
        MOV     DX,72
        INT     10H
        MOV     AH,2
        INT     1AH                       ;   读取系统时间   CH:CL:DH     hh:mm:ss      
        PUSH    DX              
        PUSH    CX
        POP     BX                        ;   CX(hh:mm)   ->   BX 
        PUSH    BX
        CALL    SHOWBYTE                  ;   显示   bh,   即显示   hh  
        CALL    SHOWCOLON                 ;   显示   ':'   分隔符号  
        POP     BX                        ;   保存的   hh:mm 
        XCHG    BH,BL                     ;   mm   ->   BH 
        CALL    SHOWBYTE                  ;   显示   bh,   即   mm 
        CALL    SHOWCOLON                 ;   显示   ':'   分隔符号
        POP     BX                        ;   保存的   DX   ->   BX,   bh=ss   
        CALL    SHOWBYTE                  ;   显示   ss   
        MOV     DX,CS:OLDCUR              ;   保存的原来的光标位置  
        MOV     AH,2                      ;   恢复原来的光标位置
        XOR     BH,BH
        INT     10H
        
        POP     DX
        POP     CX
        POP     BX
        POP     AX
        IRET                              ;   中断返回 
        
                                          ;   下面的子程显示   bh   中的值                 
SHOWBYTE PROC NEAR                
        PUSH    BX                                    
        MOV     CL,4
        MOV     AL,BH
        SHR     AL,CL                     ;    高   4   位的内容 
        ADD     AL,30H                    ;    数值转换为字符 
        CALL    SHOW                      ;    显示高   4   位的字符 
        CALL    CURMOVE                   ;    光标后移一个位置 
        POP     BX
        MOV     AL,BH
        AND     AL,0FH                    ;    低   4   位
        ADD     AL,30H                    ;    数值   ->   字符 
        CALL    SHOW                      ;    显示低   4   位的字符
        CALL    CURMOVE                   ;    光标后移一个位置   
        RET
SHOWBYTE ENDP

                                          ;    下面的子程将光标向后移动一个位置
CURMOVE PROC NEAR
        PUSH    AX
        PUSH    BX
        PUSH    CX
        PUSH    DX
        MOV     AH,3
        MOV     BH,0
        INT     10H                       ;     读光标位置 
        INC     DL                        ;     向后移动一个位置
        MOV     AH,2
        INT     10H                       ;     重新设置光标的位置 
        POP     DX
        POP     CX
        POP     BX
        POP     AX
        RET
CURMOVE ENDP

                                           ;     下面的子程显示字符 ':',  它是hh:mm:ss 间的分隔符号
SHOWCOLON PROC NEAR                        ;     此子程独立出来 
        MOV     AL,':'                     
        CALL    SHOW                       ;     显示   ':'
        CALL    curmove                    ;     光标后移一个位置
        RET
SHOWCOLON ENDP


                                           ;    下面的子程在当前光标位置处以 属性显示AL中的字符
SHOW    PROC NEAR
        PUSH    AX
        PUSH    BX
        PUSH    CX
        MOV     AH,09H                     ;     显示属性字符 
        MOV     BX,30H                  ;     字符的属性(颜色和背景色)
        MOV     CX,1                       ;     显示字符的重复数,   只显示一个
        INT     10H                        ;     在光标位置显示字符及其属性 
        POP     CX
        POP     BX
        POP     AX
        RET
SHOW    ENDP

EXIT:
        MOV     AH,4CH
        INT     21H

GO:
        PUSH    CS
        POP     DS
        MOV     AH,35H                      ;     取中断向量的功能调用
        MOV     AL,1CH
        INT     21H                         ;     段地址放es,偏移地址放bx
        MOV     OLD1C,BX                    ;     保存偏移地址
        MOV     BX,ES                       ;     保存段地址
        MOV     OLD1C+2,BX
        MOV     DX,OFFSET NEWINT1C          ;     反编中断例行程序偏移地址放dx
        MOV     AH,25H                      ;     设置中断向量功能调用 
        MOV     AL,1CH
        INT     21H                         ;     改中断向量 
        MOV     DX,OFFSET GO
        SUB     DX,OFFSET START
        MOV     CL,4
        SHR     DX,CL
        ADD     DX,11H
        MOV     AH,01H                      ;     键盘单个字符输入
        INT     21H
        CMP     Al,0Dh                      ;     输入是回车则退出程序返回DOS
        JE      EXIT  
        MOV     AX,3100H
        INT     21H                         ;     结束并驻留 
                                     
CODE ENDS
        END START

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -