51单片机:8051指令简介

51单片机:8051指令简介

专业课本上包含的指令会比较全面,而在我的这篇博文中不会写的那么全。我只是简单的介绍一些常见的指令,这些指令是我考试内容中必须要掌握的,是我对知识点的一个简单梳理。在开始之前先介绍一些必要的符号意义,这样不至于在指令中看到太过于突兀。

  • Rn 当前寄存器区的寄存器,n的取值可以是0到7,即R0~R7。
  • Ri 当前寄存器区中可以用来间接寻址的寄存器,i的取值为0,1,即R0,R1。
  • direct 直接地址
  • #data 8位立即数
  • #data16 16位立即数
  • DPTR 数据指针
  • @ 间接寻址寄存器的前缀
  • (X) X地址单元的或者寄存器中的内容
  • ((X)) 以X地址单元的或者寄存器中的内容为地址的间接寻址位置的内容

数据传送指令:

传送指令中常用的有MOV,堆栈PUSH\POP操作,累加器与外部数据的传送、查表指令、字节交换。

MOV:

MOV的操作比较好记,也便于理解。根据英语单词move(移动,改变),我们可以知道MOV的作用就是把内容进行转移,至于转移的内容可以是具体的内容,也可以是一个地址,间接实现转移内容。其实不难发现,很多指令根据一些单词很容易记住其作用的,另外汇编语言大小写都可以,根据个人习惯。下面对MOV进行简单介绍:

MOV <目的操作数>,<源操作数>

累加器为目的操作数的指令:

MOV A ,Rn ; (Rn) ——>A,把Rn中的内容传给A,寄存器寻址方式
MOV A,@Ri ; ((Ri))——>A,间接寻址方式
MOV A,direct; (direct)——>A,直接寻址方式
例如:MOV A,70H; (70H)——>A ,A中存入地址为70H中的内容
MOV A,#direct; #direct——>A,立即数寻址方式
例如:MOV A,#70H; 70H——>A ,A中的内容为70H

这些指令的目的是把源操作数的内容送到累加器A中,以上四个指令还分别对应着寄存器寻址方式、间接寻址方式、直接寻址方式、立即数寻址方式。

寄存器间接地址为目的操作数的指令

MOV @Ri,A ;(A)——>((Ri))
MOV @Ri,direct ;(direct)——>((Ri))
MOV @Ri,#direct ;#direct——>((Ri))

堆栈操作:

PUSH(进栈指令),首先将栈指针SP加1,然后把内容送到SP所指的地址中

例如:

当(SP)= 60H,(A)= 30H,(B)= 70H,执行下面指令:

PUSH Acc ;(SP) + 1 = 61H ,(A) ——> 61H

PUSH B ;(SP) + 1 = 62H ,(B) ——> 62H

结果:

(61H)= 30H,(62H)= 70H, (SP) = 62H

POP(出栈指令),首先将内容送到SP所指的地址中,然后栈指针SP减1
例如:

当(SP)= 62H,(62H)= 70H,(61H)= 30H时,
执行下面指令:
POP DPH ; ((SP)) = DPH ,SP-1——>SP,DPH=70H
POP DPL ; ((SP)) = DPL ,SP-1——>SP,DPL=30H

结果:

(DPTR)= 7030,(SP) = 60H

累加器A与外部数据存储器传送指令:

MOVX A,@DPTR ;((DPTR))——>A,读取外部存储器中的数据
MOVX @DPTR,A ; (A)——>((DPTR)),把内部数据写入外部

这个地方主要注意区分一下MOV与MOVX,例子的话可以看数据传送片内到片外或者数据传送片外到片内

查表指令:

这类指令有两条,均是采用基址寄存器加变址寄存器间接寻址方式

  1. MOVC A,@A + PC.指令以PC作为基址寄存器,A中内容与PC中内容相加得到一个新的地址,再把该地址送入A中。
    例如:

当(A) = 30H时,执行1000H处指令
1000H:MOVC A,@A + PC

结果:

把1031H单元的中的内容送入A中,也许会有个疑问,为什么不是1030H单元中的内容送入A中,这是因为这条指令的本身就占了一个单元格,下一条指令的起始地址为1001H,即(PC)= 1001H。

  1. MOVC A,@A + DPTR,该指令以DPTR为基址寄存器。还是以栗子来看怎么运行的:

(DPTR) = 8100H,(A) = 40H,执行指令
MOVC A,@A + DPTR

结果:

把8140H单元内容送入A中。

字节交换指令:

XCH A,Rn;(A)<——>(Rn);

顾名思义,就是把两个不同单元中内容进行交换,完全互换。区别于XCHD A,Rn(半字节交换指令,只进行A中低四位与Rn中高四位互换)。

算术类指令:

加法
ADD A ,B; (A) = (A) + (B) 。
INC A ; 自加1,然后送入A中。
减法
DEC A ; 自减1,然后送入A中。
乘法
MUL AB ; BA = A*B;
除法
DIV AB; A = A/B(商),B = A/B(余数);

逻辑类

ANL : 与逻辑,全1为1,其余为0
ORL :或逻辑,全0为0,其余为1
XRL : 异或逻辑,不同为1,相同为0
RL : 左循环
RR :右循环

跳转类

JNB:内容为0,转移
JB:内容为1,转移
DJNZ:内容减1,不为0转移
CJNZ:比较结果不相等,转移

(参考书籍《单片机原理及应用》)

  • 8
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值