首页 理论教育单片机基础:无条件转移指令

单片机基础:无条件转移指令

【摘要】:无条件转移指令共有以下4条:1.LJMP addr16LJMP addr16指令是3个字节指令,其机器码为02H,addr15~8,addr7~0。3.SJMP relSJMP rel指令是相对寻址方式转移指令,其中rel为偏移量,偏移量rel是一个带符号的8位二进制补码数。因此,有时也称其为散转指令。4条无条件转移指令的功能相同,不同之处在于转移的范围。其中长转移指令LJMP的转移范围最大,为64KB。短转移指令SJMP的转移范围最小,仅为256字节。

无条件转移指令共有以下4条:

1.LJMP addr16(无条件长转移)

LJMP addr16指令是3个字节指令,其机器码为02H,addr15~8,addr7~0。该指令执行时,将指令的机器码中的第2、3字节地址码分别装入程序计数器(PC)的高8位和低8位中,程序无条件地转移到指定的目标地址去执行。由于LJMP指令提供的是16位地址,因此指令可以转向64KB的ROM地址空间的任何单元

例如,若标号“TABP”表示转移目标地址1234H,该目标地址是指向程序存储器1234H的单元。执行指令LJMP TABP时,转移的目标地址将装入程序计数器(PC)中,使程序立即无条件转向目标地址1234H处运行。

2.AJMP addr11(无条件绝对转移)

AJMP addr11指令为2个字节指令,其机器码为

即指令提供的11位地址addr10~0(A10~A0)中,其中A7~A0占第2字节,A10~A8占第1字节的高3位,低5位指令操作码。

AJMP指令的功能是构造程序转移的目标地址,实现程序的转移。但应注意的是,被替换的PC值是本条AJMP指令地址加2以后的PC值,即下一条指令的PC值。其构造方法是以指令提供的11位地址替换PC的低11位内容,高5位不变,形成新的PC值,此即程序的目标地址。因此,AJMP只能在2KB范围内跳转,即转入的存储单元地址的高5位地址编码与程序计数器(PC)当前值地址高5位必须相同,否则会出现跨页错误。64KB的程序空间划分为32个连续的2KB的空间,每2KB空间称为1页。

【例3-16】设某程序中有指令AJMP NEXT,该指令所在的地址为3456H,已知这条指令的机器码为0C188H,则目标地址NEXT是多少?

【解】(1)首先(PC)+2=3456H+2=3458H,

(PC)←(PC)+2,(PC)=3458H,则PC=0011 0100 0101 1000B。

(2)机器码0C188H=1100 0001 1000 1000B,将下划线的11位地址取出,即

A10~A0=110 1000 1000B。

(3)NEXT的地址为0011 0110 1000 1000B=3688H,也就是说,执行该指令后,程序转移到程序存储器的3688H地址处去执行了。(www.chuimin.cn)

3.SJMP rel(无条件短转移)

SJMP rel指令是相对寻址方式转移指令,其中rel为偏移量,偏移量rel是一个带符号的8位二进制补码数。该指令目标地址的计算公式为(PC)+2+rel。其中PC的内容是该转移指令所在的指令地址,即该指令可以使程序在该指令之后的第一个字节开始的前128字节到后127字节范围内作无条件的转移。

【例3-17】设某程序中有指令SJMP TABP,该指令地址为0100H,若标号“TABP”表示转移目标地址0123H,则转移的偏移量为多少?

【解】rel=0123H-(0100H+2)=21H。

重要提示:实际使用SJMP指令时,在大多数情况下不采用SJMP rel形式,而是采用SJMP<标号>的形式。前面叙述中已提到,标号就是地址的符号化,因此偏移量的计算均由单片机自动完成。

【例3-18】试分析如下转移指令的功能:

【解】程序在该条指令处原地址无限循环(原地踏步),该功能指令有时也可以写成SJMP 的形式。

4.JMP @A+DPTR(无条件间接转移)

JMP @A+DPTR指令为一字节无条件转移指令,转移的地址由累加器A的内容和数据指针DPTR的内容之和来决定,两者都是无符号数。一般是以DPTR的内容为基址的,而由A的值作为变址来决定具体的转移地址。这条指令的特点是转移地址可以在程序运行中加以改变。例如,当DPTR为确定的值时,根据A值的不同来控制程序转向不同的程序段,实现多分支程序转移。因此,有时也称其为散转指令。

例如,若已知(A)=10H,(DPTR)=2000H,执行指令

后结果为:(PC)=2010H。

4条无条件转移指令的功能相同,不同之处在于转移的范围。其中长转移指令LJMP的转移范围最大,为64KB。绝对转移指令AJMP的转移范围为2KB。短转移指令SJMP的转移范围最小,仅为256字节。变址转移指令JMP的转移范围为64KB。但需要注意的是,程序转移都是在程序存储器地址空间范围内进行的。