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

📄 11.asm

📁 利用软件延时实现100ms的延时
💻 ASM
字号:
DIS  MACRO  LOCAT,CODE   ;设置图形显示宏定义
      PUSH  DX
      PUSH  BX
      PUSH  AX
      MOV  DX,LOCAT        ;设置光标位置
      MOV  BH,00
      MOV  AH,02H
      INT  10H
      MOV  DL,CODE        ;输出字符串
      MOV  AH,02H
      INT  21H
      POP  AX
      POP  BX
      POP  DX
       ENDM
 
DAT  SEGMENT          ;设置数据段
BUF  DB  'KEY PRESS||I=INPUT  S=START  R=RESET  E=END  C=CONTINUE $'   ;设置功能说明
BUFFER  DB  10 DUP(?)            ;定义缓存区
TIP  DB 'M E M O R Y$'              ;定义记忆提示
NUM  DB  1                     
LOD  EQU  0929H
DAT  ENDS
COD  SEGMENT                 ;定义代码段
START  PROC  FAR
ASSUME  CS:COD,DS:DAT       
MOV  AX,DAT
MOV  DS,AX
MOV  DX,OFFSET  BUF          ;输出功能说明
MOV  AH,09H
INT  21H
CALL  DISMER                  ;记忆区提示符置光标
MOV  DX,OFFSET  TIP           ;输出记忆提示字符
MOV  AH,09H
INT  21H
CALL  CLR             ;图形区清屏并设置颜色
CALL  CLRDAT          ;秒表数字区清屏并设置颜色
CALL  CLRMER          ; 记忆区清屏并设置颜色
DIS  0419H,'<'            ;通过宏调用显示图形
DIS  0517H,'<'
DIS  0715H,'<'
DIS  0914H,'<'
DIS  0B14H,'<'
DIS  060EH,'_'
DIS  0710H,'_'
DIS  0812H,'_'
DIS  0913H,'_'
DIS  0A14H,'_'
DIS  0915H,'_'
DIS  0816H,'_'
DIS  0718H,'_'
DIS  061AH,'_'
DIS  071CH,'*'
DIS  081EH,'*'
DIS  091FH,'*'
DIS  0B20H,'*'
DIS  0D21H,'*'
DIS  0F21H,'*'
DIS  1120H,'*'
DIS  131FH,'*'
DIS  141EH,'*'
DIS  151DH,'*'
DIS  161BH,'*'
DIS  1719H,'*'
DIS  1717H,'_'
DIS  1616H,'_'
DIS  1514H,'_'
DIS  1612H,'_'
DIS  1711H,'_'
DIS  170EH,'*'
DIS  160CH,'*'
DIS  150BH,'*'
DIS  140AH,'*'    
DIS  1309H,'*'
DIS  1108H,'*'
DIS  0F07H,'*'
DIS  0D07H,'*'
DIS  0B08H,'*'
DIS  0909H,'*'
DIS  080AH,'*'
DIS  070CH,'*'
DIS  0C12H,'_'
DIS  0C13H,'_'
DIS  0C14H,'_'
DIS  0C15H,'_'
DIS  0C16H,'_'
CALL  GO                        ;设置初植
LOAD:  CALL  IOSET                 ;光标定位
CALL  HALT                         ;等待输入
MOV  DX,0
MOV  CH,0
AGAIN:                                  
 CALL  TIME                          ;调用延时程序 
