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

📄 源码.asm

📁 系统时间显示程序 利用BIOS的INT 1AH的2号系统功能调用
💻 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,2        ;2号功能调用,置光标位置
        xor     bh,bh
        MOV     DX,45h
        INT     10H
        MOV     AH,2       ;读取系统时钟  出口参数分别CH:CL:DH    
        INT     1AH             
        PUSH    DX              
        PUSH    CX
        POP     BX
        PUSH    BX
        CALL    SHOWBYTE        ;调用 SHOWBYTE,显示小时  (转换成ASC码输出)
        CALL    SHOWCOLON       ;调用 SHOWCOLON  显示:
        POP     BX
        XCHG    BH,BL           ;数据交换
        CALL    SHOWBYTE        ;  显示分钟  (转换成ASC码输出)
        CALL    SHOWCOLON       ;  显示  :
        POP     BX
        CALL    SHOWBYTE        ;显示秒
        MOV     DX,CS:OLDCUR     ;保存原来光标位置
        MOV     AH,2             ;恢复原光标位置
        XOR     BH,BH
        INT     10H
        POP     DX
        POP     CX
        POP     BX
        POP     AX
        IRET
SHOWBYTE PROC NEAR
        PUSH    BX
        MOV     CL,4     
        MOV     AL,BH
        SHR     AL,CL       ;bx 进栈,高4位放cl中,al 右移4位
        ADD     AL,30H      ;转换成 ASC码
        CALL    SHOW        ;调  SHOW
        CALL    CURMOVE      ;调CURMOVE  (光标后移一个位置)
        POP     BX
        MOV     AL,BH
        AND     AL,0FH      ;与,屏蔽高4位,显示低4位 
        ADD     AL,30H        ;数值转换成ASC码
        CALL    SHOW           ;显示 
        CALL    CURMOVE        ;光标后移
        RET
SHOWBYTE ENDP
 
SHOWCOLON PROC NEAR     ;(:显示)
        MOV     AL,':'  ; : 放入AL中
        CALL    SHOW
        CALL    CURMOVE
        RET
SHOWCOLON ENDP

CURMOVE PROC NEAR        ;光标后移一个位置
        PUSH    AX
        PUSH    BX
        PUSH    CX
        PUSH    DX
        MOV     AH,3  ;INT10 3号功能调用读光标位置
        MOV     BH,0  ;设置显示方式
        INT     10H
        INC     DL     ;加1指令
        MOV     AH,2   ;置光标位置
        INT     10H
        POP     DX
        POP     CX
        POP     BX
        POP     AX     ;出栈
        RET            ;返回
CURMOVE ENDP

SHOW    PROC NEAR      ;显示
        PUSH    AX
        PUSH    BX
        PUSH    CX
        MOV     AH,09H   ;显示字符串
        MOV     BX,2fh   ;INT10 的1号功能调用,显示光标类型字符颜色属性
        MOV     CX,1
        INT     10H
        POP     CX
        POP     BX
        POP     AX
        RET            ;中断返回
SHOW    ENDP


GO:
        PUSH    CS
        POP     DS
        MOV     Ah,35H   ;读取中断向量,出口参数BX
        mov     AL,1CH
        INT     21H          ;段地址放 ES,偏移地址放BX
        MOV     OLD1C,BX     ;保存偏移地址
        MOV     BX,ES        ;保存段地址
        MOV     OLD1C+2,BX
        MOV     DX,OFFSET NEWINT1C
        MOV     Ah,25H    ;设置新的中断向量      ds:dx   al=中断类型号
        MOV     AL,1CH
        INT     21H
        MOV     DX,OFFSET GO      ;定义GO的偏移地址
        SUB     DX,OFFSET START
        MOV     AH,07H   ;键盘接收字符,07号调用无回显
        INT     21H
        CMP     AL,0DH   ;与输入回车比较,相等跳转至clear(清屏)
        JE     CLEAR
        MOV     AX,31H  ;终止并驻留    
        INT     21H    
 clear:
        MOV     AH,0FH    ;取当前显示方式
        INT     10H
        MOV     AH,00H    ;设置显示方式
        INT    10h
        MOV      AH,4CH   ;返回DOS
        INT      21H
        
CODE ENDS
        END START

⌨️ 快捷键说明

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