实验14:访问CMOS RAM显示当前日期和时间

来源:互联网 发布:阿里 编辑:程序博客网 时间:2024/06/05 14:46

下面的代码实现的功能是实时的显示时间,显示的效果就如同一个电子时钟,这个代码来自于“网易云课堂”讲汇编的一位老师(从0开始,讲的非常的好),这段代码老师写的太好了,贴在下面学习效仿一下:

assume cs:code, ds:data, ss:stackdata segmentdb 128 dup(0)data endsstack segment stackdb 128 dup(0)stack endscode segmentTIME_STYLEdb 'YY/MM/DD HH:MM:SS', 0TIME_CMOSdb 9,8,7,4,2,0start:mov ax, stackmov ss, axmov sp, 128call init_regcall show_clockmov ax, 4c00hint 21h;----------------------------show_clock:call show_time_styleshowTime:mov si, OFFSET TIME_CMOSmov di, 160*10+30*2mov cx, 6showDate:mov al, ds:[si]out 70h, alin al, 71hmov ah, alshr ah, 1shr ah, 1shr ah, 1shr ah, 1and al, 00001111badd ah, 30hadd al, 30hmov es:[di], ahmov es:[di+2], alinc siadd di, 6loop showDatejmp showTimeret;----------------------------init_reg:mov bx, 0b800hmov es, bxmov bx, csmov ds, bxret;----------------------------show_string:push dxpush dspush espush sipush dishowString:mov dl, ds:[si]cmp dl, 0je showStringRetmov es:[di], dladd di, 2inc sijmp showStringshowStringRet:pop dipop sipop espop dspop dxret;---------------------------show_time_style:mov si, OFFSET TIME_STYLEmov di, 160*10+30*2call show_stringretcode endsend start

体会:这段代码虽然初看起来有点绕,但是使用了模块化的思想,这里已经体现出大型程序模块化的影子;同事在代码跳转时,注意是怎样在上下文之间切换的,思考这种切换技巧。

实验结果:








原创粉丝点击