51单片机汇编指令笔记

#(I)Rn:R0-R7:寄存器
(II)direct:直接地址
(III)@RX:简洁取址
(IV)#data:立即数
(V)DPTR:数据指针(16位SFR,高位字节DPH,低位字节:DPL,:)H与L嘛)
all指(I)+(II)+(III)+(IV)

(一)数据传输类:
MOV:      MOV A,B;                传递数据,A是接受者,B是传递的数,传递者被省略(A:累加器/寄存器等地址,B:累加器/all)(双周期指令)
MOVX:MOVX A B;             传递数据,A是接受者,B是传递的数,传递者被省略(AB:累加器与@RX或@DPTR打交道)
#外部存储器单元交流必须通过累加器中转,内部各存储器之间可以畅通交流
MOVC:   MOVC A B;              将ROM中的数送入A中(查表指令)(A:累加器,B:@A+DPTR)
PUSH: PUSH direct;       推入,将direct中的内容送入堆栈,附加操作:先SP++,后推入(单周期指令)
POP:       POP direct;           弹出,将direct中的内容送回direct,附加操作:先送出,后SP–(单周期指令)

(二)算数运算类:
ADD:   ADD A B;               不带进位的加法(A:累加器,B:all)
ADDC:ADDC A B;                带进位的加法(A:累加器,B:all)
SUBB:    SUBB A B;                 带借位的减法(A:累加器,B:all)没有不带借位的减法,不带借位只需在第一次做相减时把CY置0
MUL:  MUL A B;                  两个八位无符号数相乘(A:结果的低八位,B:结果的高八位)OV=0,CY=0,乘积大于65535时OV置1
DIV:   DIV A B;                    A中的无符号八位数除以B中的无符号八位数(A:商,B:余数)CY=0,OV=0,除数为0时OV=1
INC:      INC A;                     加1(A:累加器/DPTR/all except #data)
DEC:   DEC A;                       减1(A:累加器/all except #data)

(三)逻辑运算类:
CLR:    CLR A;                       将A中的值清零(A:累加器)(单周期指令)
CPL:    CPL A;                        将A中的值按位取反
RL:      RL A;                           将A中的值逻辑左移
RLC:   RLC A;                        将A中的值加上进位位进行逻辑左移
RR:      RR A;                          将A中的值逻辑右移
RRC:   RRC A;                        将A中的值加上进位位进行逻辑右移
SWAP:SWAP A;                    将A中值高低四位互换
ANL:   ANL A,B;                   按位与(A:累加器/direct,B:all)
ORL:   ORL A,B;                    按位或(A:累加器/direct,B:all)
XRL:   XRL A,B;                    按位异或(A:累加器/direct,B:all)

(四)控制转移类:
(1)无条件转移
AJMP:AJMP A;                   短转移2K距离(A:地址)(双字节指令)
LJMP:LJMP A;                    长转移64K距离(A:地址)(三字节指令)
SJMP:SJMP A;                     相对转移256距离(A:地址)
(2)间接转移
JMP:  JMP @A+DPTR;     跳转
(3)条件转移
JZ:     JZ A;                         (A)=0,转移,否则执行下一条
JC:     JZ A;                         CY=1,转移,否则执行下一条(A:标号)
JNZ: JNZ A;                         (A)!=0 转移,否则执行下一条
(4)比较转移
CJNE:CJNE A,B;                 A=B,顺序执行,否则转移(A:累加器/RX/@RX,B:direct/#data)A>B,CY=0,否则,CY=1
(5)循环转移
DJNZ:DJNZ A,B;              (A)-1!=0,转到B,否则执行下一步(A:RX/direct,B:标号)(双周期指令)
(6)调用返回
LCALL:LCALL A;             长调用(A:地址)
ACALL:ACALL A;            短调用(A:地址)
RET:      RET;                       返回

(五)空操作类:
NOP:     NOP;                      停一周期

(六)位操作类:
(1)位传送
MOV:   MOV A,B;             位累加器(CY)与其他地址之间的数据传输(AB:分别为CY与BIT)
(2)位修正
CLR:    CLR A;                    位清0(A:CY/BIT)
SETB:  SETB A;                  位置1(A:CY/BIT)
CPL:    CPL A;                     位取反(A:CY/BIT)
(3)位逻辑
ANL:   ANL A,B;               A与B取与(A:CY,B:BIT//BIT)
#/BIT:BIT中的值取出取反后参与运算,其值不发生改变
ORL:   ORL A,B;                A与B取或(A:CY,B:BIT//BIT)
(4)位转移
JC:      JC A;                      判CY,1转0下(A:标号)
JNC:    JNC A;                   判CY,0转1下(A:标号)
JB:      JB A,B;                   判位变量,1转0下(A:标号)
JNB:    JNB A,B;                判位变量,0转1下(A:标号)

(七)常用标号:
标号的实质意义是地址数值(首地址)
LOOP:循环
ORG:开始
END:结束
DELAY:暂停
MAIN:主程序

(八)思考和总结
1.2^n进制之间互化灰常方便
由SWAP这个指令在结果上的特殊性想到的,SWAP A:(A)=39H–>93H
如十六进制化为二进制只需将每位都转化为四位0/1即可(2^4=16)
由此深刻地理解到了计算机中拥有4/8/16进制、位啦等等的良苦用心!
2.SFR特殊功能寄存器总结:
符号        地址        功能介绍
B              F0H        B寄存器(在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用)
ACC         E0H        累加器(了解CPU 的当前状态,并作出相应的处理,CY:进位标志,AC:半进位标志,F0:用户标志位,RS1、RS0:工作寄存器组选择位,0V:溢出标志位,P:奇偶校验位)
PSW        D0H       程序状态字
IP             B8H       中断优先级控制寄存器
P3            B0H       P3口锁存器
IE             A8H       中断允许控制寄存器
P2            A0H       P2口锁存器
SBUF       99H        串行口锁存器
SCON      98H       串行口控制寄存器
P1            90H       P1口锁存器
TH1         8DH       定时器/计数器1(高8位)
TH0         8CH       定时器/计数器1(低8位)
TL1         8BH       定时器/计数器0(高8位)
TL0         8AH       定时器/计数器0(低8位)
TMOD     89H       定时器/计数器方式控制寄存器
TCON      88H       定时器/计数器控制寄存器
DPH        83H       数据地址指针(高8位)\
DPL         82H       数据地址指针(低8位)/DPTR(数据指针)
SP           81H       堆栈指针
P0           80H       P0口锁存器
PCON     87H       电源控制寄存器

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注