MCS-51的控制转移类指令共17条,分为無条件转移指令、条件转移指令、子程序调用和返回指令、空操作指令等四类
无条件转移指令(共4条) 第一条指令称为长转移指令(Long Jump); 第二条指令叫作绝对转移指令(Absolute Jump); 第三条指令称作短转移指令(Short Jump); 第四条指令是变址寻址转移指令(散转指令)。 显然每条指令均以改变程序计数器PC(Program Counter)中的内容为宗旨。 (1)长转移指令(64KB范围内转移指令) 长转移指令的功能是:把指令码中的目标地址addr16装入程序计數器PC使机器执行下一条指令时无条件转移到addr16处执行程序,不影响任何标志由于addr16是一个16位二进制地址(地址范围为0000H—FFFFH),因此长转移指囹一条可以在64KB范围内转移的指令为了使程序设计方便易编,addr16常采用标号地址(如:LOOP、LOOP1、MAIN、START、DONE、NEXT1……)表示只有在上机执行前才被汇编(或代真)为16位二进制地址。 长转移指令为三字节双周期指令。 在下载的这个8051DEBUG软件中不支持标号,且程序状态字PSW(Program State Word)中的D0位即奇偶標志位P,与正确的正好相反这一点是错误的,用的时候留意一下 只要记好:累加器ACC中1的个数为奇数,则P=1;否则P=0 (2)绝对转移指令(2KB范围内的转移指令) 其中,a10—a0的地址范围是全“0”——全“1”因此,绝对转移指令可以在2KB范围内向前或向后跳转 (3)短转移指令(-126—+129范围内的转移指令) 短转移指令的功能是先使程序计数器PC加1两次(即:取出指令码),然后把加2后的地址和rel相加作为目标转移地址因此,短转移指令是一条相对转移指令是一条双字节双周期指令,指令码格式为:80H rel(操作码 地址偏移量)这里,80H是SJMP指令的操作码;rel是地址偏移量在程序中也常采用符号地址,上机运行前才被代真成二进制形式 遇到具体问题时,头脑中一定要清楚一个关系式:目标转移地址=源地址+2+rel (4)变址寻址转移指令(只能在256个存储器单元内转移) 这是一条单字节双周期无条件转移指令 在指令执行之前,用户应预先把目标转移地址的基地址送入DPTR目标转移地址对基地址的偏移量放在累加器A中。在指令执行时MCS-51单片机把DPTR中基地址和累加器A中地址偏移量相加,以形成目标转移地址送入程序计数器PC中 通常,DPTR中基地址是一个确定的值常常是一张转移指令表的起始地址,累加器A中之值为表的偏移量地址机器通过变址寻址转移指令便可实现程序的分支转移跳转的范围不一样,可以说是到达的远近距离不一样存储空间占用不┅样。 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个时钟周期 完整的Word格式文档51黑下载地址: |