MCS-51指令系统

目录

数据传送指令

一: 内部数据传送指令

1,立即寻址型传送指令

2,直接寻址型传送指令

3,寄存器寻址传送指令

4,寄存器间接寻址传送指令

二:外部数据传送指令

三: 堆栈操作指令

四:数据交换指令

五:程序存储器数据传送指令

算术运算指令

一:加法指令

1,不带Cy(Carry进位标志)的加法指令

2,带Cy(Carry进位标志)的加法指令, Cy用于保存低字节向高字节的进位

3,加1指令

4,十进制调整指令

二:减法指令

1,减法指令

2,减1指令

三:乘法指令和除法指令

1,单字节乘法指令

2,单字节除法指令

逻辑运算和移位运算指令

一:逻辑与指令,又叫逻辑乘指令

二:逻辑或指令,又叫逻辑加指令

三:逻辑异或指令,又叫半加指令

四:累加器清零与取反指令

五:移位指令

位操作指令

一:位传送指令

二:位置位/复位指令

三:位运算指令

控制转移指令

一:无条件转移指令

二:子程序调用与返回指令

1,调用指令,LCALL指令为长调用指令,ACALL绝对调用指令

2,子程序返回指令

三:条件转移指令

1,转移指令包括:A是否为零,2个字节数据是否相等,一个操作数减1后是否为零和一个bit的状态等

2,比较条件转移指令

3,减1条件转移指令

四:位控制转移指令

1,以Cy中内容为条件的转移指令

                 2,以位地址中的内容为条件的转移指令

五:空操作指令


数据传送指令

一: 内部数据传送指令

内部数据传送指令的源操作数和目的操作数都在单片机内部, 一般格式如下:
MOV 目的操作数, 源操作数       ;目的操作数<-源操作数,源操作数不变(相当于COPY)

1,立即寻址型传送指令

(1)MOV A,#data            ;(A)<-data
(2)MOV Rn,#data          ;(Rn)<-data
(3)MOV @Ri,#data       ;((Ri))<-data
(4)MOV direct,#data     ;(direct)<-data

2,直接寻址型传送指令

(1)MOV A,direct            ;(A)<-(direct)
(2)MOV direct,A            ;(direct)<-(A)
(3)MOV Rn,direct          ;(Rn)<-(direct)
(4)MOV @Ri,direct        ;((Ri))<-(direct)
(5)MOV direct2,direct1  ;(direct2)<-(direct1)

3,寄存器寻址传送指令

(1)MOV A,Rn              ;(A)<-(Rn)
(2)MOV Rn,A              ;(Rn)<-(A)
(3)MOV direct,Rn        ;(direct)<-(Rn)

4,寄存器间接寻址传送指令

(1)MOV A,@Ri             ;(A)<-((Ri))
(2)MOV @Ri,A             ;((Ri))<-((A))
(3)MOV direct,@Ri       ;(direct)<-((Ri))


二:外部数据传送指令

外部数据传送指令用于CPU存取外部数据存储器中的数据,数据传送及相关指令共6条,如下:

(1)MOV  DPTR,#data16   ;(DPTR)<-data16, DPTR中一般是外部数据存储器单元的地址,16位传送指令
(2)INC  DPTR                   ;(DPTR)<-(DPTR) + 1, 16位加法指令
(3)MOVX A,@DPTR        ;(A)<-((DPTR)),将DPTR指定的外部数据存储单元中数据存入A
(4)MOVX @DPTR,A        ;((DPTR))<-(A)
(5)MOVX A,@Ri               ;(A)<-((Ri))
(6)MOVX @Ri,A               ;((Ri))<-(A)

三: 堆栈操作指令

堆栈指令操作数只能采用直接寻址方式
(1)PUSH direct         ;进栈指令:(SP)<-(SP)+1,((SP))<-(direct)
(2)POP  direct          ;出栈指令:(direct)<-((SP)),(SP)<-(SP)-1

四:数据交换指令

数据交换指令用于A与寄存器或内部数据存储单元相互交换数据
(1)XCH A,Rn               ;(A)<->(Rn):字节(8bit)相互交换
(2)XCH A,direct           ;(A)<->(direct):字节(8bit)相互交换
(3)XCH A,@Ri             ;(A)<->((Ri)):字节(8bit)相互交换
(4)XCHD A,@Ri          ;(A.3~0)<->((Ri).3~0):半字节(低4bit)相互交换

五:程序存储器数据传送指令

查表指令采用变址寻址方式,以DTPR或PC作为基址,用来存放表格起始地址,以A作为偏移量。
(1)MOVC A,@A+DPTR      ;(A)<-((A)+(DPTR)),DTPR存放表格起始地址,A存放偏移量
(2)MOVC A,@A+PC           ;(PC)<-(PC)+1,(A)<-((A)+(PC)),PC存放表格起始地址,A存放偏移量

