单片机汇编语言指令中中断返回指令RET和RETI有什么不同?

单片机汇编语言指令中中断返回指令RET和RETI有什么不同?,第1张

RET是普通子程序的返回指令,RET是普通子程序的最后1条指令,它使程序从子程序转到调用该子程序指令LCALL/ACALL的下1条指令执行。

RETI是中断服务子程序的返回指令,RETI是中断服务子程序的最后1条指令,它使程序从中断服务子程序转到中断点继续运行。

RETI指令除了执行返回功能外,还清除内部相应的中断状态寄存器(该状态寄存器由CPU响应中断时置位,宣告CPU当前正在执行中断服务程序),因此中断服务子程序必须用RETI结束,

CPU执行RETI指令后,必须至少再执行一条其它指令才能响应新的中断。

code  segment

      assume 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 了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11231534.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存