汇编网首页登录博客注册
xxie的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
最新留言
友情链接

[2015-03-03 13:32] 实验16

我将中断例程放在最前面,使得它在安装后仍能找到正确的偏移地址,同时将中断例程的CS值设为20h,IP值设为0,方便寻址。
完整程序如下:
    ASSUME    CS:CODE
    CODE  SEGMENT
      INT7C:  JMP       SHORT INT7C_B
       TABLE  DW        SUB0,SUB1,SUB2,SUB3
    INT7C_B:  PUSH      BX
              CMP       AH,3
              JA        INT7C_Q
              MOV       BL,AH
              MOV       BH,0
              ADD       BX,BX
              CALL      TABLE[BX]
    INT7C_Q:  POP       BX
              IRET

       SUB0:  PUSH      ES
              PUSH      DI
              PUSH      CX
              MOV       CX,0B800H
              MOV       ES,CX
              MOV       DI,0
              MOV       CX,4000
     SUB0_S:  MOV       BYTE PTR ES:[DI],' '
              ADD       DI,2
              LOOP      SUB0_S
              POP       CX
              POP       DI
              POP       ES
              RET
              
       SUB1:  PUSH      ES
              PUSH      DI
              PUSH      CX
              MOV       CX,0B800H
              MOV       ES,CX
              MOV       DI,0
              MOV       CX,4000
     SUB1_S:  AND       BYTE PTR ES:[DI+1],11111000B
              OR        ES:[DI+1],AL
              ADD       DI,2
              LOOP      SUB1_S
              POP       CX
              POP       DI
              POP       ES
              RET
              
       SUB2:  PUSH      ES
              PUSH      DI
              PUSH      AX
              PUSH      CX
              MOV       CL,4
              SHL       AL,CL
              MOV       CX,0B800H
              MOV       ES,CX
              MOV       DI,0
              MOV       CX,4000
     SUB2_S:  AND       BYTE PTR ES:[DI+1],10001111B
              OR        ES:[DI+1],AL
              ADD       DI,2
              LOOP      SUB2_S
              POP       CX
              POP       AX
              POP       DI
              POP       ES
              RET

       SUB3:  PUSH      CX
              PUSH      DI
              PUSH      SI
              PUSH      DS
              PUSH      ES

              MOV       CX,0B800H
              MOV       ES,CX
              MOV       DS,CX
              MOV       SI,0A0H
              MOV       DI,0
              MOV       CX,49
     SUB3_R:  PUSH      CX
              MOV       CX,80
              CLD
              REP       MOVSW
              POP       CX
              LOOP      SUB3_R
              MOV       CX,80
              MOV       DI,0
    SUB3_LR:  MOV       BYTE PTR ES:[DI+160*24],' '
              ADD       DI,2
              LOOP      SUB3_LR

              POP       ES
              POP       DS
              POP       SI
              POP       DI
              POP       CX
              RET
   INT7CEND:  NOP
      START:  MOV       AX,0
              MOV       ES,AX
              MOV       DI,200H
              PUSH      CS
              POP       DS
       
              MOV       SI,OFFSET INT7C
              MOV       CX,OFFSET INT7CEND-OFFSET INT7C
              CLD
              REP       MOVSB
              
              MOV       WORD PTR ES:[7CH*4],0
              MOV       WORD PTR ES:[7CH*4+2],20H

              MOV       AX,4C00H
              INT       21H

      
    CODE  ENDS
    END       START
评论次数(0)  |  浏览次数(398)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码