汇编语言实现实时时钟显示

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

汇编语言实现实时时钟显示

data segment

msg db 'Current time is: '

hours db ?,?

db ':'

minutes db ?,?

db ':'

seconds db ?,?,0

oldint1c dd ? ;旧的入口参数

position dw 0 ;时间显示位置

color db 07h

data ends

code segment ;代码段

assume cs:code,ds:code

start:

mov ax,data

mov ds,ax

jmp run

newint1c: push ax

push bx

push cx

push dx

push si

push di

push es

mov ax,data

mov ds,ax

mov ax,0200h ;获取系统时间,ch→hours cl→minutes DH→seconds,均为BCD码格式

int 1ah ;时钟服务

mov al,ch

lea si,hours ;时

call BCD

mov al,cl

lea si,minutes ;分

call BCD

mov al,dh

lea si,seconds ;秒

call BCD

mov ax,0b800h ;显存地址,采用直接写显存的方法输出字符

mov es,ax ;es:di 指向显存地址

lea si,position ;设置时间显示位置

mov di,[si]

lea si,msg

disp: mov al,[si]

inc si

or al,al

jz exit

cld

stosb

inc di

jmp disp

exit: pop es

pop di

pop si

pop dx

pop cx

pop bx

pop ax

jmp ds:oldint1c ;执行旧的中断服务程序

BCD proc

push ax ;用于将BCD码转换为ASCII码入口al-BCD码

mov ah,al ;出口

shr ah,1

shr ah,1

shr ah,1

shr ah,1

and al,0fh

add ax,'00' ;加上0的ASCII码

xchg ah,al

mov [si],ax

pop ax

ret

BCD endp

run:

mov ax,data

mov ds,ax

mov ax,351ch ;获取原1ch的入口参数

int 21h

mov word ptr ds:oldint1c,bx ;保存旧的入口参数

mov word ptr ds:oldint1c+2,es

push ds

push cs

pop ds

lea dx,newint1c

mov ax,251ch ;设置新1ch的入口参数

int 21h

pop ds

mov dx,offset run + 10h ;1节=16字节

mov cl,4

shr dx,cl ;相当于除以16以计算节大小

call Control ;调用控制子程序

call flash

mov ah,31h ;结束并驻留, DX:保留的长度(内存大小单位为节)

int 21h

Control proc

push ax

push cx

push bx

call HideCursor ;隐藏光标

xor bx,bx ;置0,时间显示位置

getkey: mov ah,0 ;获取键盘扫描码

int 16h

cmp ax,011bh ;esc-011bh

jz return

cmp ax,4800h ;up-4800h

jz up

cmp ax,5000h ;down-5000h jz down

cmp ax,4b00h ;left-4b00h jz left

cmp ax,4d00h ;right-4d00h jz right

jmp changeColor ;

up: cmp bx,160

jc getkey

sub bx,160

jmp changePos

down: add bx,160

jmp changePos

left: cmp bx,0

jz getkey

sub bx,2

jmp changePos

right: add bx,2

changePos: call flash

mov ds:position , bx

jmp getkey

changeColor:

;sub al,30h

mov ds:color,ah

call flash

jmp getkey

return: pop bx

pop cx

pop ax

ret

Control endp

flash proc

相关文档
最新文档