flhy 发表于 2014-7-28 23:00:21

求助 王爽汇编课程设计2的clock子程序

本人看完了小甲鱼的汇编视频教程,现在正在做课程设计2,可是碰到 一个问题,困扰了好几天:
就是课程设计2中的3号选项 clock子程序,有两个问题:
1.为啥我的程序运行的时间是静止的(在VMware中),不按秒变化?但是我将子程序单独提出来运行是可以按秒变化的
2、把子程序提出来,为什么键盘中断那个地方不能正确的保存原来int9中断的地址呢?(debug下0200处保存地址不是int9的地址)
下附代码:(附件是完整的程序,望大神赐教)
;子程序3 显示当前时间
;参数:无
;返回:无
        sub3_time_save:
                        db '00/00/00 00:00:00',0
        cmos_port db 9,8,7,4,2,0
        sub3:
                        push cs
                        pop ds
                        mov si,offset sub3_int9_start
                       
                        mov ax,0
                        mov es,ax
                        mov di,0204H
                       
                        mov cx,offset sub3_int9_end - offset sub3_int9_start
                        cld
                        rep movsb
                       
                        push es:
                        pop es:
                        push es:
                        pop es:
                       
                        cli
                        mov ax,0204H
                        mov es:,ax
                        mov ax,0
                        mov es:,ax
                        sti
                       
                        call clearScreen
                       
        sub3_dis_time_loop:
                        mov cx,6
                        mov si,0
                        mov di,offset sub3_time_save
        sub_3_dis_port_loop:
                        mov al,cmos_port
                        call sub_cmos
                        mov ds:,ax
                        inc si
                        add di,3
                        loop sub_3_dis_port_loop
                        mov si,offset sub3_time_save
                        mov ah,3
                        mov al,5
                        call printString
                        jmp sub3_dis_time_loop
                        ;键盘中断
        sub3_int9_start:
                        push ax
                        push bx
                        push cx
                        push es
                       
                        in al,60H
                       
                        ;调用原中断,已经不能使用int来调用原来的中断了
                        pushf
                        call word ptr cs:
                       
                        cmp al,3BH
                        je sub3_int9_choise1
                        cmp al,01H
                        je sub3_int9_choise2
                       
                        jmp sub3_int9_ret
                       
        sub3_int9_choise1:
                        mov ax,0B800H
                        mov es,ax
                        mov bx,1
                        mov cx,2000
        sub3_loop_s:
                        inc byte ptr es:
                        add bx,2
                        loop sub3_loop_s
       
        sub3_int9_choise2:
                        ;退回操作系统选单
                        ;恢复原来的中断
                        cli
                        mov ax,0
                        mov ds,ax
                        mov es,ax
                        push ds:
                        pop es:
                        push ds:
                        pop es:
                        ;mov word ptr es:,ds:
                        ;mov word ptr es:,ds:
                        sti
                        pop es
                        pop cx
                        pop bx
                        pop ax
                       
                        pop ax
                        mov bx,1000H
                        push bx
                        mov bx,0
                        push bx
                        push ax
                        iret
                       
        sub3_int9_ret:
                        pop es
                        pop cx
                        pop bx
                        pop ax
                        iret
        sub3_int9_end:
                        nop

页: [1]
查看完整版本: 求助 王爽汇编课程设计2的clock子程序