唉!算是把《实验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
;实验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]