MCS-51指令系统

  • 3.1 指令系统概述
  • 3.1.1 指令与指令系统
  • 3.1.2 程序与程序设计
  • 3.1.3 汇编语言
  • 3.1.4 伪指令(常用)
  • 3.1.5 MCS-51 指令系统的特点
  • 3.2 MCS-51寻址方式
  • 3.2.1 立即寻址
  • 3.2.2 直接寻址
  • 3.2.3 寄存器寻址
  • 3.2.4 寄存器间接寻址
  • 3.2.5 基址寄存器+变址寄存器间接寻址
  • 3.2.6 相对寻址
  • 3.2.7 位寻址
  • 3.3 MCS-51 指令系统介绍
  • 3.3.1 数据传送指令(29条)
  • 3.3.2 算术运算指令(24条)
  • 3.3.3 逻辑运算指令(24条)
  • 3.3.4 控制转移指令(17条)
  • 3.3.5 布尔处理类指令(17条)
  • QQ交流群

3.1 指令系统概述

3.1.1 指令与指令系统

每个机器的指令系统都是固有的,无法改变

3.1.2 程序与程序设计

按预定要求编排的指令叫做程序

3.1.3 汇编语言

用助记符,操作数,标号编写的程序叫做汇编
		二进制机器码翻译成汇编语言---反汇编
		标准格式
			1、标号
				存放该指令的地址
					必须字母开头,:号结尾
			2、操作码
				由指令系统的助记符组成(如MOV)
					操作码和操作数间用,隔开
			3、操作数
				可以为:数字、操作数地址、立即数、标号、寄存器名
					可分目的操作数和源操作数
			4、注释
				以;开头

3.1.4 伪指令(常用)

1、起点指令 ORG
				ORG 地址(XXXXH)
					给程序起始地址或数据块的起始地址赋值命令,可多次使用,以规定不同程序起始位置;
			2、结束命令 END
				END
					汇编程序结束(必有)
			3、定义字节命令 DB
					标号: DB 字节常数或字符
					从指定单元开始,定义若干个8位存储单元
						1、若DB命令在其他源程序之后,则源程序的最后一条指令之后就时DB定义的数据表格
						2、由ORG定义的数据块首址
			4、定义字节命令 DW
					标号:DW  字或字表
					从指定单元开始,定义若干个字(双字节)
			5、 定义空间命令 DS
					标号:DS 数据或字符表达式
					从指定单元开始,由数据或表达式确定保留若干个字节内存空间备用
			6、 等值命令EQU
					字符名称 EQU 数据或汇编符号
					把一个数据或特定的汇编符号赋予标号段规定的字符名称(类似define)必须先定义后使用
			7、数据地址赋值命令 DATA
					字符名称 DATA 数据或表达式
					此命令把数据地址或代码地址赋予标号段规定的字符名称,可以先使用后定义
			8、 位地址符号命令 BIT
					字符名称 BIT 位地址
					把位地址赋予标号段的字符名称

3.1.5 MCS-51 指令系统的特点

1、布尔处理机
			位处理器
				布尔运算器ALU
				布尔累加器CY
				布尔RAM
				布尔IO口
				布尔指令集
		2、寻址方式
			立即寻址
			直接寻址
			寄存器寻址
			寄存器间接寻址
			基址寄存器加变址寄存器的间接寻址
			相对寻址
			位寻址
		3、指令分类
			数据传送(29条)
			算术运算(24条)
			逻辑运算(24条)
			控制转移(17条)
			布尔处理(17条)
			
		*描述指令的符号意义:
				Rn
					R0-R7 8个工作寄存器
				Ri
					R0-1 可做间址寄存器的2个寄存器
				direct
					8位内部数据存储单元的地址(自己定义)
				#data
					包含在指令中的8位立即数
				#data16
					包含在指令中的16位立即数
				addr16
					16位目的地址
				addr11
					11位目的地址
				rel
					8位带符号的偏移量
				DPTR
					数据指针地址,可做16位间址寄存器
				bit
					内部RAM或专用寄存器的直接寻址位
				A
					累加器
				B
					专用寄存器
				C
					进位或借位标志
				@
					间址寄存器或基址寄存器的前缀
				/
					位操作的前缀,表示取反
				(X)
					X中的内容
				((X))
					由X寻址的单元中的内容
				<-
					箭头左边的内容被右边的内容代替

3.2 MCS-51寻址方式

(寻址方式反应了计算机的性能)

3.2.1 立即寻址

