注册 登录
编程论坛 汇编论坛

汇编中的获取系统时间

sally08913 发布于 2011-04-10 17:16, 1129 次点击
dymamictime proc
    s: db 9,8,7,4,2,0
     s1: db '/','/',' ',':',':',' '
start22: mov cx,6
         mov bx,offset s
         mov si,offset s1
         mov di,0
start1: push cx         
         mov al,cs:[bx]        
         mov dl,cs:[si]
         out 70h,al
         in al,71h
         mov ah,al
         mov cl,4
         shr ah,cl
         and al,00001111b
         add ah,30h
         add al,30h
         mov bp,0b800h
         mov es,bp
         mov byte ptr es:[1980+di],ah
         mov byte ptr es:[1982+di],al
         mov byte ptr es:[1984+di],dl
         inc bx
         inc si
         add di,6
         pop cx
         loop start1


in al,60h

cmp al,10h ;Q键的扫描码

je quit

jmp start22

           ;以上4句为动态获取系统时间的关键

quit:   mov ax,4c00h

        int 21h
ret
 dymamictime endp 哪位能帮忙解释下这个子程序呢?有些地方看不懂
5 回复
#2
zaixuexi2011-04-10 18:45
程序代码:
;CMOS RAM芯片
;
该芯片内部有两个端口,端口地址为70h和71h
;
CPU通过这两个端口来读写CMOS RAM
;
70h为地址端口,存放要访问的CMOS RAM单元的地址
;
71h为数据端口,存放从选定的CMOS RAM单元中读取的数据
;
---------------------------------------------------
;
YEAR    MONTH    DATE    HOUR    MINUTE    SECOND
;
  9      8      7       4        2       0
;
---------------------------------------------------
    .model tiny
    .code
    main proc far
start:
    xor ax,ax
    push ds
    push ax
    call dynamictime
    ret
    main endp
    dynamictime proc
    jmp short start22
s:
    db 9,8,7,4,2,0
s1:
    db '/','/',' ',':',':',' '
start22:
    mov cx,6                    ;CX=6
    mov bx,offset s             ;BX指向s,  s为70端口每次所需要的入口参数的首地址
    mov si,offset s1            ;SI指向s1, s1为显示格式
    mov di,0                    ;显示下标DI = 0
start1:
    push cx                     ;保存次数
    mov al,cs:[bx]              ;取当前需要的70端口的入口参数
    mov dl,cs:[si]              ;取当前需要的显示格式
    out 70h,al                  ;al->PORT 70,指示71端口要取的数据
    in al,71h                   ;PORT 71->al
    mov ah,al
    mov cl,4
    shr ah,cl
    and al,00001111b
    add ah,30h
    add al,30h                  ;数字转ASCII
    mov bp,0b800h
    mov es,bp
    mov byte ptr es:[1980+di],ah
    mov byte ptr es:[1982+di],al
    mov byte ptr es:[1984+di],dl;送B800显示
    inc bx
    inc si                      ;2个缓冲区指针分别加1,指向后一个内存单元
    add di,6                    ;每次显示3个字符,加上属性=>3*2
    pop cx                      ;恢复当前计数
    loop start1                 ;CX-1!=0,循环到start1
    in al,60h                   ;读键盘
    cmp al,10h                  ;Q键的扫描码
    je quit                     ;Q键退出
    jmp start22                 ;跳转到start22
quit:
    ret                         ;返回
    dynamictime endp
    end start
好难对齐啊~~~~~~文字
#3
ansic2011-04-10 23:49
#4
xiaomarn2011-04-15 11:26
int 2ch
#5
Mastkey2011-04-16 13:08
来瞧瞧。。
#6
zaixuexi2011-04-16 13:26
回复 5楼 Mastkey
有发现新大陆?
1