汇编语言 -- 计时器/倒计时

本兜才不会答非所问,上纯干(代)货(码)!
摘要由CSDN通过智能技术生成

前言

  • 时间:12.1
  • 内容:汇编语言课程设计附加题
  • 备注:
    • 计时器是某位大佬的(或者书上),但是我真的找不到这位大佬(或者书),如有见到比较像的请帮我蟹蟹他!!
    • 正所谓病急乱投医,这看起来人畜无害的附加题完全没有她看起来这么平平无奇好不好!!网上现有的资源为什么都答非所问,或者只是本兜兜最近菜吃多了变得更菜了,只能嫖无数资源一个个试。试成功了下方这个计时器,倒计时仅更改了计算时间部分,不用整串操作太香了!!
    • 话说.asm格式应该用什么代码块发布呢?没有高亮的代码能逼死小白菜…

题目

  • 设计一款倒计时,倒计时时间由用户设定(如30分钟)。
    时间到有提示(如时间背景、前景色变化或文本提示等)。
  • 打脸来的太快,发现这次课设很多都没有读题按要求来,凑合吧就…

流程图

在这里插入图片描述

计时器

DATAS SEGMENT
    SINPUT DB 'Please enter hours, minutes, and seconds with spaces: $' 
    SOUTPUT DB 'Any key to again and ESC to return. Now time is : $' 
    BUF1 DB 20H
    	 DB  0
    	 DB 20H DUP(0)
    TIMEHOUR DW 23
    TIMEMINUTE DW 56
    TIMESECOND DW 45
    NUM DW ?
DATAS ENDS

STACKS SEGMENT PARA STACK
   DW 30H DUP(0)
STACKS ENDS

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
	
	MOV AL,11111101B;关定时器中断
	OUT 21H,AL;中断屏蔽寄存器数据传回去
	
	PUSH DS;保存数据段地址
	MOV AX,SEG INT08H;SEG取得标号的段地址
	MOV DS,AX;获得08H号中断的段地址,放在中断向量中
	MOV DX, OFFSET INT08H;获得08H号中断的偏移地址,放在中断向量中
	MOV AL,08H;设置中断号
	MOV AH,25h;设置中断向量
	int 21h;调用系统dos中断
	POP DS;恢复数据段地址
	
	MOV AL,00110110B;设置通道0的方式3
	OUT 43H,AL;输出控制字,43H是8253定时器芯片的控制寄存器地址
	MOV AX,11932;定时器的时钟频率为1.1931817MHz,计数初值=1193182/10010ms中断一次
	OUT 40H,AL;40H为计数器地址
	MOV AL,AH;先输出低位,再输出高位
	OUT 40H,AL;40H为计数器地址
TIMING:
	;换行
	MOV DL,0DH;CR
 	MOV AH,2;显示一个字符
 	INT 21H;调用系统dos中断
 	MOV DL,0AH;LF
 	MOV AH,2;显示一个字符
 	INT 21H;调用系统dos中断
 	
    MOV AH,09H;显示字符串
    LEA DX,SINPUT;取段内偏移地址
    INT 21H;调用系统dos中断
   
    MOV AH,0AH;键盘输入到缓冲区
    LEA DX,BUF1;取段内偏移地址
    INT 21H;调用系统dos中断
    CALL INPUTTIME;调用子程序处理字符串
    
    MOV AH,09H;显示字符串
    LEA DX,SOUTPUT;取段内偏移地址
    INT 21H;调用系统dos中断
    
    MOV DX,100;初始化为0
    MOV AL,11111100B;开键盘和定时器中断
	OUT 21H,AL;中断屏蔽寄存器数据传回去

RE:    
    MOV AH,08H;无回显键盘输入到AL
    INT 21H;调用系统dos中断
    ;MOV AH,0;
    ;MOV NUM,AX;
    
    ;MOV AH,03H;获取光标位置信息
	;INT 10H;BIOS中断
	;ADD DL,10;
	;MOV BH,0;显示到第一页
	;MOV AH,02H;设置光标位置
	;INT 10H;BIOS中断
    ;CALL SHOWNUM
    CMP AL,27;按键是否ESC
    JE DO_ESC;是退出 
    CMP AL,252;按键是否是奇怪的那个字符
    JE RE;是奇怪的,循环
    
    ;MOV AH,0BH;检测键盘状态,有输入AL=00,无输入AL=FF
    ;INT 21H;调用系统dos中断
    ;CMP AL,0FFH;判断按键无输入
    ;JE RE;确实无输入,重复
 
    MOV AL,11111101B;关定时器中断
	OUT 21H,AL;中断屏蔽寄存器数据传回去
    JMP TIMING;不是就重新对时
DO_ESC:
	MOV AL,11111101B;关定时器中断
	OUT 21H,AL;中断屏蔽寄存器数据传回去
    ;退出代码
    MOV AH,4CH
    INT 21H
    
;这是一段子程序,用来输入数字
INPUTTIME PROC 
	;初始化
	MOV DX,0
	MOV BX,
  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
汇编语言定时器时钟程序的主要实现步骤如下: 1. 初始化:首先需要在程序中定义一个计数器,用于记录时钟的过去时间。可以使用寄存器或者内存变量来存储计数器的值。然后需要设置一个新的计时器中断,通过将计数器与中断触发阈值进行比较来实现时钟计时。 2. 配置中断向量表:在汇编语言程序中,需要配置中断向量表。中断向量表是一个包含中断处理程序入口地址的数据结构。可以通过修改中断向量表中的指针,将定时器中断与自定义的时钟处理程序连接起来。 3. 设置计时器参数:需要设置计时器的频率和定时时间。计时器的频率决定了计时器的中断触发速率,而定时时间决定了时钟显示的精度。可以通过写入特定的值到计时器的控制寄存器来配置这些参数。 4. 编写中断处理程序:中断处理程序是一个能够在计时器中断触发时被调用的子程序。在中断处理程序中,需要更新计数器的值,并且将计数器的值转换成时钟显示格式(例如:HH:MM:SS)。 5. 链接和运行程序:最后,将汇编语言代码编译成可执行文件,并进行链接和运行。在程序运行期间,计时器将以设定的频率触发中断,并通过中断处理程序来更新时钟的显示。 通过以上步骤,就可以实现一个简单的汇编语言定时器时钟程序。可以根据需要对程序进行更复杂的功能和优化,例如添加闹钟功能、调整时钟显示格式等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值