SJMP $ 是原地转移的意思。说它是延时,这个“时间”可是无限的;说它是“死机”也差不多。但是,它在原地转移的时候,可能插入中断,所以,它还不是真正的死机。
汇编语言中:1 ret和SJMP $相同点: 都属于转移指令。2 ret和SJMP $区别:ret是子程序返回指令,放在子程序的结尾,当子程序执行完后,靠该指令返回主程序。SJMP $ 是相对转移指令 是用在主程序中的,可以作为暂停。等价于 LL: SJMP LL 就是又跳转到这条指令的本身,反复执行...
就是一个无限循环 SJMP是个短跳转 就是当前指令的起始地址
正常的程序,如果有“SJMP $ 语句”,程序就会停在此处,等待中断,(没有中断,就会死机。)没有“SJMP $ 语句”,就会向下继续执行,就会把END后面的乱码当做程序来执行。
本例中有两条指令“MOV A,12H”与“SJMP$”,其机器代码分别是“E512H”和“80FEH”,被连续存放在ROM的字节单元中,存放的起始单元地址由“ORG 0000H”确定为“0000H”。END代表这个程序的结束。 4.定义字节伪指令DB 伪指令DB用于定义字节型的变量,其格式为: ...
就是指本行程序的地址,就是代表本行程序的标号,是唯一一个无需声明就能使用的标号。如:sjmp $,就是跳转到本行,也就是使程序停在这里,直到复位。
当前指令位置 DJNZ R4,$ ;r4不等于0就一直原地循环 SJMP $ ;一直原地循环,相当于死循环 MOV SP,#5FH ;栈初始化,因为可能要用到压栈指令
DEL,DLYRAM是标记号,后面跟有:(冒号)是本汇编行的地址,举个例子:SJMP 这一句,就相当于 Loop:AJMP Loop
SJMP $ ; 。SORT: ; 数据冒泡排序程序 MOV R6, #16 ;参加排序数据的总个数 DEC R6 ; 比较次数 比 数据总数 少 1 L1:MOV R0, #40H ; 把数据的起始地址40h付给R0 MOV A, R6 ;调整比较次数 MOV R7, A CLR F0 ...
SJMP $ ;暂停 YS: MOV R7,#4 ; 单周期1uS ( 晶振为12MHz) 延时1秒子程序DEL1: MOV R6,#123 ; 单周期1uSDEL2: DJNZ R6,DEL2 ; 双周期2uS*123=246uS DJNZ R7,DEL1 ; 双周期(2us+246+1)*4=996uS NOP ; 单周期1uS RET; ...