第三章MCS-51单片机指令系 统及汇编语言程序设计 内容提要: §3-1汇编语言与指令系统简介 §3-2数据传送类指令 §3-3算术运算类指令 §3-4逻辑运算类指令 §3-5控制转移类指令 §36位操作类指令 §3-7汇编语言的汇编过 根3.8汇编语言的程序设计及应用
第三章 MCS-51单片机指令系 统及汇编语言程序设计 内容提要: §3-1 汇编语言与指令系统简介 §3-2 数据传送类指令 §3-3 算术运算类指令 §3-4 逻辑运算类指令 §3-5 控制转移类指令 §3-6 位操作类指令 §3-7 汇编语言的汇编过 程§3-8 汇编语言的程序设计及应用
33-汇编语言与指令系统简介 汇编语言程序设计的意义 什么是程序? 完成某项特定任务的指令的集合 计算机按程序一条一条地依次执行指令,从而完成指定任务。 要让计算机完成各项任务,就应设计各种程序。 程序设计语言 机器语言:用二进制代码表示指令和数据 汇编语言:用助记符表示指令操作功能,用标号表示操作对象。 高级语言:独立于机器面向过程接近自然语言和数学表达式
高级语言: §3-1 汇编语言与指令系统简介 一、汇编语言程序设计的意义 什么是程序? 完成某项特定任务的指令的集合。 计算机按程序一条一条地依次执行指令,从而完成指定任务。 要让计算机完成各项任务,就应设计各种程序。 汇编语言: 机器语言: 程序设计语言: 用二进制代码表示指令和数据。 用助记符表示指令操作功能,用标号表示操作对象。 独立于机器,面向过程,接近自然语言和数学表达式
汇编语言程序的每一条语句都与计算机的某一条指令对应,所 以必需熟悉指令系统。 指令=操作码+操作数 操作码——表示了该指令所能执行的操作功能。 操作数—表示参加操作的数的本身或操作数所在的地址。 MCS-51指令格式 标号:操作码助记符[第一操作数][,第二操作数];注释
汇编语言程序的每一条语句都与计算机的某一条指令对应,所 以必需熟悉指令系统。 指令 = 操作码 + 操作数 操作码——表示了该指令所能执行的操作功能。 操作数——表示参加操作的数的本身或操作数所在的地址。 MCS-51指令格式: [标号:] 操作码助记符 [第一操作数] [,第二操作数] [;注释]
二、MCS-51系列单片机的指令系统 111条指令,共分五大类: 数据传送类;(29条) 算术运算类;(24条) 逻辑运算类;(24条) 控制转移类;(17条) 位操作类。(17条)
二、MCS-51系列单片机的指令系统 111条指令,共分五大类: 数据传送类;(29条) 算术运算类;(24条) 逻辑运算类;(24条) 控制转移类;(17条) 位操作类。(17条)
指令中操作数的描述符号: Rn 工作寄存器R0~R7 Ri—间接寻址寄存器R0、R1 Direct-直接地址,包括内部128BRAM单元地址、 26个SFR地址。 Hdata 8位常数 #data16—16位常数 adr16—16位目的地址 adr1111位目的地址 8位带符号的偏移地址 DPTR 16位外部数据指针寄存器 bit 可直接位寻址的位
指令中操作数的描述符号: Rn —— 工作寄存器R0 ~ R7 Ri —— 间接寻址寄存器R0、R1 Direct —— 直接地址,包括内部128B RAM单元地址、 26个SFR地址。 #data —— 8位常数 #data 16 —— 16位常数 addr 16 —— 16位目的地址 addr 11 —— 11位目的地址 rel —— 8位带符号的偏移地址 DPTR —— 16位外部数据指针寄存器 bit —— 可直接位寻址的位
累加器 B 寄存器B 进、借位标志位,或位累加器 间接寄存器或基址寄存器的前缀 指定位求反 (x) x中的内容 (x)) x中的地址中的内容 $当前指令存放的地址
A —— 累加器 B —— 寄存器B C —— 进、借位标志位,或位累加器 @ —— 间接寄存器或基址寄存器的前缀 / —— 指定位求反 (x)—— x中的内容 ((x))——x中的地址中的内容 $ —— 当前指令存放的地址
、寻址方式 寻找操作数存放单元的地址的方式,共6种方式 立即数寻址 所要找的操作数是一二进制数或十进制数,出现在指令中, 用“#”作前缀 MOⅤA,#20H 操作数存放在工作寄存器R0~R7中,或寄存器B中 MOV A, R2 3、直接寻址 指令中直接给出操作数的地址。 MOV A, 30H MOV 30H, DPH
三、寻址方式 寻找操作数存放单元的地址的方式,共6种方式。 1、立即数寻址 所要找的操作数是一二进制数或十进制数,出现在指令中, 用“#”作前缀 MOV A,#20H 2、寄存器寻址 操作数存放在工作寄存器R0 ~ R7中,或寄存器B中。 MOV A,R2 3、直接寻址 指令中直接给出操作数的地址。 MOV A,30H MOV 30H,DPH
4、寄存器间接寻址 指令中寄存器的内容作为操作数存放的地址,在工作上间接寻 址寄存器前用“@”表示前缀。 例如:“一本书放在甲抽屉中,上了锁;其开锁的钥匙放在乙 抽屉中,乙抽屉也上了锁。问如何才能取到哪本书?” 这就是一个间接寻址的问题,要经过两次寻址才能找到哪本书 而寄存器间接寻址也是同样。 例如:MOv30H,#20H;书放在甲抽屉中 MOV RO, #30H ;甲抽屉的钥匙放在乙抽屉中 MOV A, aRO ;取书,A中←20H 此例中,20H就当成是那本书;30H航当成是甲抽屉; R0就当成是乙抽屉,执行的结果就是将20H这个立即数装入A中 期间也经历了两次寻址,即间接寻址
;书放在甲抽屉中 ;甲抽屉的钥匙放在乙抽屉中 ;取书 ,A中 20H MOV 30H,#20H MOV R0,#30H MOV A,@R0 此例中,20H就当成是那本书;30H就当成是甲抽屉; R0就当成是乙抽屉,执行的结果就是将20H这个立即数装入A中。 期间也经历了两次寻址,即间接寻址。 4、寄存器间接寻址 指令中寄存器的内容作为操作数存放的地址,在工作上间接寻 址寄存器前用“@”表示前缀。 例如: “一本书放在甲抽屉中,上了锁;其开锁的钥匙放在乙 抽屉中,乙抽屉也上了锁。问如何才能取到哪本书?” 这就是一个间接寻址的问题,要经过两次寻址才能找到哪本书。 而寄存器间接寻址也是同样。 例如:
5、变址寻址 操作数地址=变地址+基地址 基地址寄存器DPTR或PC 变址寄存器aA 该寻址方式常用于访问程序存储器,查表。 如MOCA,@A+DPTR
5、变址寻址 操作数地址= 变地址 + 基地址 基地址寄存器 DPTR 或 PC 变址寄存器 @A 该寻址方式常用于访问程序存储器,查表。 如 MOVC A,@A + DPTR
6、相对寻址 把指令中给定的地址偏移量与本指令所在单元地址(PC内容) 相加得到真正有效的操作数所存放的地址。 例如“李同学20岁,张同学比李同学大3岁,问张同学多少岁?” 这就是一个相对寻年龄的问题,而相对寻址与此类似。 如JC60H;设(PC)=2000H为基址,相对偏移量为60H; ;则当C=1时,转移的目的地址=2000H+2+60H
6、相对寻址 把指令中给定的地址偏移量与本指令所在单元地址(PC内容) 相加得到真正有效的操作数所存放的地址。 例如 “李同学20岁,张同学比李同学大3岁,问张同学多少岁?” 这就是一个相对寻年龄的问题,而相对寻址与此类似。 如 JC 60H ;设(PC)= 2000H为基址,相对偏移量为60H; ; 则当C = 1时,转移的目的地址= 2000H + 2 + 60H