;以“年/月/日 时:分:秒”格式,显示当前的日期、时间;思路先把数据读出来放到ds:si,然后送到屏幕显示assume cs:code,ds:data,ss:stackdata segment db 16 dup(0)data endsstack segment dw 8 dup (0)stack endscode segment start:;把数据读到ds:si中 mov ax,data mov ds,ax mov si,0 mov cx,2;年月日和时分秒读取类似,用两次循环分别读 mov bp,1;因为年月日和时分秒地址递减不同,用bp标记增量mov bx,9;bx为年月日和时分秒的首地址 s2: push cx mov cx,3;内部循环3次读出年月日/时分秒 s1: mov al,bl;给al地址 out 70h,al;送到地址端口70h in al,71h;数据端口送数据到al中 push cx;移3位必须用到cl,先把中数据压栈保存 mov cl,4;把两个bcd码分别放到ah,al mov ah,al;ah为十位,al为个位 shr ah,cl and al,00001111b add ah,30h;把两个数分别转化成ASCII码 add al,30h mov [si],ah;把转化好的数放到ds:si mov [si+1],al add si,2 sub bx,bp pop cx loop s1 pop cx mov bx,4;第二次循环时分秒,首地址在4 mov bp,2;增量为2 loop s2;显示当前的日期、时间 mov ax,0b800h;设置显存es:[di] mov es,ax mov si,0 mov di,12*160+30*2 mov cx,2;循环两次显示年月日,时分秒 mov dl,'/';年月日分隔符'/' s4: push cx;内循环3次显示年月日/时分秒 mov cx,3mov bp,3;bp用来记录是否是第三次循环 s3: dec bp;若是第三次循环,则不显示分隔符mov al,[si] mov es:[di],al mov byte ptr es:[di+1],2moval,[si+1]mov es:[di+2],al mov byte ptr es:[di+3],2je s5 mov es:[di+4],dlmov byte ptr es:[di+5],2 s5: add si,2 add di,6 loop s3 pop cxadd di,2;年月日和时分秒之间有一个空格 mov dl,':';时分秒的分隔符为‘:’ loop s4mov ax,4c00hint 21hcode endsend start
0 0