SJMP $的作用是什么?

作者&投稿:卷翰 (若有异议请与网页底部的电邮联系)
单片机编程中,END\AJMP $\SJMP $,有什么区别?~

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

原地转移,一般来说,就是死机了。

如果中断开放,满足条件时,也可以转入到中断程序里面去。

SJMP $的作用相当于C中的while(1)程序在 原地执行,SJMP占两个字节,SJMP rel;(PC)<-(PC)+2 然后(PC)<-(PC)+rel这里rel是相对地址 编译器编译时会自动的算出他相对此时相对(PC)的地址,就如你说的SJMP $这里美元符号指的是当前的地址,就是说要跳转到当前地址,假设你SJMP的其实地址是1000H,同时这个指令时占两个字节所以执行后程序计数器指向了1002H那么现在我们的美元符号指在刚才的当前地址1000H,所以这里相对地址就应该是-2,这个编译器自动完成。昨天刚问过老师不知道你能不能看懂

sjmp $
是原地跳转的指令。
作用:1,可以防止程序乱跳。
2,等待中断发生。

51单片机指令。
功能:短转移(Short Jump)
格式:SJMP rel ;
作用: PC

PC+2 , PC

PC+rel
短转移指令(-126—+129范围内的转移指令)
  短转移指令的功能是先使程序计数器PC加1两次(即:取出指令码),然后把加2后的地址和rel相加作为目标转移地址。因此,短转移指令是一条相对转移指令,是一条双字节双周期指令,指令码格式为:80H rel(操作码 地址偏移量),这里,80H是SJMP指令的操作码;rel是地址偏移量,在程序中也常采用符号地址,上机运行前才被代真成二进制形式。
  注意:遇到具体问题时,头脑中一定要清楚一个关系式:目标转移地址=源地址+2+rel

跳到主函数main,主函数的地址:0040H

$就是当前行

一般用在等待中断的主程序中


灵宝市19765572785: 汇编中SJMP$什么作用 -
西坚丽科: 原地踏步 相当于c中的while(1)

灵宝市19765572785: 51单片机汇编语言中 SJMP $ 是什么意思 -
西坚丽科: 就是一个无限循环 SJMP是个短跳转 $就是当前指令的起始地址

灵宝市19765572785: 单片机中 为什么要用SJMP $ -
西坚丽科: 单片机运行到 SJMP $ 时就原地踏步,不再往下执行,也就是死循环.一般主程序的最后一句就是SJMP $,然后往下就是子程序,包括中断处理程序.

灵宝市19765572785: 单片机程序中SJMP $指令怎样用? -
西坚丽科: $ 代表本指令的地址 sjmp $ 就是跳到此处,也就是原地踏步,是个死循环.让程序停在此处.

灵宝市19765572785: 单片机,中断程序中结尾会有《SJMP $>是什么意思有什么用啊 -
西坚丽科: 是原地跳转指令 的确是死循环,所以可以不用,一般用来等待中断 如果有中断会转到中断程序运行,否则原地跳转 这条指令应该在主程序里,不会在中断程序里吧

灵宝市19765572785: 程序结束为什么 SJMP$ -
西坚丽科: SJMP$表示跳转到本语句,也就是说,在这条语句上死循环.通常在程序结束或进入主循环,等待中断发生时会用到这条命令.

灵宝市19765572785: 关于单片机里的SJMP $,知道的请进 -
西坚丽科: SJMP $是在原地循环,一般都用在等待中断到来,然后进入中断处理程序. 处理完了,再继续在原地循环.比如你的手机现在不用了,估计也在这里循环,你按下键,它就当是有中断 来了,就去处理,处理完了,它又开始循环等待你的操作了.END是每个程序必须写的指令,如果你的程序走到了这条指令就停下来了. 一般的程序是不会让它走到这条指令的,因为走到了就结束了,不能去处理 你的实时中断了.

灵宝市19765572785: sjmp $ 是干什么的! -
西坚丽科: 等待中断或者无条件跳转嘛 http://www.kerneltravel.net/journal/viii/01.htm

灵宝市19765572785: 汇编语言中ret和SJMP $有什么区别,为什么有些程序结束的时候是用SJMP $ 而有些时候是用RET呢?? -
西坚丽科: RET 是子程序返回指令,运行到RET时将从堆栈中弹出调用时的地址值给程序计数器PC. SJMP $是转移到前地址的指令,是原地等待的死循环,只有中断可以跳出,中断结束后仍然会回到这里死循环. 有些程序结束时用到SJMP $是因为该单片机主要依靠中断完成各项功能控制,主程序就处于死循环状态,如果没有的话,那么单片机就会陷入混乱状态了,因为程序不知道飞到哪里去了,尽管有 中断时也可以执行中断,但一旦结束中断,程序又乱执行了,所以程序不可控,这也是这句语句所起的作用.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网