《汇编语言(第3版)》王爽 第十四章实验

来源:互联网 发布:cdr软件的印刷排版 编辑:程序博客网 时间:2024/05/21 17:42
;以“年/月/日 时:分:秒”格式,显示当前的日期、时间;思路先把数据读出来放到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
原创粉丝点击