1 语言
1.1 汇编语言
汇编语言是能够利用单片机所有特性直接控制硬件的唯一程序,直接使用CPU的指令系统和寻址方式,从而得到占用空间小,执行速度快的高质量程序。对于一些直接控制硬件的场合,汇编语言是必不可少的。
汇编语言不是一种结构化的程序设计语言,对于复杂的单片机应用系统,编写效率很低
1.2 机器语言
机器语言是计算机唯一能识别的语言,用汇编语言或高级语言编写的程序(源程序)最终都必须翻译成机器语言的程序(目标程序),计算机才能够识别
2 指令
2.1 指令的概念
指令是指挥计算机执行某种操作的命令
一条指令可以用两种语言形式表达,即机器语言指令和汇编语言指令
机器语言指令用二进制代码表示,称指令码,又称机器码,计算机能够直接识别并加以分析和执行
汇编语言指令用助记符表示,便于程序员编写和阅读,但不能为计算机识别和执行,必须翻译成机器语言指令
把汇编语言编写的源程序翻译成机器语言指令的过程称为汇编
2.2 80C51常见指令助记符
2.2.1 数据传送类
MOV:move;对内部RAM和特殊功能寄存器SFR的数据进行传送
MOVC:move code;读取程序存储器数据表格的数据传送
MOVX:move external RAM;对外部RAM的数据传送
XCH:exchange;字节交换
XCHD:exchange low-order digit;低半字节交换
PUSH:push into stack;入栈
POP:pop from stack;出栈
2.2.2 算数运算类
ADD:addition;加法
ADDC:add with carry;带进位加法
SUBB:subtract with borrow;带借位减法
DA:decimal adjust;十进制调整
INC:increment;加1
DEC:decrement;减1
MUL:multiplication;乘法
DIV:division;除法
2.2.3 逻辑运算类
ANL:and logic:与
ORL:or logic;或
XRL:exclusive-or logic;异或
CLR:clear;清零
CPL:complement;取反
RL:rotate left;循环左移
RLC:rotate left through the carry flag;带进位循环左移
RR:rotate right;循环右移
RRC:rotate right through the carry flag;带进位循环右移
SWAP:swap;低四位与高四位交换
2.2.4 控制转移类
ACALL:absolute subroutine call;子程序绝对调用
LCALL:long subroutine call;子程序长调用
RET:return from subroutine;子程序返回
RETI:return from interruption;中断返回
AJMP:absolute jump;绝对转移
LJMP:long jump;长转移
SJMP:short jump;短转移
JMP:jump;转移
CJNE:compare jump if not equal;比较不相等则转移
DJNZ:decrement jump if not zero;减1后不为0则转移
JZ:jump if zero;结果为0则转移
JNZ:jump if not zero;结果不为0则转移
JC:jump if the carry flag is set;有进位则转移
JNC:jump if not carry;无进位则位移
JB:jump if the bit is set;位为1则位移
JNB:jump if the bit is not set;位为0则位移
JBC:jump if the bit is set and clear the bit;位为1则位移,且清除该位
NOP:no operation;空操作
2.2.5 位操作指令
SETB:set bit;位置1
2.3 指令系统中的特殊符号
Rn:当前选中的寄存器区的8个工作寄存器R0~R7
Ri:当前选中的寄存器区中可作为地址寄存器的两个寄存器R0或R1
Direct:内部数据存储单元的8位地址,包含0~127内部存储单元地址和128~255部分存储单元特殊功能寄存器地址
#data:指令中的8位常数
#data16:指令中的16位常数
@:间接寄存器寻址或基址寄存器的前缀
/:位操作的前缀,声明对该为取反
DPTR:数据指针
Bit:内部RAM和特殊功能寄存器的直接寻址位
A:累加器
B:特殊功能寄存器B,用于乘法和除法指令中
C:进位标志位
(X):某地址单元的内容
((X)):由(X)寻址的单元的内容