当前位置: 代码迷 >> C语言 >> 很久没来了.发个简单的进度条模拟程序.
  详细解决方案

很久没来了.发个简单的进度条模拟程序.

热度:270   发布时间:2007-12-21 17:50:56.0
很久没来了.发个简单的进度条模拟程序.
#include <stdio.h>
void pause(int time);
int main(void)
{
        int i;
        printf("=");
        for(i=0; i<58; i++)
        {
                printf("|");
                pause(3);
                printf("\b/");
                pause(3);
                printf("\b\\");
                pause(3);
                printf("\b=");
        }
        getchar();
        return 0;
}

void pause(int time)
{
        asm mov ah,0h;
        asm int 1ah;
        asm add dx,time;
        asm mov bx,dx;
label:
        asm int 1ah;
        asm cmp bx,dx;
        asm jne label;
}

在borlandc编译通过...
搜索更多相关的解决方案: 模拟程序  进度  

----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽

坚持到底
2007-12-21 09:55:28
sunkaidong

来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4493
专家分:141
注 册:2006-12-28
  得分:0 
楼主高人啊.可以说明一下吗?汇编的代码vc++里面可以直截写进去吗?
----------------解决方案--------------------------------------------------------
vc里也可以插入汇编,不过这个程序用VC的话犯不着内联汇编,包含一个头文件<windows.h>用一个API函数就可以实现暂停效果。
void pause(int time)
{
    Sleep(time);
}
----------------解决方案--------------------------------------------------------
vc的内联汇编格式我忘记了.你网上找找,应该差不多的.
我机器也没装有vc.
这只是调用了bios的1ah中断
功能描述:读取时钟“滴答”计数
入口参数:AH=00H
出口参数:AL=00H――未过午夜,否则,表示已过午夜
CX:DX=时钟“滴答”计数
void pause(int time)
{
        asm mov ah,0h;     调用1ah的0号功能,读取时钟“滴答”计数
        asm int 1ah;           调用1ah中断服务
        asm add dx,time;  在当前时钟滴答加上time滴答,一个滴答=55ms(毫秒)
        asm mov bx,dx;      把dx放到bx.因为后面dx的值会被刷新
label:                                这个不用说了吧,标签来的
        asm int 1ah;          再调用1ah中断服务
        asm cmp bx,dx;    用bx的滴答数和当前dx的滴答比较
        asm jne label;      jne是不等时跳转,就是说cmp bx,dx 如果两者不等就跳转
}

[[italic] 本帖最后由 ioriliao 于 2007-12-21 18:53 编辑 [/italic]]
----------------解决方案--------------------------------------------------------
呵呵,用了一个系统中断哦
----------------解决方案--------------------------------------------------------
回复 5# 的帖子
这样做没有任何好处吧,只会占用CPU。
----------------解决方案--------------------------------------------------------
对,只调用了一个bios中断.有些中断在windows系统下禁使用,我在找有关如何取得windowsxp的0级特权.
各位朋友如果谁有的请发我一份:ioriliao.tom.com
----------------解决方案--------------------------------------------------------
  相关解决方案