assume cs:code,ds:data,es:info_num
data segment
db '11/11/11 11:11:11$' ;预设字符串
data ends
info_num segment
db 9,8,7,4,2,0 ;端口时间地址列表
info_num ends
code segment
start:
mov ax,data
mov ds,ax
mov si,0 ;初始指向字符串首
mov ax,info_num
mov es,ax
mov bp,0 ;指向端口时间地址列表首
mov cx,6
s:
push cx
mov al,es:[bp]
out 70h,al
in al,71h
mov ah,al ;暂存al
mov cl,4
shr ah,cl ;获取BCD码高四位
and al,00001111B ;获取BCD码低四位
add al,30h
add ah,30h
mov ds:[si],ah
mov ds:[si+1],al ;将时间信息写入字符串指定位置
add si,3 ;指向字符串下一写入位置
inc bp ;指向端口时间地址列表下一位置
pop cx
loop s
mov ah,2
mov bh,0
mov dh,12
mov dl,50
int 10h ;调用系统BIOS中断例程设置光标位置
mov ah,9
mov dx,0 ;指向字符串首
int 21h ;调用DOS中断例程显示字符串
mov ah,2
mov bh,0
mov dh,24
mov dl,0
int 10h ;开始没有这一段,其他并没有问题,就是发现调用21h例程后光标位置直接在字符串的下一行
;通过这一段重置光标位置
mov ax,4c00h
int 21h
code ends
end start