爱你没错 发表于 2015-12-19 20:22:19

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

本帖最后由 爱你没错 于 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:,200h

      mov word ptr es:,0   ;设置中断向量表

      mov ax,4c00h

      int 21h

lp:   push bp

      mov bp,sp

      dec cx

      jcxz lpret

      add ,bx

lpret:pop bp

      iret

      mov ax,4c00h

      int 21h

lpend:nop

code ends

end start

一直不理解红色部分的意义,求高人解答一下

爱你没错 发表于 2015-12-19 20:30:11

本帖最后由 爱你没错 于 2015-12-19 21:05 编辑

个人理解是把bp的值入栈保存,然后sp是指向栈顶,把栈顶的值赋给bp如果cx不为零那么把ip的值加上bx的位移(add ,bxbp默认的段地址是SS所以此句就就是相当于给ip+bx),然后把bp弹出来,再通过iret把cs,ip和标志寄存器的值都弹回来,然后ip又重新指向循环的开始S标号处了?
页: [1]
查看完整版本: 实验13第二题关于用中断代替loop的问题