算术运算指令

一:加法指令

1,不带Cy(Carry进位标志)的加法指令

(1)ADD A,Rn              ;(A)<-(A)+(Rn)
(2)ADD A,direct         ;(A)<-(A)+(direct)
(3)ADD A,@Ri           ;(A)<-(A)+((Ri))
(4)ADD A,#data         ;(A)<-(A)+data

2,带Cy(Carry进位标志)的加法指令, Cy用于保存低字节向高字节的进位

(1)ADDC A,Rn              ;(A)<-(A)+(Rn)+(Cy)
(2)ADDC A,direct          ;(A)<-(A)+(direct)+(Cy)
(3)ADDC A,@Ri           ;(A)<-(A)+((Ri))+(Cy)
(4)ADDC A,#data         ;(A)<-(A)+data+(Cy)

3,加1指令

(1)INC A                  ;(A)<-(A)+1
(1)INC Rn                ;(Rn)<-(Rn)+1
(1)INC direct            ;(direct)<-(direct)+1
(1)INC @Ri              ;((Ri))<-((Ri))+1

4,十进制调整指令

十进制调整指令专门用于BCD码十进制加法运算
DA A

二:减法指令

1,减法指令

减法指令没有不带Cy(Carry)的减法指令
(1)SUBB A,Rn              ;(A)<-(A)-(Rn)-(Cy)
(2)SUBB A,direct          ;(A)<-(A)-(direct)-(Cy)
(3)SUBB A,@Ri           ;(A)<-(A)-((Ri))-(Cy)
(4)SUBB A,#data         ;(A)<-(A)-data-(Cy)

2,减1指令

(1)DEC A                  ;(A)<-(A)-1
(1)DEC Rn                ;(Rn)<-(Rn)-1
(1)DEC direct            ;(direct)<-(direct)-1
(1)DEC @Ri              ;((Ri))<-((Ri))-1

三:乘法指令和除法指令

1,单字节乘法指令

MUL AB                  ;(B)(A)<-(A)X(B),若积大于255,Cy被置1

2,单字节除法指令

DIV AB                  ;(A)[商]...(B)[余数]<-(A)/(B),Cy,OV被无条件清零


逻辑运算和移位运算指令

一:逻辑与指令,又叫逻辑乘指令

(1)ANL A,Rn             ;(A)<-(A)&(Rn)
(2)ANL A,direct         ;(A)<-(A)&(direct)
(3)ANL A,@Ri           ;(A)<-(A)&((Ri))
(4)ANL A,#data         ;(A)<-(A)&data
(5)ANL direct,A          ;(direct)<-(direct)&(A)
(6)ANL direct,#data    ;(direct)<-(direct)&data

二:逻辑或指令,又叫逻辑加指令

(1)ORL A,Rn             ;(A)<-(A)|(Rn)
(2)ORL A,direct         ;(A)<-(A)|(direct)
(3)ORL A,@Ri           ;(A)<-(A)|((Ri))
(4)ORL A,#data         ;(A)<-(A)|data
(5)ORL direct,A         ;(direct)<-(direct)|(A)
(6)ORL direct,#data    ;(direct)<-(direct)|data

三:逻辑异或指令,又叫半加指令

(1)XRL A,Rn              ;(A)<-(A)^(Rn)
(2)XRL A,direct          ;(A)<-(A)^(direct)
(3)XRL A,@Ri            ;(A)<-(A)^((Ri))
(4)XRL A,#data          ;(A)<-(A)^data
(5)XRL direct,A          ;(direct)<-(direct)^(A)
(6)XRL direct,#data    ;(direct)<-(direct)^data

四:累加器清零与取反指令

(1)CLR A               ;(A)<-0
(2)CPL A               ;(A)<-(~A), CPL是取反指令

五:移位指令

(1)RL A                  ;不带Cy左移,(b7)<-(b6)...(b1)<-(b0)<-(b7)
(2)RR A                 ;不带Cy右移,(b7)->(b6)...(b1)->(b0)->(b7)
(3)RLC A               ;带Cy左移,(Cy)<-(b7)<-(b6)...(b1)<-(b0)<-(Cy)
(4)RRC A              ;带Cy右移,(Cy)->(b7)->(b6)...(b1)->(b0)->(Cy)
(5)SWAP A           ;A的高4bit和低4bit互相交换

位操作指令

一:位传送指令

(1)MOV C,bit           ;(Cy)<-(bit)
(2)MOV bit,C           ;(bit)<-(Cy)

二:位置位/复位指令

(1)CLR C                 ;(Cy)<-0
(2)CLR bit               ;(bit)<-0
(3)SETB C              ;(Cy)<-1
(4)SETB bit             ;(bit)<-1

三:位运算指令

