汇编语言中ret和SJMP $有什么区别,为什么有些程序结束的时候是用SJMP $ 而有些时候是用RET呢??

如题所述

汇编语言中:
1 ret和SJMP $相同点: 都属于转移指令
2 ret和SJMP $区别:
ret是子程序返回指令,放在子程序的结尾,当子程序执行完后,靠该指令返回主程序。
SJMP $ 是相对转移指令 是用在主程序中的,可以作为暂停。
等价于 LL: SJMP LL
就是又跳转到这条指令的本身,反复执行给指令,不再执行别的指令了。
相当于暂停 (或在这等待计算机的中断时间发生)

呵呵 满意 就选满意回答吧
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-11-11
ret是子程序返回指令,指令这条指令时自动把栈顶两个字节送到PC里,这时计算机就去新的地址去指令程序了。
sjmp $指令是跳转指令,只是这条指令里的$是指向本条指令所在的地址,也主是这时把本条指令里的地址送到PC,因此计算机就一直执行这条指令不再去别的程序段了。
你这个问题的由来我估计是因为单片机的教材上,有的只是列出来了一个子程序,所以结尾处是写着RET,有的写出来的是完整的程序,程序的最后为了防止程序跑飞死机,最后加了一条SJMP $等待命令。追问

有时候程序里面没有子程序循环的那种·,如果有个MAIN MAIN1 那RET是回到MAIN还是MAIN1?

追答

这个不一定,需要看程序来定。如果没有子程序的调用,那么这个RET就没有实际的意义了。

第2个回答  2012-11-12
RET 是子程序返回指令,运行到RET时将从堆栈中弹出调用时的地址值给程序计数器PC。
SJMP $是转移到前地址的指令,是原地等待的死循环,只有中断可以跳出,中断结束后仍然会回到这里死循环。
有些程序结束时用到SJMP $是因为该单片机主要依靠中断完成各项功能控制,主程序就处于死循环状态,如果没有的话,那么单片机就会陷入混乱状态了,因为程序不知道飞到哪里去了,尽管有 中断时也可以执行中断,但一旦结束中断,程序又乱执行了,所以程序不可控,这也是这句语句所起的作用。

...$有什么区别,为什么有些程序结束的时候是用SJMP $ 而有些时候是用R...
汇编语言中:1 ret和SJMP $相同点: 都属于转移指令。2 ret和SJMP $区别:ret是子程序返回指令,放在子程序的结尾,当子程序执行完后,靠该指令返回主程序。SJMP $ 是相对转移指令 是用在主程序中的,可以作为暂停。等价于 LL: SJMP LL 就是又跳转到这条指令的本身,反复执行...

SJMP $单片机这条指令到底是干嘛用的,我看每个程序后面基本都有,没有...
sjmp 是 单片机中的 无条件跳转命令,后面跟随的是 跳转的地址;而 $ 该符号,在汇编语言中,表示 本行地址 的意思,于是 SJMP $,就表示跳转到本行。表现的结果就是:死循环。一般在程序结尾使用,功能是,保持单片机程序不结束(以免程序重新运行)

关于单片机汇编语言END之前的“SJMP $”语句
正常的程序,如果有“SJMP 语句”,程序就会停在此处,等待中断,(没有中断,就会死机。)没有“SJMP 语句”,就会向下继续执行,就会把END后面的乱码当做程序来执行。

单片机编程中,END\\AJMP $\\SJMP $,有什么区别?
AMJP $和SJMP $都表示跳转到本行,就是一个死循环,使程序停在这里。两者都是2字节2周期指令,在这里没有什么区别。AJMP的最大转跳范围是当前2K页面,而SJMP则是本指令前127字节后128字节。是一个(也是唯一一个)不需要定义的地址标号,代表当前行命令的地址。END代表汇编程序到此结束,编译程序对...

单片机汇编语言RET没有和ACALL配套使用时返回到哪里?
如不是在调用后RET了那就只会回到你堆栈最上高二地址(栈)中所指的地址上去了,你可这试试,先用二个压栈指令POP压二个数后(低位先压)再RET,这会程序就会转到你压的这个数的地方运行起走。一般书上的例程绝大多数是以子程序方式表示的,所以是只等你调用的。

单片机汇编语言的几个疑问
这一点C语言就比较好,以函数方式实现,少写括号编译通不过,不像汇编,少些个RET照样能通过。另外,编写程序时应养成一种习惯:对程序体中的寄存器操作尽量不要直接使用其地址,比如:MOV 30H,A,这里直接写30H不好,因为大的汇编程序对寄存器地址的调整是很常见的现象,一旦修改,程序中每个地方都...

单片机汇编语言RETI的用法
单片机汇编语言中,RETI指令用于从中断程序中返回。用法只有一个,就是放在中断服务程序的最后,实现从中断程序中返回。示例如下:;定时器1中断服务程序;T1INT:PUSH PSW;保护现场 PUSH ACC;;MOV TH1,#0EEH;刷新速率200\/4=50 QT1:POP ACC;恢复现场 POP PSW;RETI;;...

RETI 与 RET 有什么区别?
PUSH ACC ;SP=62H, 62H地址中的内容为0x13 RET ;SP=60H, PC=0x1312;完整的程序:可以在KEIL里面软件仿真看看结果 ORG 0000H LJMP MAIN ORG 0100H MAIN:MOV SP, #60H MOV A, #12H PUSH ACC MOV A, #13H PUSH ACC RET ORG 1312H SJMP $ \/\/原地跳转 END ...

汇编程序求解释
RET;DKCX0子程序结束 ;子程序结束 MAI5: MOV R5,#5 MAI6: MOV R6,#0FFH MAI7: JNB T0,MAI8 DJNZ R6,MAI7 DJNZ R5,MAI6 RET MAI8: MOV @R0,#1;2006.11.6 WATP: MOV R7,#152;142 WAT1: JB T0,WAT2 ; 0_1 DJNZ R7,WAT1 RET ;LJMP WAT77;11.6 ERRO ; ...

在51单片机的汇编语言中的双周期指令说第二个周期读入操作码并丢弃...
第三个问题:你不要求计时准确,就想用延迟函数来做也可以,那为什么两位会一闪一闪的,是因为在调用延迟函数时不能完成显示的,也就是不能同时调用显示函数了,所以,就不显示了,而等到延时到了才能再调显示子函数,这样,显示的间隔长了,就会闪烁了。第四个问题:是很好解决的,其实在调用显示子...

相似回答