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