汇编语言入门
概述
-
指令格式(最多包含4个区段):各区段之间用规定的分隔符分开
[标号:] 操作码 [操作数] [;注释]
- 标号区段(当前指令行的符号地址)
- 操作码区段(指令的操作行为,由操作助记符表征):42个操作码助记符(51单片机)(不区分大小写)
- 操作数区段(指令的操作对象)
- 注释区段(对指令的解释性说明):以英文分号开始,无须结束符号
- 标识符:标号或汇编符号(由英文字母开头的1~6个字符组成)
- 16进制地址:若存储单元地址的最高位>9时,应加前缀“0”以区别于标识符
- 立即数:出现在指令中的额常数(应加前缀“#”以区别于地址)
-
简记符号(有明确的取值范围,不可越限使用)
指令系统
-
指令(CPU用于智慧功能部件完成某一指定动作的指令和命令):数据传输与交换类、算术运算类、逻辑运算及移位类、控制转移类
-
数据传送与交换类指令(31条):可实现RAM、SFR和ROM之间的数据传送和交换
- 基本通式:<transfer> <dest>,<src>
;将元操作数(src)内容传送给目的操作数(dest),传送后源操作数的内容不变
-
8种操作码助记符
- MOV用于访问片内RAM
- MOVX用于访问片外RAM
- MOVC用于访问程序存储器
- XCH和XCHD用于字节交换
- SWAP用于A内半字节交换
- PUSH和POP用于堆栈操作
-
学习传送与交换类指令的关键在于掌握数据传送的目的和源
- 立即数和ROM地址只能作为源操作数(单向箭头)
- 内外ROM与A的数据传送只能用MOVC操作码助记符
- 片外RAM与A的数据传送只能用MOVX操作码助记符
- PUSH和POP只能对direct进行操作
- 位数据传送只能在C(Cy标志位)与bit间进行
-
寻址方式
- 寄存器寻址:利用通用寄存器查找操作数的方法(通用寄存器:Rn、A、B、CY和DPTR)
- 寄存器间接寻址:利用寄存器作为地址指针间接查找操作数的做法(间址寄存器:R0、R1和DPTR)
- 变址寻址:利用两个寄存器内容之和进行间接查找操作数的做法(基址寄存器:DPTR、PC;变址寄存器:A)
- 基本通式:<transfer> <dest>,<src>
-
算术运算类指令(24条):对程序状态字寄存器PSW中的CY、AC、OV和P有影响
-
8种操作码助记符
-
ADD和ADDC用于加法运算
-
SUBB用于减法运算
-
MUL和DIV用于乘法和除法运算
-
INC和DEC用于增1和减1
-
DA用于十进制数加法调整
-
-
7个节点表示算术运算指令共涉及7类操作数(@Ri、A、Rn、#data、B、direct和DPTR)
- 除INC和DEC操作码外,算术运算都以A为目标操作数(A必须参与算术并存放运算结果)
-
立即寻址:以指令中存在的立即数(#data或#data16)作为操作数的做法
-
-
逻辑运算及移位类指令(34条):可实现二进制逻辑操作
-
逻辑运算指令中不以累加器A为目标寄存器的指令均不影响PSW中然和标志位,带进位的移位指令影响CY位
-
10种操作码助记符
- ANL、ORL和XRL分别用于逻辑与、逻辑或和逻辑异或运算
- CPL用于求反运算
- SETB和CLR用于置位和清零运算
- RL、RLC、RR和RRC用于循环移位
-
逻辑运算指令共涉及5种操作数(@Ri、A、Rn、#data、direct)
- 除direct与#data的逻辑关系外,其余逻辑运算都与A有关,且几乎都以A为目的操作数
- 位运算都以C为目的操作数
-
循环移位指令可以实现A单独或C的闭环移位功能
-
直接寻址:以指令中存在的片内RAM地址(direct)作为操作数地址的做法
-
-
控制转移类指令(22条):通过改变程序计数器PC的内容,进而实现程序转移功能
-
18种操作码助记符
- LJMP、AJMP、SJMP、JMP是无条件转移指令
- JZ、JNZ、JC、JNC、JB、JNB、JBC、CJNE、DJNZ是条件转移指令
- LCALL、ACALL、RET、RETI是子程序调用及返回指令
- NOP是空操作指令
-
条件转移指令快捷记忆法
- direct和Rn都可实现“减一非零转移”
- @Ri、A、Rn分别与#data、A与direct都可实现“比较不等转移”
- A可实现为零或非零转移
- 所有条件转移只能是在rel的范围内进行(-128~+127)
-
相对寻址:利用偏移量rel修正转移目标地址的做法
-
位寻址:利用位地址bit作为指令操作数的做法
-
-
寻址方法(CPU取的操作数的方法):寻址方式越多,计算机功能越强
- 直接寻址:指令中包含direct形式操作数的寻址方式
- 寄存器寻址:指令中包含通用寄存器形式操作数的寻址方式
- 寄存器间接寻址:指令中包含“@间址寄存器”形式才作数的寻址方式
- 立即寻址:指令中包含#data或#data16形式操作数的寻址方式
- 变址寻址:指令中包含“@A+基址寄存器”形式的寻址方式(基址寄存器只能由DPTR或PC兼任)
- 位寻址:指令中包含bit形式操作数的寻址方式
- 相对寻址:指令中包含rel形式操作数的寻址方式
-
伪指令(汇编系统控制译码指令或指示性指令):一般不产生机器代码
程序设计步骤
-
分析问题,确定算法或解题思路
-
画流程图(程序框图):直观地表示出程序的执行过程或解题步骤和方法
-
编写程序:用汇编指令对流程图中的各部分加以具体实现
-
调试与修改