assume cs:code ;获取当前的年 月 日 时 分 秒 code segment start: mov ax,0b800H mov es,ax mov di,12*120 ;显示 mov al,9 ;COMS时钟存储的第九个单元(0 2 4 7 8 9) mov cx,3 ;循环3次 9 8 7 年月日 s: push ax push cx ;入栈 因为后面会用到 out 70H,al ;70H(地址端口)写入 al 单元 in al,71H ;读取71H(数据端口)的数据到 al mov ah,al;将al的值赋给ah 因为一个单元(一个字节)表示两个 十进制的数,所以分开 mov cl,4 shr ah,cl ;将ah的前4个2进制数 清零 and al,00001111b ;将al的前4个二进制 清零 add ah,30h ;显示数 = BCD码 + 30H add al,30h mov es:[di],ah ;显示十位 mov es:[di+2],al ;显示个位 mov bl,45 ;显示 - mov es:[di+4],bl ;显示 - add di,6 pop cx pop ax dec al loop s mov al,4 ;COMS时钟存储的第4个单元开始 mov cx,3 s1: push ax push cx out 70H,al ;70H端口(地址端口)写入al in al,71H ;读取71H端口(数据端口)的数据到al mov ah,al mov cl,4 shr ah,cl and al,00001111b add ah,30h add al,30h mov es:[di],ah ;显示 十位 mov es:[di+2],al ;显示个位 mov bl,58 ;显示 : mov es:[di+4],bl add di,6 pop cx pop ax sub al,2 ; 4 2 0 loop s1 mov ax,4c00h int 21h code ends end start |