指令是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结束程序。
执行子程序返回或中断子程序返回指令时,返回的断点是:调用指令下一条指令的首地址。
执行子程序的使用为程序的模块化设计提供了一种方便有效的途径。与子程序有关的 *** 作有建立子程序、子程序的调用和返回。
(一)子程序的创建
创建子程序是通过编程软件来完成的。在编程软件施耐德电流互感器“编辑”菜单中的“插入”选项卡中,选择“子程序”。或者在编辑窗口中单击鼠标右键,选择d出菜单中“插入”中的“子程序”选项,以建立或插入一个新的子程序,
同时,在指令树窗口可以看到新建的子程序图标,默认的程序名是SBR N,编号N从0开始按递增顺序生成,也可以在图标上直接更改子程序的程序名,把它变为更能描述该子程序功能的名字。在指令树窗口双击子程序的图标就可以进入子程序,并对它进行编辑。
(二)子程序调用
施耐德电流互感器在使能输入端有效时,主程序把程序控制权交给子程序,此时执行子程序的全部指令,直到子程序结束。子程序的调用可以带参数,也可以不带参数。
子程序的末尾一定要有RETI指令,子程序的调用是LCALL和ACALL。
RETI是中断返回指令,这条指令的功能和RET指令相似,2条指令的不同之处是:本指令清除了中断响应时,被置1的MCS-51内部不可寻址的 “优先级生效”触发器清零。
执行这条指令后,CPU将会把堆栈中保存着的地址取出,送回PC,那么程序就会从主程序的中断处继续往下执行了。中断指令“RETI”作为中断跳出指令,除了将堆栈中保存着的地址取出,送回PC,使程序从主程序的中断处继续往下执行的作用外,还有将“优先级生效”触发器清零的功能。
扩展资料
单片机汇编指令中RETI和RET的区别
通常情况下,在普通的汇编子程序中用RET做返回,在中断服务子程序中用RETI起中断返回作用。两条指令都能从堆栈中d出断点地址并装入PC中,使CPU回到原来主程序的断点处继续运行。
然而,RET和RETI有本质的区别:当某一中断源响应后,单片机中的标志寄存器flag H和flag L其中的一个将会自动置位,用于阻止比它低级或同级的中断触发。RETI可以清除“优先级激活触发器”(即flag寄存器),以保证后续中断源的及时响应。
所以,当把RETI替换为RET后,该程序在第一次运行时可能不会出错,但在第二次运行时就会出错了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)