免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1888 | 回复: 5
打印 上一主题 下一主题

求救:下面程序为何进不了Ring中断子程序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-16 15:52 |只看该作者 |倒序浏览
DATA SEGMENT
      COUNT  DW        1
        MSG  DB        'The bell is ring!',0DH,0AH, '$'
        BEEP  DB        07H,'$'
    DATA ENDS
    CODE SEGMENT
        MAIN  PROC      FAR
        ASSUME CS:CODE,DSATA,ESATA
      START:
              PUSH DS
              SUB AX,AX
              PUSH AX
              MOV      AX,DATA
              MOV      DS,AX
              MOV      AL,1CH
              MOV      AH,35H
              INT      21H
              PUSH      ES
              PUSH      BX
              PUSH      DS
              MOV      DX,OFFSET RING          ;取中断向量
              MOV      AX,SEG RING
              MOV      DS, AX
              MOV      AL,1CH
              MOV      AH,25H
              INT      21H

              POP      DS
              IN        AL,21H
              AND      AL,11111110B
              OUT      21H,AL

              STI

              MOV      DI,2
      DELAY:  MOV      SI,3


    DELAY1:  DEC      DI          ;产生中断位置
              JNZ      DELAY1

              DEC      DI
              JNZ      DELAY1


              POP      DX
              POP      DS
              MOV      AL,1CH
              MOV      AH,25H
              INT      21H
                            ;DEBUG T时无法进入RING中断子程序,下一条为NOP

              RET
        MAIN  ENDP
        RING  PROC      NEAR
              PUSH      DS
              PUSH      AX
              PUSH      CX
              PUSH      DX
              MOV      AX,@DATA
              MOV      DS,AX
              STI

              DEC      COUNT

              JNZ      EXIT
              MOV      DX ,OFFSET MSG          ;显示
              MOV      AH,09H
              INT      21H
              MOV      DX,10
              IN        AL,61H
              AND      AL,0FCH
      SOUND:

              XOR      AL,02
              OUT      61H,AL
              MOV      CX,1400H
      WAIT1:
              LOOP      WAIT1
              DEC      DX
              JNE      SOUND

              MOV      COUNT ,182  ;  18.2 1秒
      EXIT:                        ;断续执行中断

              CLI

              POP      DX
              POP      CX
              POP      AX
              POP      DS
              IRET
        RING  ENDP
              END      START

论坛徽章:
0
2 [报告]
发表于 2009-12-18 02:07 |只看该作者
建议LZ先把环境描述清楚. 在什么CPU? X86? 什么OS? LINUX? 如果是LINUX X86-32. 那么你的程序应该要在内核态才可以用INT 21 之类的指令.

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
3 [报告]
发表于 2009-12-18 09:22 |只看该作者
另外,还有一点,贴代码的时候请用

  1. ....代码
复制代码

把代码包起来
或者用所见即所得模式
所见即所得模式好象我也没用过

[ 本帖最后由 cjaizss 于 2009-12-18 09:24 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2009-12-19 20:52 |只看该作者

X86

X86 的汇编语言“标准”程序,正常在WINDOWS 或 DOS 或 LINUX下需可调试。
我是用WINDOWS 或 DOS 下用masm用LINK后使用 DEBUG工具进行调试的。
DEBUG工具应该为汇编语言自带的调试工具。

论坛徽章:
0
5 [报告]
发表于 2009-12-20 00:59 |只看该作者

回复 #4 khan99 的帖子

不要使用 debug,debug 状态下不会产生 时钟中断的。

编译成 exe 或 com 文件执行。

论坛徽章:
0
6 [报告]
发表于 2009-12-20 15:50 |只看该作者
我用是先用Link 生成EXE或COM文件之后(如Ring.exe). 在DOS 下用 Debug Ring.exe 在们-下 用T跟踪至 INT 21H,正确进入中断RING程序继续使用 T,但无法进入Ring中断程序,而是产生NOP的指令。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP