原地转移,一般来说,就是死机了。如果中断开放,满足条件时,也可以转入到中断程序里面去。
SJMP $ 是原地转移的意思。说它是延时,这个“时间”可是无限的;说它是“死机”也差不多。但是,它在原地转移的时候,可能插入中断,所以,它还不是真正的死机。
汇编语言中:1 ret和SJMP $相同点: 都属于转移指令。2 ret和SJMP $区别:ret是子程序返回指令,放在子程序的结尾,当子程序执行完后,靠该指令返回主程序。SJMP $ 是相对转移指令 是用在主程序中的,可以作为暂停。等价于 LL: SJMP LL 就是又跳转到这条指令的本身,反复执行...
就是一个无限循环 SJMP是个短跳转 就是当前指令的起始地址
在汇编语言中$是个比较特殊的字符,它代表当前地址。因此"SJMP $"的意思是,程序跳转到当前地址,即PC指针停留在当前地址。
正常的程序,如果有“SJMP $ 语句”,程序就会停在此处,等待中断,(没有中断,就会死机。)没有“SJMP $ 语句”,就会向下继续执行,就会把END后面的乱码当做程序来执行。
代指本指令的地址。如果SJMP $的起始地址是1010H,则在编译的时候编译器把$编译为这个起始地址1010H,就等于SJMP 1010H,执行完这指令后还跳到这个地址再执行它。无限循环直到单片机没电。
就是指本行程序的地址,就是代表本行程序的标号,是唯一一个无需声明就能使用的标号。如:sjmp $,就是跳转到本行,也就是使程序停在这里,直到复位。
本例中有两条指令“MOV A,12H”与“SJMP$”,其机器代码分别是“E512H”和“80FEH”,被连续存放在ROM的字节单元中,存放的起始单元地址由“ORG 0000H”确定为“0000H”。END代表这个程序的结束。 4.定义字节伪指令DB 伪指令DB用于定义字节型的变量,其格式为: ...
你这是用了一个非常简单程序来说的,就这么几条指令,而且执行到最后是一个SJMP $,即死循环,这一点肯定是永远在执行这一条指令了,那中断时即是从这一条响应中断的,返回时也是返回到这一条了。可凡事不能以一个简单的特例的结果来概括全面问题,而实际上一个真正的应用程序是不可能有SJMP $...