鱼C论坛

 找回密码
 立即注册
查看: 2675|回复: 1

实验13第二题关于用中断代替loop的问题

[复制链接]
发表于 2015-12-19 20:22:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 爱你没错 于 2015-12-19 20:54 编辑

;名称:int 7ch中断例程

;功能:完成loop指令功能,中断例程安装在0:200处

;参数:(cx)=循环次数,(bx)=位移

assume cs:code   

code segment  

start:  mov ax,cs  

        mov ds,ax  

        mov si,offset lp               ;设置ds:si指向源地址  

        mov ax,0  

        mov es,ax  

        mov di,200h                     ;设置es:di指向目标地址  

        mov cx,offset lpend-offset lp   ;设置cx为传输长度  

        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,4c00h  

        int 21h  

lp:   push bp

        mov bp,sp

        dec cx

        jcxz lpret

        add [bp+2],bx

lpret:  pop bp  

        iret


        mov ax,4c00h  

        int 21h  

lpend:nop  

code ends  

end start

一直不理解红色部分的意义,求高人解答一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-12-19 20:30:11 | 显示全部楼层
本帖最后由 爱你没错 于 2015-12-19 21:05 编辑

个人理解是把bp的值入栈保存,然后sp是指向栈顶,把栈顶的值赋给bp如果cx不为零那么把ip的值加上bx的位移(add [pb+2],bx  bp默认的段地址是SS所以此句就就是相当于给ip+bx),然后把bp弹出来,再通过iret把cs,ip和标志寄存器的值都弹回来,然后ip又重新指向循环的开始S标号处了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-21 01:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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