鱼C论坛

 找回密码
 立即注册
查看: 1717|回复: 0

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

[复制链接]
发表于 2014-7-28 23:00:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本人看完了小甲鱼的汇编视频教程,现在正在做课程设计2,可是碰到 一个问题,困扰了好几天:
就是课程设计2中的3号选项 clock子程序,有两个问题:
1.为啥我的程序运行的时间是静止的(在VMware中),不按秒变化?但是我将子程序单独提出来运行是可以按秒变化的
2、把子程序提出来,为什么键盘中断那个地方不能正确的保存原来int9中断的地址呢?(debug下0200处保存地址不是int9的地址)
下附代码:(附件是完整的程序,望大神赐教) myos.rar (1.86 KB, 下载次数: 3)
;子程序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:[9*4]
                        pop es:[200H]
                        push es:[9*4+2]
                        pop es:[202H]
                       
                        cli
                        mov ax,0204H
                        mov es:[9*4],ax
                        mov ax,0
                        mov es:[9*4+2],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[si]
                        call sub_cmos
                        mov ds:[di],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:[200H]
                       
                        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:[bx]
                        add bx,2
                        loop sub3_loop_s
       
        sub3_int9_choise2:
                        ;退回操作系统选单
                        ;恢复原来的中断
                        cli
                        mov ax,0
                        mov ds,ax
                        mov es,ax
                        push ds:[200H]
                        pop es:[9*4]
                        push ds:[202H]
                        pop es:[9*4+2]
                        ;mov word ptr es:[9*4],ds:[200H]
                        ;mov word ptr es:[9*4+2],ds:[202H]
                        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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 04:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表