1、寻址空间
			程序存储器
		2、指令形式
			操作码 + 立即数
		(立即数要在前面加#)

3.2.2 直接寻址

1、寻址空间
			内部RAM的低128位字节
			特殊功能寄存器SFR(直接寻址是唯一访问SFR的方式)
		2、指令的三种形式

3.2.3 寄存器寻址

1、寻址空间
			R0-R7

A、B、CY、DPTR
2、三种指令形式 ;eg:MOV A ,R3

3.2.4 寄存器间接寻址

1、寻址空间
			内部RAM
			外部数据存储器
		2、指令三种形式 (指令前缀加@)

3.2.5 基址寄存器+变址寄存器间接寻址

1、寻址空间
			程序存储器(@A+DPTR,@A+PC)
		2、指令形式

3.2.6 相对寻址

1、寻址空间
			程序存储器,利用指令修正PC指针的方式实现转移,即以程序计数器PC的内容为基地址,加上程序中的偏移量rel,做地址寻址
		2、三种指令形式

3.2.7 位寻址

1、寻址空间
			片内RAM 20H-2FH
			SFR中12个能被8整除的字节地址
		2、待填写

3.3 MCS-51 指令系统介绍

3.3.1 数据传送指令(29条)

片内传送 MOV(16条)
			MOV  A , #16H
		片外传送 MOVX(4条)
			指令寻址方式为寄存器间接寻址,间接寻址寄存器为:Ri,DPTR(Ri为8位,DPTR为16位)
		查表传送 MOVC(2条)
			两个分别为以PC为基址加变址寻址以及以DPTR为基址加变址寻址
		 XCH、XCHD、SWAP交换指令(5条)
			
		堆栈操作 PUSH、POP(2条)
			进栈:PUSH
			出栈:POP

3.3.2 算术运算指令(24条)

1、加法
			ADD(4)
				ADD A,#DATA
			ADDC(4)
				带进位加法(被加数里面加上PSW里面的进位符号CY)
			INC(5)
				增量,相当于X++;只有INC A 影响PSW
			DA(1)
				十进制调整指令
		2、减法
			SUBB(4)
				SUBB A ,Rn    -> A <- (A) - (Rn) - CY
			DEC(4)
				相当于i--
		3、乘除
			MUL
				计算结果放在累加器AB中,两个单字节相乘得出双字节
			DIV
				计算结果放在累加器AB中,A放(A)/(B)的商,B放余数

3.3.3 逻辑运算指令(24条)

1、逻辑运算指令ANL(6条)
			长用于给字节中某几位置0
		2、逻辑或指令ORL(6条)
			长用于给字节中某几位置1
		3、逻辑异或XRL(6条)
			用于让字节中某几位取反
		4、累加器清除与求反指令(2条)
			CLR
				累加器清零
			CPL
				累加器内容按位取反
		5、移位指令(4)
			RL
				内容左循环一圈
			RLC
				内容+上PSW中CY位循环一圈
			RR
				内容右循环一圈
			RRC
				内容+上PSW中CY位循环一圈

3.3.4 控制转移指令(17条)

1、无条件转移指令
			长转移
				LJMP
					LJMP + add16 对64k的rom想跳哪里跳哪里
			绝对转移
				AJMP
					AJMP + addr11
			短转移
				SJMP
					SJMP + rel rel为相对偏移量,原理:PC <- (PC)+2+rel
			间接长转移
				JMP
					把累加器A的8位无符号数与DPTR的16位数相加,其和送入PC,控制程序转移到目的地址,指令不改变A和DPTR的值
		2、条件转移指令
			JZ rel
				累加器不为0则跳转
			JNZ rel
				累加器不为0则跳转
			CJNE A,direct,rel
				A与直接地址比较,不相等就跳
			CJNE Rn,#data,rel
				A与立即数比较,不相等就跳转
			CJNE @Ri,#data,rel
				间接RAM与立即数比较,不相等就跳转
			CJNE Rn,direct,rel
				寄存器与直接地址比较,不相等就跳转
			DJNZ Rn,rel
				寄存器减一不为0则跳转
			DJNZ direct,rel
				直接地址内容减一不为0则跳转
		3、子程序调用及返回指令
			LCALL addr16
				长调用子程序,52内部随便跳
			ACALL addr11
				绝对调用子程序
			RET
				子程序返回
			RETI
				中断返回
		4、空操作
			    NOP

3.3.5 布尔处理类指令(17条)

1、布尔传送指令
				(直接把单独位送到PSW C位里面)
				MOV  C      BIT
				MOV  BIT   C
		2、布尔状态控制
				CLR    C
					清除进位
				CLR    BIT
					清除BIT位
				SETB  C
					置位进位
				SETB  BIT
					置位BIT位
				CPL    C
					C位取反
				CPL    BIT
					BIT位取反
		3、布尔逻辑运算
				ANL  C  , BIT
					C 与 BIT
				ANL  C  , /BIT
					C 与 /BIT(/BIT表示对BIT的取反值)
				ORL  C,  BIT
					C 或 BIT
				ORL  C,  /BIT
			     	C 或 /BIT
		4、布尔条件转移
				JC	rel
					进位为1则转移
				JNC		rel
					进位不为1则转移
				JB	bit	rel
					直接位为1则转移
				JNB 	bit	rel
					直接位不为1则转移
				JBC   	bit	rel
					直接位为1则转移并清除该位