没个正样 发表于 2012-2-14 19:41:13

唉!算是把《实验14》这一题的差事给糊过去了。

;实验14
;编程:在屏幕中间显示当前的/年/月/日/时/秒

assume cs:code,ds:data
data segment
   db 9,8,7,4,2,0
   db 'yy/mm/dd hh:mm:ss','$'
data ends

code segment
start:mov ax,data
          mov ds,ax
          mov si,0
          mov di,6

         mov cx,6
      s:push cx
         mov al,
         out 70h,al                     ;将al送入地址端口70h
         in al,71h                        ;从数据端口71h处读出单元内容
         mov ah,al
         mov cl,4
         shr al,cl                            ;右移4位
         and ah,00001111b          ;al分成两个表示BCD码值的数据
         add ah,30h
         add al,30h                     ;BCD码+30h=10进制数对应的ASCII码
         mov ds:,ax               ;ASCII码写入ds:

         inc si
         add di,3
         pop cx
         loop s

;名称:BIOS中断(int 10h)
;功能:(ah)=2置光标到屏幕指定位置、(ah)=9在光标位置显示字符
;参数:(al)=字符、(bh)=页数、(dh)=行号、(dl)=例号,(bl)=颜色属性、(cx)=字符重复个数
         mov ah,2                        ;置光标
         mov bh,0                        ;第0页
         mov dh,12                        ;dh中放行号
         mov dl,30                         ;dl中放列号
         int 10h

;名称:DOS中断(int 21h)
;功能:(ah)=9显示用'$'结束的字符串、(ah)=4ch程序返回
;参数:ds:dx指向字符串、(al)=返回值
      mov ax,data
      mov ds,ax
      mov dx,6                        ;ds:dx指向字符串的首地址data:0
      mov ah,9
      int 21h

       mov ax,4c00h
      int 21h
      
code ends
end start


三田学校 发表于 2012-8-5 00:30:29

;实验14:编程,以“年/月/日 时:分:秒” 的格式,显示当前日期、时间
assume cs:code

code segment
start:
                mov ax,0b800h
                mov ds,ax
                mov di,12*160+80-18                ;设置显示位置
                mov dh,2                              ;设置显示属性
               
                mov al,9
                mov bl,'/'
                call readTime
               
                mov al,8
                mov bl,'/'
                call readTime
               
                mov al,7
                mov bl,' '
                call readTime
               
                mov al,4
                mov bl,':'
                call readTime
               
                mov al,2
                mov bl,':'
                call readTime
               
                mov al,0
                mov bl,0
                call readTime
               
                mov ax,4c00h
                int 21h
               
showTime:;显示数据,dl为要显示的字符;dh为显示的属性
                mov ,dx
                add di,2
ret

;参数(al:端口号;bl:附加符号) 功能:读取CMOS RAM的端口(al)的信息,并显示到屏幕上
readTime:
                ;读取CMOS RAM的端口(al)的信息
                out 70h,al
                in al,71h
               
                ;获取高4位二进制信息
                mov ah,al
                mov cl,4
                shr ah,cl
               
                ;获取低4位二进制信息
                and al,00001111b
               
                ;转换为ASCII码
                add ah,30h
                add al,30h
               
                mov dl,ah
                call showTime
               
                mov dl,al
                call showTime
               
                mov dl,bl
                call showTime
ret
code ends
end start
页: [1]
查看完整版本: 唉!算是把《实验14》这一题的差事给糊过去了。