曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 6467|回复: 0
打印 上一主题 下一主题

[8086] 对int、iret和栈的深入理解

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
跳转到指定楼层
楼主
发表于 2009-4-1 01:44:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一个小程序的功能:自定义中断号7ch,编写中断服务子程序。从 0000:0200 起安装中断服务器程序 ,在屏幕中间显示80个感叹号。
程序代码:
assume cs:codesg

codesg segment
start:  
 ;------------------------------------------------------------------------------
 ;从 0000: 0200 起安装中断服务子程序
 ; ds:si--->指向要复制的中断服务程序
 ; es:di--->指向安装中断服务程序的地方
 ; 用ds:si 和 es:di 是为了配合 rep movsb 指令的复制
 ;-------------------------------------------------------------------------------
    mov ax,cs
    mov ds,ax        
    mov si, offset lp   ;从 lp 开始处复制

    mov ax,0
    mov es,ax
    mov di,200h        ;把中断服务程序复制在 0000:0200 起的空间里

    mov cx, offset lpend - offset lp    ;取得要复制程序的长度
    cld
    rep movsb            ;复制
    
    mov ax,0
    mov es,ax
    mov word ptr es:[7ch * 4],200h
    mov word ptr es:[7ch*4+2],0            ;设置中断向量表
   

   
     mov ax,0b800h
     mov es,ax
     mov di,160*12             ;设置显示缓冲区
     
     mov bx,offset s-offset se         ;取位移,注意此处位移为 负
     mov cx,80  
    
;-----------------------
;循环显示
;-----------------------
    
s:
     mov byte ptr es:[di],'!'
     add di,2
     int 7ch                                             ;中断产生,先后入栈为:标志寄存器,CS,IP(nop指令的IP)
   
se:
     nop
     mov ax,4c00h
     int 21h 
    
;-----------------------
;中断服务子程序
;-----------------------

lp:
    push bp                        ;因为服务子程序用到bp,所以入栈保存
    mov bp,sp                    ;取得栈顶位置
    dec cx
    jcxz lpret
    add [bp + 2],bx             ;修改 IP 使其指向 标号 s 所代表的地址处
                                           
  
lpret:
    pop bp                          ;恢复 bp
    iret                                 ;中断返回
lpend:
     nop
 

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

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-20 15:40 , Processed in 0.060733 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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