单片微机原理与接口技术——8051汇编指令系统与编程基础(4)控制转移及位操作指令

一、控制转移指令

1.长转移指令

LJMP	addr16/标号

addr16→PC,程序无条件地转向addr16指定的目的地址。跳转范围64KB

2.相对转移指令

SJMP	rel /标号

2字节指令,rel为带符号8位相对偏移量,(PC)+rel → PC。
目的地址标号的相对偏移量由汇编程序自动计算。
例如:

LOOP: MOV A,R6
……
SJMP LOOP

3.绝对转移指令

AJMP	addr11 /标号

在这里插入图片描述
指令双字节,操作码00001B只占第1字节的低5位。
构造转移目的地址: addr11(A10~A0)送入PC.10~PC.0,PC.15~PC.11保持不变,形成16位转移目的地址。
**注意:**目标地址高5位必须与PC的高5位相同,否则将混乱。
是2KB范围内的无条件跳转指令。

4.间接跳转指令

JMP   @A+DPTR

单字节指令,(A)+(DPTR) →PC。
给A赋予不同值,即可实现多分支转移。
5.条件转移指令
如条件满足,则(PC)+rel → PC转移;
不满足,则顺序执行下一指令。
==JZ rel /标号;==如果累加器内容为0,则执行转移
==JNZ rel /标号;==如果累加器内容非0,则执行转移

6.比较不相等转移指令

	CJNE	A,direct, rel /标号
	CJNE	A,#data, rel /标号
	CJNE   Rn,#data, rel /标号
	CJNE   @Ri,#data, rel /标号

比较前两个操作数,如果不相等则转向目的地址。
该指令不影响任何一个操作数的内容。

7.减1不为0转移指令

DJNZ	Rn, rel /标号	;n =0~7
DJNZ	direct, rel /标号

预先装入循环次数,实现按次数控制程序循环

8.调用子程序指令

(1)长调用指令

 LCALL	  addr16

3字节指令,不影响任何标志位。
先把下一条指令的地址(断点地址)压入堆栈(先低字节,后高字节),(SP)+2→SP ,接着addr16→PC 跳转。
(2)绝对调用指令

ACALL     addr11

与AJMP指令类似,不影响标志位。

9.子程序的返回指令

RET

(SP)→PCH, (SP)-1→SP
(SP)→PCL, (SP)-1→SP
将栈顶保存的断点地址送回PC,继续执行主程序。
不影响任何标志位。

10.中断返回指令 RETI

RET相似,但清除了中断响应时被置1的优先级寄存器。

11.空操作指令 NOP

仅执行(PC)+1→PC操作,耗一个机器周期时间。

二、位操作类指令

1.数据位传送指令

MOV	C,bit
MOV	bit,C

bit是任何直接寻址位,为地址或位名。不影响标志位。例如:

MOV C,06H ;(20H).6→Cy
06H是位地址,是内部RAM 20H字节位6的位地址。
MOV P1.0,C ;Cy→P1.0

2.位变量修改指令

CLR		C		;Cy位清0
CLR   	bit		;bit位清0 
CPL   	C		;Cy位求反
CPL   	bit		;bit位求反
SETB  	C		;Cy位置1 
SETB  	bit		;bit位置1 

将位操作数指清0、求反、置1,不影响其他标志位。例如:

CLR C ;Cy位清0
CLR 27H ;0→(24H).7位
CPL 08H ; →(21H).0位
SETB P1.7 ; P1.7位置1

3.位变量逻辑与指令

ANL  	C, bit  	;bit∧Cy→Cy
ANL  	C, /bit		;/bit∧Cy→Cy

4.位变量逻辑或指令

ORL	C,bit
ORL	C,/bit

/bit先对直接寻址位求反,然后与位累加器C进行逻辑运算,结果送回到C中。

5.条件转移类指令

JC  rel /标号 ;如进位标志位Cy=1,则转移
JNC rel /标号 ;如进位标志位Cy=0,则转移
JB  bit,rel /标号 ;如(bit)= 1,则转移
JNB bit,rel /标号 ;如(bit)= 0,则转移
JBC bit,rel /标号 ;如(bit)=1,转移并把寻址位清0

三、某些指令的说明

1. 并行I/O口“读引脚”和“读锁存器”的区别

凡“读取I/O口前一状态修改后再送出”,都是读锁存器 。
读引脚之前,一定要先送出高电平。
MOV C,P1.0 / MOV A,P1;MOV是只读,读引脚。
CPL P1.0 / ANL P1,A;是读锁存器,即“读-修改-写”。
类似的“读-修改-写”指令:

INC P1
XRL P3,A
ORL P2,A
ANL P1,A
CPL P3.0

2. 操作数字节地址和位地址的区分

观察另一操作数就可看出。
例如:

MOV C,40H

位地址,因为目的操作数C是位变量。

MOV A,40H

字节地址,因为目的操作数A是字节变量。

3. 累加器A与Acc的书写

Acc汇编后机器码含字节地址E0H,A则隐含在操作码中。例如:

INC A机器码是04H。
INC Acc则机器码为05H E0H。

在对累加器A直接寻址和累加器A的位寻址要用Acc。
例如:

POP Acc
SETB Acc.0

发布了10 篇原创文章 · 获赞 6 · 访问量 347

猜你喜欢

转载自blog.csdn.net/weixin_45367147/article/details/105503607