|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
assume cs:code
code segment
main:
mov bl,0 ;用来索引端口地址
mov cx,6 ;6次循环取出端口中的日期时间
s: mov dx,cx ;用DX保存CX的值
mov al,9h ;设置读取初始地址(从年开始读)
sub al,bl ;指向下一个读取地址
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,cl
and al,00001111b
add al,30h
add ah,30h
push ax ;将转换后的时间日期压入栈。
mov cx,dx ;恢复CX的值
cmp cx,4 ;判断CX与4的大小(CX在6-4,设bl自增1,即索引9h,8h,7h地址。cx等于4,设bl增加3,小于4,设bl增加2,即索引4h,2h,0h)
jna ok
add bl,1
jmp short s0
ok: jne ok1
add bl,3
jmp short s0
ok1: add bl,2
s0: loop s
mov bp,sp ;设置bp指向sp
add bp,10 ;设置bp指向年,方便从年开始显示
mov ax,0b800h
mov es,ax
mov cx,6 ;循环6次将栈中数据显示出来
mov si,40 ;从40列开始显示,设默然行为1920(12*160)
s1: mov ax,[bp]
mov es:[si+1920],ah ;显示十位数据
mov byte ptr es:[si+1+1920],2 ;用绿色显示
mov es:[si+2+1920],al ;显示个位数据
mov byte ptr es:[si+3+1920],2 ;用绿色显示
cmp cx,4 ;判断CX与4的大小,大于4,用“/”分隔,等于4用空格分隔,小于4用“:”分隔。(等于1不分隔)
jna ok2
mov byte ptr es:[si+4+1920],'/' ;用‘/’分隔年/月/日
mov byte ptr es:[si+5+1920],5 ;将‘/’用红色显示
jmp short s10
ok2: je ok3
cmp cx,1 ;(等于1不分隔)
je s10
mov byte ptr es:[si+4+1920],':' ;用‘:’分隔时:分:秒
mov byte ptr es:[si+5+1920],5 ;也用红色显示
jmp short s10
ok3: mov byte ptr es:[si+4+1920],' ' ;用空格隔开日期和时间
s10: sub bp,2
add si,6
loop s1
mov ax,4c00h
int 21h
code ends
end main |
|