中断服务程序的最后一条指令是RET或RETI对吗

中断服务程序的最后一条指令是RET或RETI对吗,第1张

指令是RET,RET是程序返回指令,返回到调用该子程序处的下一条指令执行,返回的地址是从RET执行前的SP中最后两个值。

DELAY:MOV R7,#250 ;(6)250-->R7。

D1:MOV R6,#250 ;(7)250--->R6。

D2:DJNZ R6,D2 ;(8)(R6-1),等于零执行下一条,不等于零,则跳转到D2。

DJNZ R7,D1 ;(9)(R7-1),等于零执行下一条,不等于零,则跳转到D1。

扩展资料:

RET分辨率增强技术的意思。有RET功能的打印机,可以使打印出来的图形几乎没有锯齿,一台400×400DPI的激光打印机,如果有RET功能,其打印效果可以与600×600DPI的激光打印机想媲美。

但是CS值不变,即CS一直指向code segment这个段(这个功能是通过assume cs:code实现的),程序转移到code segment段的开头的第一条语句,即mov ax,4c00h,然后调用int 21h结束程序。

因为它具有两种不同的调用方式,分别是近调和远调,需要对应不同的返回指令。根据查询相关公开信息显示:近调指令可以直接调用同一代码段内的子程序,执行速度较快,而远调指令则可以调用不同代码段内的子程序,执行速度相对较慢。由于两种调用方式的存在,单片机的返回指令也有了两种不同的指令,分别是RET和RETI。RET指令用于近距离调用子程序后的返回 *** 作,它可以返回到调用该子程序的指令后面的下一条指令继续执行,而RETI指令则用于远距离调用子程序后的返回 *** 作,它除了实现近距离返回 *** 作的功能外,还可以处理中断嵌套等复杂情况,因此执行速度相对较慢。单片机中常用的近调指令和远调指令,分别用于调用不同距离范围内的子程序。

调用指令下一条指令的首地址。

执行返回指令时返回的断点是调用指令下一条指令的首地址。

RET是子程序的返回指令。执行本指令时:(SP)→PCH,然后(SP)—1→SP(SP)→PCL,然后(SP)—1→SP。栈顶数据出栈赋值给ip寄存器。为了能把函数得出的结果返回给其他代码使用,我们需要使用返回指令return,把需要函数需要返回的结果放在return后面就能返回。主程序(调用程序)执行调用指令CALL调用子程序,子程序(被调用程序)执行返回指令RET返回主程序中CALL指令的下条指令处。CALL指令的功能。在汇编语言中,子程序其实就是以一个标号起始,最后有类似C函数的返回指令的一段代码块,主程序可以在中途调用该代码块(其实就是跳转到子程序执行。

MCS-51单片机汇编语言中,没有SP这条指令,只有针对SP *** 作的指令。51单片机中SP是堆栈指针寄存器,存放着当前堆栈地址。堆栈用于存储子程序调用、中断程序调用时程序返回的地址,或者用来临时保存某一寄存器的值。除了初始化堆栈时直接给SP赋值,SP显式存在,其它的对SP有影响的指令,对SP的 *** 作都是隐式的,就是说SP并不出现在指令 *** 作数当中。例如:MOVSP,#80H;初始堆栈指针,(SP)=80HLCALLXXXX;调用XXXX处的子程序,下一条指令PC值压栈,(SP)=(SP)+2NOP;子程序返回时,RET指令从堆栈中d出PC值,所以会返回到这里,(SP)=(SP)-2PUSHACC;累加器A的内容压栈保存,(SP)=(SP)+1POPB;堆栈内保存的累加器A的内容d出到B寄存器中,(SP)=(SP)-1使用PUSH、POP指令使用堆栈,要注意进出栈的匹配,否则将引起不可预期的后果。

RET用于一般程序的返回

RETI用于中断函数的返回

以上是一般单片机书籍简绍的,然而在实际应用中,我发现,在程序返回中一样可以使用RETI,而在中断返回中却无法使用RET,究其原因是因为RETI比RET多做一件事情就是将“优先级生效”触发器清零

原来在8051构架中--中断系统中含有两个不可寻址的“优先级生效”触发器。一个用于指出CPU是否正在执行高优先级的中断服务程序,这个触发器为1时,系统将屏蔽所有的中断请求;另一个则指出CPU是否正在执行低优先级中断服务程序,该触发器为1时,将阻止除高优先级以外的一切中断请求。由此可见,若要响应同级甚至是低级中断请求,必须使得该“优先级生效”触发器清零。但该触发器又是不可寻址的,所以无法用软件直接清零。”

RET指令是子程序的最后一条指令,即恢复断点,返回主程序。 没有要求RET指令非要和哪一条指令要配对使用。RET是子程序返回指令,放在子程序的结尾,当子程序执行完后,靠该指令返回主程序。

繁易透传三菱plc程序设置

子程序被调用时,参数与主程序相互传递,不被调用则可以无视子程序。

三菱PLC指令的用法,离不开子程序调用指令CALL,子程序返回指令SRET。

子程序调用指令CALL的编号为FNC01。 *** 作数为P0~P127,此指令占用3个程序步。子程序返回指令SRET的编号为FNC02。无 *** 作数,占用1个程序步。转移标号不能重复,也不可与跳转指令的标号重复;子程序可以嵌套调用,最多可5级嵌套。

以上就是关于中断服务程序的最后一条指令是RET或RETI对吗全部的内容,包括:中断服务程序的最后一条指令是RET或RETI对吗、单片机为什么有两条返回指令、执行返回指令时返回的断点是等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9294545.html

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

发表评论

登录后才能评论

评论列表(0条)

保存