汇编语言(王爽)-实验十四(20130909)

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

 

posted @ 2013-09-09 10:30  tsembrace  阅读(1253)  评论(0编辑  收藏  举报