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

📄 clock.asm

📁 本程序为调用系统时钟设计的一个汇编语言写的时钟程序
💻 ASM
字号:
;余彪  计算机2班   25号
DATA SEGMENT
     BUF DB 'the  time  is  :','$'            ;设置提示文字
     TBUF DB 10 DUP(?)                     ;设置存放余数的缓冲区
DATA ENDS
CODE SEGMENT
     ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
       MOV DS,AX
       CALL CLRSCR                         ;清屏
       MOV AH,2                            ;输出缓冲区的文字
       SUB BH,BH
       MOV DX,081CH
       INT 10H
       MOV DX,OFFSET BUF                   ;DOS9号调用输出文字
       MOV AH,9
       INT 21H
LOP	: CALL SETCURS                        ;主程序,设置光标位置,输出时间
       MOV AH,2CH                          ;调用系统时间
       INT 21H
       PUSH DX                             ;DX中的时间秒和百分秒入栈
       MOV DL,CH
       MOV DH,0
       CALL BIN10OUT                       ;调用二进制转十进制输出时间小时
       MOV DL,':'
       MOV AH,2
       INT 21H
       MOV DL,CL
       MOV DH,0
       CALL BIN10OUT                       ;输出时间分钟
       MOV DL,':'
       MOV AH,2
       INT 21H
       POP DX                              ;秒和百分秒出栈
       MOV DL,DH
       MOV DH,0
       CALL BIN10OUT                       ;输出时间秒
       MOV AH,0BH                          ;调用0BH号中断,若有输入字符,则退出程序
       INT 21H
       CMP AL,0FFH  
       JNZ LOP                           ;循环输出每个当前时间
       MOV AH,4CH
       INT 21H
CLRSCR PROC                                ;清屏子程序
       PUSH AX
       PUSH BX
       MOV AX,0600H                        ;AL=0整个窗口空白
       MOV BH,0FH
       SUB CX,CX                           ;左上角行号,列号
       MOV DX,184FH                        ;右下角行号,列号
       INT 10H
       POP BX
       POP AX
       RET
CLRSCR ENDP    
SETCURS PROC                               ;设置光标位置              
        PUSH AX
        PUSH BX
        PUSH DX
        MOV AH,2                           ;调用BIOS2号中断
        SUB BH,BH                          
        MOV DX,0A24H                       ;在第0页中定位
        INT 10H
        POP DX
        POP BX
        POP AX
        RET
SETCURS ENDP           
BIN10OUT PROC                              ;二进制转十进制ASCUII码输出子程序             
         PUSH DI
         PUSH DX
         PUSH CX
         PUSH AX
         MOV CX,0
         LEA DI,TBUF                       ;去缓冲区首地址
BIN1: PUSH CX
      MOV AX,DX
      MOV DX,0
      MOV CX,10
      DIV CX                               ;AX内容除以DX内容,商在AX,余数在DX
      XCHG AX,DX                           ;交换AX,DX的内容
      ADD AL,30H                           ;余数加30H,入栈准备输出
      MOV [DI],AL
      INC DI
      POP CX
      INC CX                               ;累加每调用一次要输出的位数
      CMP DX,0                             ;商和0比较
      JNZ BIN1                             ;不等于0转BIN1
      CMP CX,1                             ;累加器和1比较
      JNZ BIN2                             ;不等于1转BIN2                             
      MOV AH,2                             ;等于1位,先在改位前输出0
      MOV DL,'0'
      INT 21H
BIN2: DEC DI                               ;等于0输出十进制数的各位
      MOV AL,[DI]
      CALL STDOUT
      LOOP BIN2
      POP AX                               ;恢复现场
      POP CX
      POP DX
      POP DI
      RET
BIN10OUT ENDP
STDOUT PROC                                ;标准输出子程序
       PUSH DX
       MOV DL,AL
       MOV AH,2
       INT 21H
       POP DX
       RET
STDOUT ENDP                                
CODE ENDS
     END START

⌨️ 快捷键说明

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