㈠ 单片机中的AJMP LJMP SJMP JMP有什么区别
1、字节不同
SJMP 如果跳转到的标号地址距离当前PC所指的地址小于256字节,用SJMP。
AJMP 如果跳转到的标号地址距离当前PC所指的地址小于2K字节,用AJMP。
LJMP 如果跳转到的标号地址距离当前PC所指的地址小于64K字节,用LJMP。
ACALL是调用的子程序入口地址距离当前PC所指地址需介于0~2K,LCALL是0~64K。
2、跳转的范围不一样。
AJMP 的范围是11位地址,也就是2K的空间内,占用存储空间2个字节,执行周期24个时钟周。
LJMP 的范围是16位地址,也就是64K的空间内,占用存储空间3个字节,执行周期24个时钟周期。
SJMP 的范围是8位地址,也就是256BIT的空间内,占用存储空间2个字节,执行周期24个时钟周期。
JMP一般配合DPTR使用,存储空间1个字节,执行周期24个时钟周期。一般用于多分枝选择的时候使用,比如按键处理。
ACALL,LCALL和以上说明类似,是调用指令,ACALL占用存储空间2个字节,执行周期24个时钟周期。LCALL占用存储空间3个字节,执行周期24个时钟周期。
(1)单片机ajmp扩展阅读:
①短程转移(直接短转移)
指令格式:JMP SHORT OPRD
语法格式: JMP 地址标号 ;(IP)←(IP)+8位位移量
指令功能:OPRD为转移地址的标号,指令中的SHORT规定了OPRD为有符号的8位二进制数,OPRD为转移地址的偏移量。该指令将程序执行的顺序转移到由(IP)+OPRD形成的新的程序执行的目标地址,从而实现程序的转移。
转移的目标地址OPRD在指令中可以直接使用标号地址,但要求转移的目标地址的范围只能在JMP指令所处地址的-128~+127字节范围之内,如超出该范围,汇编时出错。
② 近程转移(段内直接转移)
指令格式:JMP NEAR PTR OPRD
语法格式: JMP 地址标号 ;(IP)←(IP)+16位位移量
指令功能:与短程转移的功能和要求相同,不同之处是近程转移的OPRD为有符号的16位二进制数,指令将程序执行的顺序转移到由(IP)+OPRD形成的新的程序执行的目标地址。
转移的目标地址的范围只能在JMP指令所处地址的-32768~+32767字节范围之内,如超出该范围,汇编时出错。使用该指令时NEAR可省略
③段间直接转移(远程转移)
指令格式:JMP FAR PTR OPRD
语法格式: JMP 地址标号 ;(IP)←新的偏移地址, ;(CS)←新的代码段地址
指令功能:指令中用FAR PTR规定了该指令为段间的转移,OPRD为目的地址的标号,目的地址与JMP指令所在地址不在同一段内。执行该指令时要修改CS和IP的内容,将OPRD所在段的段地址送CS中,OPRD的段内偏移地址送IP中。
④ 段内间接转移
指令格式:JMP WORD PTR OPRD
语法格式:JMP reg16/mem ;(IP)←新的偏移地址
指令功能:与短程转移的功能和要求相同,不同之处是段内间接转移的OPRD 可以是除立即数外的任何寄存或存储器寻址方式,转移的目标地址由OPRD的内容确定。
⑤ 段间间接转移
指令格式:JMP DWORD PTR OPRD
语法格式:JMP mem32
指令功能:指令中用DWORD PTR规定了该指令为段间间接转移,OPRD只能是存储器寻址方式。执行该指令时将寻址到的内存单元的第一个字送入IP中,第二个字送入CS中。
㈡ 单片机AJMP有什么用
类似的无条件转移指令共有三条:LJMP、AJMP和SJMP。
LJMP转移的范围最大,可达64K,但是其指令为三个字节。
AJMP转移的范围稍小,只有2K,但是其指令为两个字节。
多年前,单片机的ROM的容量小,外接芯片价格也很贵,AJMP就较受青睐;
目前,ROM容量已经不算什么问题,编程时,用了多少字节,多数情况下都不用考虑。所以,AJMP指令的优点,就不被人看重了。
现在,AJMP几乎就没有什么必要使用了,完全可以用LJMP代替。
㈢ 单片机AJMP指令和LJMP指令有何区别
区别如下:
1、定义不同。
AJMP是无条件跳转指令之一,叫做绝对跳转。而LJMP则是长转移指令。如果一个程序代码在2KB以内(是指编译后的BIN代码),可以用AJMP指令。如果一个程序代码超过了2KB,就要用LJMP指令了。
2、范围不同。
AJMP 跳转的范围是2KB之内的,就是AJMP指令和跳转的目的地址在ROM中的同一个2KB范围内。
LJMP 跳转的范围是64KB全部的ROM存储区。
3、使用功能不同。
AJMP主要是用来改变程序执行的路线,到需要的指令或程序去执行。ljmp长转移指令的功能是:把指令码中的目标地址addr16装入程序计数器PC,使机器执行下一条指令时无条件转移到addr16处执行程序,不影响任何标志。
㈣ 单片机AJMP的问题
ROUT0123
什么的是个标号,随便放在哪都可以的.
这段程序的意思是程序跳转到离TABLE标号偏移为A的地方继续执行,
下边的TABLE标号那里是一连串的跳转语句,每个语句两字节,所以编译后AJMP
ROUT1、AJMP
ROUT2、AJMP
ROUT3是连续的六个字节。
要用JMP
@A+DPTR跳转到AJMP
ROUT2,A要先赋值为02H,
跳转到AJMP
ROUT3,A就得是04H,以此类推。
㈤ MCS51单片机AJMP指令执行后PC的值如何计算
AJMP 占用2个字节,所以如果你问的是 AJMP后面一行的指令PC的话,就是当前值+2.
㈥ 单片机知识,执行AJMP DR后,PC的内容是什么
(1)8051单片机指令系统中有长跳转LJMP,长调用LCALL指令、短跳转AJMP,短调用ACALL指令区别?
在实际应用中,可从寻址范围和指令长度两个方面来选择长跳转指令LJMP和短跳转指令AJMP、长调用指令LCALL和短调用指令ACALL。
长跳转LJMP在64KB范围内转移,而短跳转AJMP只能在2KB空间转移。
长调用LCALL调用位于64KB程序空间的子程序,而短调用ACALL调用位于2KB程序空间范围的子程序。
AJMP、ACALL指令代码长度为2个字节;LJMP、LCALL指令代码长度为3个字节。
http://www.dpj100.com/ling/20090903427.html
(2)中断返回与子程序返回的相同点与区别点
调用中断服务子程序和调用子程序时都会把当前偏移地址的下一地址压栈,
相同点:
从堆栈中弹出由调用指令压入堆栈保护的断点地址,并送入指令计数器pc,函数返回到断点处继续执行;
区别点:
调用子程序的返回指令是RET,中断服务子程序返回指令时RETI,
RET不影响标志位,但RETI会清除内部相应的中断状态寄存器。
http://..com/question/81215113
(3)编写中断函数应该注意的几点
两个相邻中断服务程序的入口地址相距只有8个字节,一般的中断服务子程序是放不下的,应该放在其它位置,使用LJMP/AJMP跳转调用。
硬件LCALL调用,只是将PC内的断点地址压入堆栈保护,所以要保护现场(对其他寄存器(程序状态字寄存器PSW、累加器A等)的内容作保存)。
(4)单片机晶振的两个电容的作用
这两个电容叫晶振的负载电容,分别接在晶振的两个脚上和对地的电容,一般在几十皮发。它会影响到晶振的谐振频率和输出幅度,
晶振与两个电容一起构成一个电容三点式振荡器,晶体旁边的两个电容接地, 实际上就是电容三点式电路的分压电容,当两个电容量相等时, 反馈系数是 0.5, 满足振荡条件。
㈦ 单片机语句AJMP $
"$"代表了 当前行的偏移量
就好像 HERE:AJMP HERE
但是你写AJMP $
效果也是一样
就是一直停留在那一行
㈧ 51单片机的汇编指令中AJMP 和SJMP都是两个字节,都是两个机器周期,它们有什么区别呢
AJMP是短转移指令。其转移范围为当前指令地址高5位相同的2K范围。
SJMP为相对转移指令。其转移范围为当前指令地址-128~+127范围。
㈨ 单片机80c51编程AJMP MAIN
中断是由硬件跳转的,也就是说如果你配置好了相应的中断并且产生了中断事件,那么单片机就会将PC值跳转到对应的中断矢量入口。之后就会从入口处跳转到相应的中断服务程序了。
例如在你这个例程里面,当定时器0中断事件产生以后,不管你的主程序愿意不愿意,都会直接蹦到000Bh入口,并且执行AJMP INQP,跳转到T0中断的服务程序执行,并且在执行RETI后才会回到被打断的主程序位置。
㈩ 单片机程序中程序结尾AJMP $是什么意思
跳转到本行,就是一个死循环,使程序停在这里。
$是一个(也是唯一一个)不需要定义的地址标号,代表当前行命令的地址。
不过SJMP $用得更多。