RETI是中断服务子程序的返回指令,RETI是中断服务子程序的最后1条指令,它使程序从中断服务子程序转到中断点继续运行。
RETI指令除了执行返回功能外,还清除内部相应的中断状态寄存器(该状态寄存器由CPU响应中断时置位,宣告CPU当前正在执行中断服务程序),因此中断服务子程序必须用RETI结束,
CPU执行RETI指令后,必须至少再执行一条其它指令才能响应新的中断。
code segmentassume cs:code
org 100h
start:jmp begin
str1a db 100
str1n db ?
str1 db 100 dup(?)
char1 db ?
begin:push cs
pop ds
push cs
pop es
mov ah,10
lea dx,str1a
int 21h
call lfcr
mov ah,1
int 21h
mov byte ptr char1,al
mov cl,str1n
mov ch,0
lea di,str1
cld
repne scasb
cmp cx,0
je @0
inc cx
@0:
call lfcr
mov al,str1n
sub al,cl
mov cl,al
mov ch,0
lea si,str1
cld
@1:
lodsb
mov dl,al
mov ah,2
int 21h
loop @1
mov ah,4ch
int 21h
lfcr proc near
push ax
push dx
mov ah,2
mov dl,13
int 21h
mov dl,10
int 21h
pop dx
pop ax
ret
lfcr endp
code ends
end start
把对应的R14寄存器中的值 赋值给PC寄存器在进入子程序的时候 保存一下当前的 预取指令的下一条指令的地址到LR(R14)寄存器,在子程序返回的时候把LR的值赋值给PC寄存器 就OK 了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)