实验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 21:05 编辑
个人理解是把bp的值入栈保存,然后sp是指向栈顶,把栈顶的值赋给bp如果cx不为零那么把ip的值加上bx的位移(add ,bxbp默认的段地址是SS所以此句就就是相当于给ip+bx),然后把bp弹出来,再通过iret把cs,ip和标志寄存器的值都弹回来,然后ip又重新指向循环的开始S标号处了?
页:
[1]