(1)ANL C,bit             ;(Cy)<-(Cy)&(bit)
(2)ANL C,(~bit)        ;(Cy)<-(Cy)&(~bit),(~bit)表示对bit取反
(3)ORL C,bit            ;(Cy)<-(Cy)|(bit)
(4)ORL C,(~bit)        ;(Cy)<-(Cy)|(~bit)
(5)CPL C                  ;(Cy)<-(~Cy)
(6)CPL bit                ;(bit)<-(~bit)

控制转移指令

一:无条件转移指令

(1)LJMP addr16         ;(PC)<-addr16,长转移指令
(2)AJMP addr11         ;(PC)<-(PC)+2,(PC10~0)<-addr11,绝对转移指令
(3)SJMP rel                ;(PC)<-(PC)+2,(PC)<-(PC)+rel,短转移指令
(4)JMP @A+DPTR    ;(PC)<-(A)+(DPTR),变址转移指令

二:子程序调用与返回指令

1,调用指令,LCALL指令为长调用指令,ACALL绝对调用指令

(1)LCALL addr16        ;(PC)<-(PC)+3
                                    ;(SP)<-(SP)+1,((SP))<-(PC7~0)
                                    ;(SP)<-(SP)+1,((SP))<-(PC15~8)
                                    ;(PC)<-addr16
(2)ACALL addr11        ;(PC)<-(PC)+2
                                    ;(SP)<-(SP)+1,((SP))<-(PC7~0)
                                    ;(SP)<-(SP)+1,((SP))<-(PC15~8)
                                    ;(PC10~0)<-addr11

2,子程序返回指令

RET                            ;(PC15~8)<-((SP));(SP)<-(SP)-1
                                    ;(PC7~0)<-((SP));(SP)<-(SP)-1

三:条件转移指令

1,转移指令包括:A是否为零,2个字节数据是否相等,一个操作数减1后是否为零和一个bit的状态等

(1)JZ rel              ;若(A)=0,则(PC)<-(PC)+2+rel:转移
                           ;若(A)!=0,则(PC)<-(PC)+2:继续执行下一条

(2)JNZ rel             ;若(A)!=0,则(PC)<-(PC)+2+rel:转移
                             ;若(A)=0,则(PC)<-(PC)+2:继续执行下一条

2,比较条件转移指令

(1)CJNE A,#data,rel    ;(A)=data,(PC)<-(PC)+3:继续执行下一条
                       ;(A)!=data,(PC)<-(PC)+3+rel:转移
                       ;设置Cy标志位
(2)CJNE A,direct,rel   ;(A)=(direct),(PC)<-(PC)+3:继续执行下一条
                       ;(A)!=(direct),(PC)<-(PC)+3+rel:转移
                       ;设置Cy标志位
(3)CJNE Rn,#data,rel   ;(Rn)=(direct),(PC)<-(PC)+3:继续执行下一条
                       ;(Rn)!=(direct),(PC)<-(PC)+3+rel:转移
                       ;设置Cy标志位
(4)CJNE @Ri,#data,rel  ;((Ri))=(direct),(PC)<-(PC)+3:继续执行下一条
                       ;((Ri))!=(direct),(PC)<-(PC)+3+rel:转移
                       ;设置Cy标志位


3,减1条件转移指令

(1)DJNZ Rn,rel         ;(Rn)<-(Rn)-1,若(Rn)!=0,则(PC)<-(PC)+2+rel:转移
                       ;若(Rn)=0,(PC)<-(PC)+2:继续执行下一条
(2)DJNZ direct,rel     ;(direct)<-(direct)-1,若(direct)!=0,则(PC)<-(PC)+3+rel:转移
                       ;若(direct)=0,(PC)<-(PC)+3:继续执行下一条

四:位控制转移指令

1,以Cy中内容为条件的转移指令

(1)JC rel              ;若(Cy)=1,则(PC)<-(PC)+2+rel:转移
                       ;若(Cy)=0,则(PC)<-(PC)+2:继续执行下一条
(2)JNC rel             ;若(Cy)=0,则(PC)<-(PC)+2+rel:转移
                       ;若(Cy)=1,则(PC)<-(PC)+2:继续执行下一条    

                 
2,以位地址中的内容为条件的转移指令

(1)JB bit,rel          ;若(bit)=1,则(PC)<-(PC)+3+rel:转移
                       ;若(bit)=0,则(PC)<-(PC)+3:继续执行下一条
(2)JNB bit,rel         ;若(bit)=0,则(PC)<-(PC)+3+rel:转移
                       ;若(bit)=1,则(PC)<-(PC)+3:继续执行下一条
(3)JBC bit,rel         ;若(bit)=1,则(bit)<-0,(PC)<-(PC)+3+rel:转移
                       ;若(bit)=0,则(PC)<-(PC)+3:继续执行下一条

五:空操作指令

NOP                    ;(PC)<-(PC)+1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值