MOV  AL,DL                           ;百分之一秒加一
ADD  AL,1
DAA
JC  NEXT1                              ;满一百进位
MOV   DL,AL
JMP  DISPY                             ;不满一百显示
NEXT1:  MOV  DL,0
MOV  AL,DH                           ;秒位加一
ADD  AL,1
DAA
MOV  DH,AL
CMP  AL,60H                             
JNE  DISPY
CALL  BELL                              ;满60提示铃声并进位
MOV  DH,0
MOV  AL,CH                               ;分位加一
ADD  AL,1
DAA
MOV  CH,AL
CMP  AL,60H
JNE  DISPY                                      ;满60清零
MOV  CH,0
DISPY:                          ;显示电子秒表
MOV  BX,OFFSET  BUFFER        ;取缓冲区地址     
MOV  AL,CH
CALL  TRAN                       ;将分位转变为ASCII码并送缓冲区
INC  BX
INC  BX
MOV  AL,DH                      ;将秒位转变为ASCII码并送缓冲区
CALL  TRAN
INC  BX
INC  BX
MOV  AL,DL                      ;将百分之一秒位转变为ASCII码并送缓冲区
CALL  TRAN
PUSH  BX
PUSH  CX
PUSH  DX
CALL  IOSET                     ;光标置位
MOV  DX,OFFSET  BUFFER       ;输出缓冲区字符串
MOV  AH,09H
INT  21H
POP  DX
POP  CX
POP  BX
MOV  AH,0BH                     ;等待键盘输入
INT  21H
AND  AL,AL
JZ  AGAIN
MOV  AH,08H
INT  21H
CMP  AL,'R'                        ;判断输入是否为R
JNE  NEXT2                        ;不是则判断是否为E
CALL  MEMORY                    ;若是则调用记忆功能保存当前值
MOV  CH,0                          ;初值清零重新计数
MOV  DL,0
MOV  DH,0
JMP  AGAIN
NEXT2:
CMP  AL,'E'                        ;判断是否为E 
JNE  AGAIN                        ;不是则继续计数
NEXT3:                            ;若是则暂停计数
MOV  AH,08H
INT  21H
CMP  AL,'C'                         ;判断是否输入C
JE  AGAIN                          ;若是则继续计数
CMP  AL,'R'                         ;判断是否输入R
JNE  NEXT3                         ;若不是则继续等待输入
CALL MEMORY                      ;若是则调用记忆功能
CALL  GO                           ;重新设置初值等待重新启动
CALL  IOSET
MOV  DX,OFFSET  BUFFER
MOV  AH,09H
INT  21H
JMP  LOAD
RET
START  ENDP
GO  PROC                    ;设置初值子程序
MOV  BX,OFFSET  BUFFER
MOV  AL,'0'
MOV  [BX],AL
INC  BX
MOV  AL,'0'
MOV  [BX],AL
INC  BX
MOV  AL,':'
MOV  [BX],AL
INC  BX
MOV  AL,'0'
MOV  [BX],AL
INC  BX
MOV  AL,'0'
MOV  [BX],AL
INC  BX
MOV  AL,':'
MOV  [BX],AL
INC  BX
MOV  AL,'0'
MOV  [BX],AL
INC  BX
MOV  AL,'0'
MOV  [BX],AL
INC  BX
MOV  AL,'$'
MOV  [BX],AL
RET
GO  ENDP
IOSET  PROC
MOV  DX,0F10H
MOV  BH,00
MOV  AH,02H
INT  10H
RET
IOSET   ENDP
HALT  PROC
MOV  AH,08H
INT  21H
CMP  AL,'S'
JNE  HALT
RET
HALT  ENDP
TRAN  PROC                       ;十六进制转ASCII码子程序
MOV  CL,AL
SHR  AL,1
SHR  AL,1
SHR  AL,1
SHR  AL,1
OR  AL,30H
MOV  [BX],AL
INC  BX
MOV  AL,CL
AND  AL,0FH
OR  AL,30H
MOV  [BX],AL
RET
TRAN  ENDP
TIME  PROC                    ;延时子程序
PUSH  CX
PUSH  AX
MOV  AX,0EFH
MOV  CX,0FFFFH
A1:
DEC  AX
JNZ  A2
JMP  A3
A2:
DEC  CX
JNZ  A2
JMP  A1
A3:
POP  AX
POP  CX
RET
TIME  ENDP
MEMORY   PROC                     ;记忆功能子程序
PUSH  DX
PUSH  BX
PUSH  AX
CMP  NUM,10
JE  X2
ADD  NUM,1
X1:
MOV  DX,LOD
ADD  DH,NUM
MOV  BH,00
MOV  AH,02H
INT  10H
MOV  DX,OFFSET  BUFFER
MOV  AH,09H
INT  21H
POP  AX
POP  BX
POP  DX
RET
X2: CALL  CLRMER
MOV  NUM,1
JMP  X1
MEMORY  ENDP
CLR  PROC                        ;图形区清屏并设置颜色子程序
MOV  AH,06H
MOV  AL,14H
MOV  CX,0401H
MOV  DX,1721H
MOV  BH,0CH
INT  10H
RET
CLR  ENDP
CLRDAT  PROC                      ;数据区清屏并设置颜色子程序
MOV  AH,6
MOV  AL,1
MOV  CX,0F10H
MOV  DX,0F18H
MOV  BH,0BH
INT 10H
RET
CLRDAT  ENDP
CLRMER  PROC                         ;记忆区清屏并设置颜色子程序
PUSH  AX
PUSH  BX
PUSH  CX
PUSH  DX
MOV  AH,6
MOV  AL,11
MOV  CX,0929H
MOV  DX,0F32H
MOV  BH,0DH
INT  10H
POP  DX
POP  CX
POP  BX
POP  AX
RET
CLRMER  ENDP
DISMER   PROC                         ;记忆提示显示子程序
MOV  AH,02H
MOV  BH,00
MOV  DX,0728H
INT 10H
RET
DISMER  ENDP
BELL  PROC                            ;满分钟提示音设置子程序
PUSH  AX
PUSH  DX
MOV  AL,07H
MOV  DL,AL
MOV  AH,02H
INT  21H
POP  DX
POP  AX
RET
BELL  ENDP
COD  ENDS                          ;结束代码段
END  START                         ;结束源程序



⌨️ 快捷键说明

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