聆云 发表于 2016-3-16 23:40:02

实验14代码分享

assume cs:code
code segment
main:       
        mov bl,0                ;用来索引端口地址
        mov cx,6                ;6次循环取出端口中的日期时间
s:        mov dx,cx                ;用DX保存CX的值
        mov al,9h                ;设置读取初始地址(从年开始读)
        sub al,bl                ;指向下一个读取地址
        out 70h,al
        in al,71h               
        mov ah,al               
        mov cl,4
        shr ah,cl
        and al,00001111b
        add al,30h
        add ah,30h               
        push ax                        ;将转换后的时间日期压入栈。
        mov cx,dx                ;恢复CX的值
        cmp cx,4        ;判断CX与4的大小(CX在6-4,设bl自增1,即索引9h,8h,7h地址。cx等于4,设bl增加3,小于4,设bl增加2,即索引4h,2h,0h)
        jna ok                       
        add bl,1
        jmp short s0
ok:        jne ok1
        add bl,3
        jmp short s0               
ok1:        add bl,2
s0:        loop s

        mov bp,sp        ;设置bp指向sp
        add bp,10        ;设置bp指向年,方便从年开始显示

        mov ax,0b800h
        mov es,ax
        mov cx,6        ;循环6次将栈中数据显示出来
        mov si,40        ;从40列开始显示,设默然行为1920(12*160)       

s1:        mov ax,
        mov es:,ah                ;显示十位数据
        mov byte ptr es:,2        ;用绿色显示
        mov es:,al                ;显示个位数据
        mov byte ptr es:,2        ;用绿色显示
        cmp cx,4                        ;判断CX与4的大小,大于4,用“/”分隔,等于4用空格分隔,小于4用“:”分隔。(等于1不分隔)
        jna ok2
        mov byte ptr es:,'/'        ;用‘/’分隔年/月/日
        mov byte ptr es:,5        ;将‘/’用红色显示       
        jmp short s10
ok2:        je ok3
        cmp cx,1                        ;(等于1不分隔)
        je s10
        mov byte ptr es:,':'        ;用‘:’分隔时:分:秒
        mov byte ptr es:,5        ;也用红色显示
        jmp short s10
ok3:           mov byte ptr es:,' '        ;用空格隔开日期和时间
       
s10:        sub bp,2               
        add si,6
        loop s1

        mov ax,4c00h
        int 21h

code ends
end main
页: [1]
查看完整版本: 实验14代码分享