Ⅰ 单片机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问题
M_TAB是下面四个跳转指令的首地址,到底执行哪个跳转指令由A中的内容确定,AJMP后面的数字都是表示地址
Ⅲ 单片机中的短跳转指令AJMP其转移目标指令地址怎么算
AJMP
addr11
说明:把11位的addr11内容直接给PC(16位的指针)的PC0——PC10位。
这样的话addr11=00100000000B=0100H,原来PC=1030
推出转移地址为:1100
同样的道理原来的PC=3030时,算出转移地址为:3100
仔细看一下书本,看你的困惑不是不了解这个地址是11位的问题,应该是和其他的指令搞混淆了。
SJMP
rel
PC=(PC)+rel
LJMP
addr16
PC=addr16
AJMP
addr11
PC10-0=addr11
这下你明白了吗,个人认为自己回答的还很透彻,记得给分哟
Ⅳ 单片机程序中程序结尾AJMP $是什么意思
跳转到本行,就是一个死循环,使程序停在这里。
$是一个(也是唯一一个)不需要定义的地址标号,代表当前行命令的地址。
不过SJMP $用得更多。
Ⅳ 单片机中的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个时钟周期。
(5)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 $”若去掉会如何
AJMP $ ; 本身就是一条死循环指令,在实际应用中 一般不会用的,
; 只是调试程序时 可能会这样用。
Ⅶ 单片机AJMP的问题
ROUT0123
什么的是个标号,随便放在哪都可以的.
这段程序的意思是程序跳转到离TABLE标号偏移为A的地方继续执行,
下边的TABLE标号那里是一连串的跳转语句,每个语句两字节,所以编译后AJMP
ROUT1、AJMP
ROUT2、AJMP
ROUT3是连续的六个字节。
要用JMP
@A+DPTR跳转到AJMP
ROUT2,A要先赋值为02H,
跳转到AJMP
ROUT3,A就得是04H,以此类推。
Ⅷ 单片机:AJMP指令的跳转范围是2K,SJMP $ 偏移量是多少
SJMP的偏移量是8位补码,-128~+127。
Ⅸ 单片机AJMP有什么用
类似的无条件转移指令共有三条:LJMP、AJMP和SJMP。
LJMP转移的范围最大,可达64K,但是其指令为三个字节。
AJMP转移的范围稍小,只有2K,但是其指令为两个字节。
多年前,单片机的ROM的容量小,外接芯片价格也很贵,AJMP就较受青睐;
目前,ROM容量已经不算什么问题,编程时,用了多少字节,多数情况下都不用考虑。所以,AJMP指令的优点,就不被人看重了。
现在,AJMP几乎就没有什么必要使用了,完全可以用LJMP代替。
Ⅹ 为什么在用单片机汇编编程时,开头都要写上 ORG 0000H AJMP MAIN ORG 0030H这些呢请各位大侠多多指点!
原因:单片机中,0000H单元为系统启动地址,ORG 0000H AJMP MAIN 就是在该地址存放一条绝对跳转指令,转入主程序的入口地址。ORG 0030H 是为了把用户程序定位到用户RAM区(30H-7FH),0000H-0030H存储单元地址是有其他特殊功能的。
在汇编语言源程序的开始通常都用一条ORG伪指令来实现规定程序的起始地址。如果不用ORG规定则汇编得到的目标程序将从0000H开始。程序从ROM的0000开始存放程序,但是AJMP MAIN是一条无条件跳转指令,也就是说,单片机上电之后首先从0000处开始执行程序。
但是,AJMP直接将程序跳转到MAIN标号指向的存储区域开始取指令,并执行,而一般MAIN标号是放在语句ORG 0030之后的,也即,主程序是从0030这个地址开始存放的。
(10)ajmp单片机扩展阅读:
单片机数据存储器的特殊区段:
1、工作寄存器区(00H-1FH)
在00H-1FH共32个单元,被均匀地分为四组工作寄存器堆:RB0、RB1、RB2、RB3,每组寄存器堆包含8个工作寄存器,均以R0-R7来命名,这些寄存器被称为通用寄存器。工作寄存器用于临时存放8位信息。在使用时,由程序状态字寄存器中的RS0、RS1来选择工作寄存器堆。
2、位寻址区(20H-2FH)
片内数据存储器的20H-2FH存储区为位寻址区,既可作为一般单元按字节寻址,也可按位进行寻址。位寻址区有16个字节,位地址为00H-7FH。