原地转移,一般来说,就是死机了。如果中断开放,满足条件时,也可以转入到中断程序里面去。
ret是子程序返回指令,放在子程序的结尾,当子程序执行完后,靠该指令返回主程序。SJMP $ 是相对转移指令 是用在主程序中的,可以作为暂停。等价于 LL: SJMP LL 就是又跳转到这条指令的本身,反复执行给指令,不再执行别的指令了。相当于暂停 (或在这等待计算机的中断时间发生)呵呵 ...
SJMP $ 是原地转移的意思。说它是延时,这个“时间”可是无限的;说它是“死机”也差不多。但是,它在原地转移的时候,可能插入中断,所以,它还不是真正的死机。
就是一个无限循环 SJMP是个短跳转 就是当前指令的起始地址
在汇编语言中$是个比较特殊的字符,它代表当前地址。因此"SJMP $"的意思是,程序跳转到当前地址,即PC指针停留在当前地址。
正常的程序,如果有“SJMP $ 语句”,程序就会停在此处,等待中断,(没有中断,就会死机。)没有“SJMP $ 语句”,就会向下继续执行,就会把END后面的乱码当做程序来执行。
SJMP $就是“原地踏步走”的意思,即当程序执行的该处时,什么事也不做。一般用来进行延时作用 SJMP $是在原地循环,一般都用在等待中断到来,然后进入中断处理程序。处理完了,再继续在原地循环。比如你的手机现在不用了,估计也在这里循环,你按下键,它就当是有中断 来了,就去处理,处理完了...
代指本指令的地址。如果SJMP $的起始地址是1010H,则在编译的时候编译器把$编译为这个起始地址1010H,就等于SJMP 1010H,执行完这指令后还跳到这个地址再执行它。无限循环直到单片机没电。
这个老师曾经问过我,,就是PC 的当前值,,注意是PC的当前值。。SJMP $就相当于LOOP : SJMP LOOP PC就是下一条即将执行的指令。。
---当前指令的地址 SJMP $ 跳回到该指令,实际上就是死循环