账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    裸机汇编语言死循环阻塞所有中断例程求解?
    57
    0

    大家好,
    我在裸机学习汇编语言,在写中断程序的时候遇到了如下问题:
    1.我学习的是x86的汇编语言,在写好中断程序的之后,中断例程有两个,一个是timer定时器,定时在屏幕上print一行文字,然后中断程序返回。
    代码像这样:
    timer.c:

    printf;
    return;

    另一个是打印键盘输入的字符的例程:
    keyboard.c:

    printf(char c);
    return;

    2.main函数内初始化完变量之后,进入一个while(1)的死循环。这个情况下,我能看到尽管main程序是死循环,timer和keyboard中断程序还是能不断的执行。
    3.问题:一般来说,进入中断要先cli 关中断,然后中断完成后sti开启中断。现在我想做中断嵌套,在timer.c中间加了如下代码:
    timer.c:

    printf;
    sti;    //开中断
    while(1);    //想让timer中断先等会,看看keyboard中断能不能执行
    return;

    结果是程序不断在这个while里执行,bochs调试的时候看到另一个中断例程从来得不到执行。并且此时看到eflag寄存器IF位是置1的,然而中断还是无法发生,不知道这个问题该如何解决?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • o0地狱急诊室〆 普通会员 1楼

      裸机汇编语言是一种非常低级别的编程语言,它主要通过硬件来执行指令,而不能直接控制计算机的中断、定时器和锁等高级功能。因此,裸机汇编语言无法直接解决死循环阻塞所有中断例程的问题。

      但是,如果你确实遇到了这个问题,你可以尝试使用一些工具和方法来帮助你。例如,你可以使用调试器来逐步执行汇编代码,查看每一步的执行结果,找出导致死循环的原因。你也可以使用一些硬件调试工具来检查CPU的寄存器状态,找出死循环的原因。

      此外,你也可以查阅一些关于裸机汇编语言的资料,了解其基本原理和使用方法,以及如何解决常见的编程问题。这样,你就可以更深入地理解问题,并找到更有效的解决方案。

    更多回答
    网站公告
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部