汇编语言:以“年/月/日 时:分:秒”的格式,显示当前的日期、时间。

题目:访问cmos ram,用汇编语言编程,以“年/月/日 时:分:秒”的格式,显示当前的日期、时间。

我编写的程序是用直接写显存的方式,在屏幕中间显示系统的当前时间。

但是,有两点遗憾:1.这个时间是静态的,即程序访问cmos ram当时的时间,不是动态显示时间。

                                    2.而且,没有清屏的程序,所以,当你显示过后,就会一直显示在屏幕上面。

我以后会改进的。

下面是我运行的结果:


我写的源代码在下面,里面有我的注释:

assume cs:code

code segment  

start:  mov ax,0

        mov al,9

        mov si,0

        mov cx,6    ;这里设置循环次数

s:      push cx

        push ax

        out 70h,al  ;将al送入端口70h

        in al,71h   ;从端口71h处读出单元内容,放在al中 |  ax=00000000 12345678
	;      
  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这是一个比较复杂的任务,需要在不同的硬件平台上使用不同的汇编语言来实现。以下是一个示例程序,使用8086汇编语言,在IBM PC上显示时间: ``` ; 设置DS为0,将数据段指向0段 MOV AX, 0 MOV DS, AX ; 设置CMOS RAM端口 MOV AL, 0x70 OUT 0x70, AL ; 读取份 MOV AL, 0x09 OUT 0x71, AL IN AL, 0x71 MOV BL, AL ; 读取份 MOV AL, 0x08 OUT 0x71, AL IN AL, 0x71 MOV CL, AL ; 读取日期 MOV AL, 0x07 OUT 0x71, AL IN AL, 0x71 MOV DL, AL ; 读取小 MOV AL, 0x04 OUT 0x71, AL IN AL, 0x71 MOV DH, AL ; 读取钟 MOV AL, 0x02 OUT 0x71, AL IN AL, 0x71 MOV AH, AL ; 读取钟 MOV AL, 0x00 OUT 0x71, AL IN AL, 0x71 MOV BH, AL ; 计算星期 MOV AL, DL MOV BL, CL MOV CL, 0 MOV DL, 4 DIV DL ADD AL, 2 MOV DL, 7 DIV DL ; 显示时间 MOV AH, 0x0E MOV BH, 0 MOV BL, 0x07 ; 显示份 MOV AL, BL MOV BL, BH MOV BH, 0 MOV CX, 4 CALL DISPLAY_HEX MOV AL, BL MOV BH, 0 CALL DISPLAY_HEX ; 显示份 MOV AL, CL MOV BH, 0 CALL DISPLAY_HEX ; 显示日期 MOV AL, DL MOV BH, 0 CALL DISPLAY_HEX ; 显示 MOV AL, DH MOV BH, 0 CALL DISPLAY_HEX ; 显示钟 MOV AL, AH MOV BH, 0 CALL DISPLAY_HEX ; 显示钟 MOV AL, BH MOV BH, 0 CALL DISPLAY_HEX ; 显示星期 MOV AH, 0x0E MOV AL, 0x20 INT 0x10 MOV AL, 0x20 INT 0x10 MOV AL, 0x20 INT 0x10 MOV AL, 0x20 INT 0x10 MOV AL, 0x20 INT 0x10 MOV AL, 0x20 INT 0x10 MOV AL, 0x20 INT 0x10 MOV AL, 0x31 ADD AL, DL MOV BH, 0 MOV BL, 0x07 INT 0x10 ; 退出程序 MOV AH, 0x4C INT 0x21 ; 显示十六进制数 DISPLAY_HEX: PUSH AX PUSH BX PUSH CX MOV CX, 4 DISPLAY_HEX_LOOP: ROL AL, 4 MOV BL, AL AND BL, 0x0F CMP BL, 0x0A JL DISPLAY_HEX_CHAR ADD BL, 0x37 JMP DISPLAY_HEX_OUTPUT DISPLAY_HEX_CHAR: ADD BL, 0x30 DISPLAY_HEX_OUTPUT: MOV AH, 0x0E INT 0x10 LOOP DISPLAY_HEX_LOOP POP CX POP BX POP AX RET ``` 注意,这段代码可能需要根据实际情况进行调整,如CMOS RAM端口的地址可能与示例代码不同。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值