3.1汇编语言概述
汇编语言(Assembly Language)——用助记(字)符代替操作码,用地址符号代替地址码的一种面向机器的程序设计语言
3.1.1 汇编语言指令格式




3.1.2 描述操作数的简记符号



---------------------------------------------------------------------------------------------------------------------------------
3.2 MCS-51指令系统简介
3.2.1 寻址方式
CPU取得操作数的方法称为寻址方法








3.2.2 数据传送与交换类指令



-
RAM:相当于电脑的内存,用于临时存储数据,掉电丢失。
-
ROM:相当于电脑的硬盘,用于永久存储程序和不变量,掉电不丢失。


寄存器寻址


寄存器间接寻址


变址寻址
![]()



3.2.3 算术运算类指令
算术运算类指令——可实现加、减、乘、除和增1、减1等运算功能 (21条)


立即寻址





直接寻址

3.2.4 逻辑运算及移位类指令
逻辑运算及移位类指令——可实现与、或、异或、求反、置1、清0、移位等功能(34条)

字节运算以A为目的操作数(#data与direct的运算例外),位运算以C为目的操作数。
所有位(1位) 运算指令都把进位标志C作为结果的存放位置
大多数字节(8位) 运算指令都把累加器A作为结果的存放位置。



3.2.5 控制转移类指令
控制转移类指令 ——通过改变程序计数器PC值,实现程序转移功能 (22条)

无条件转移

51单片机中不同跳转指令所能寻址的地址范围。这里的"位"指的是指令中用于表示目标地址的二进制位数/这些"位"数决定了该跳转指令能跳多远(寻址范围)
1. LJMP - 16位地址
-
含义:使用完整的16位地址
-
寻址范围:0000H ~ FFFFH(整个64KB程序空间)
-
特点:可以跳转到程序存储器的任何地方
-
示例:
assembly
LJMP 1234H ; 无条件跳转到地址1234H LJMP MAIN ; 跳转到MAIN标号处(无论MAIN在哪里)
2. SJMP - 8位地址
-
含义:使用8位偏移量(有符号数)
-
寻址范围:相对当前PC的-128 ~ +127字节
-
特点:短距离跳转,常用于循环和条件分支
-
示例:
assembly
LOOP: MOV A, #55H DJNZ R0, LOOP ; 循环跳转(短距离) SJMP $ ; 原地跳转($表示当前地址)
相对寻址

rel 指的是相对偏移量,它用于相对转移指令中,表示跳转的相对距离。
rel 是一个8位有符号数,表示从下一条指令地址到目标地址的偏移量。
取值范围:十进制:-128 ~ +127 十六进制:80H ~ 7FH
跳转地址计算:目标地址 = 当前PC值 + 指令字节数 + rel
其中:
-
当前PC值:当前指令的地址
-
指令字节数:当前指令占用的字节数
-
rel:相对偏移量
-
direct= 直接地址:指定要操作的具体内存位置 -
地址范围:00H~FFH(片内RAM和SFR)
-
与立即数的区别:没有
#号,表示地址而非常数
位寻址
条件转移指令
条件转移指令主要分为以下几类:
-
判零转移(JZ, JNZ) Jump if Zero
-
比较转移(CJNE) Compare and Jump if Not Equal
-
循环转移(DJNZ) Decrement and Jump if Not Zero
-
位条件转移(JC, JNC, JB, JNB, JBC等)
1. 基于累加器A的判零转移 Jump if Zero


2. 比较转移指令 CJNE Compare and Jump if Not Equal

CY应该为隐藏设置,不显现

3. 循环控制指令 DJNZ Decrement and Jump if Not Zero ( Decrement 减一)



4. 基于进位标志CY的转移 Jump on Carry


5. 位条件转移




3.2.6 伪指令















被折叠的 条评论
为什么被折叠?



