导图社区 MCS-51单片机的指令系统和时序
这是一篇关于MCS-51单片机的指令系统和时序的思维导图,包含震荡器、时钟电路和CPU时序、指令系统概述、寻址方式、数据传送指令、算逻运算和移位指令、控制转移和位操作指令、汇编语言的构成及伪指令。
编辑于2024-07-28 15:18:46第二章·MCS-51单片机的指令系统和时序
2.0 震荡器、时钟电路和CPU时序
震荡器与时钟电路
在单片机引脚的XTAL2分别是此放大器的输入和输出端与作为反馈元件的晶体一起构成了一个自激震荡器
使用外部震荡器信号其外来的信号加在XTAL1的引脚上
时序
时钟周期 T
时序中最小的时间单位,由外接晶体或外输入时钟来决定。其值为石英振荡器频率fosc的倒数
机器周期
完成特定功能所需要的时间
指令周期
执行一条指令所需要的时间,它是时序图中最大的时间单位
指令的机器周期数
单机器周期指令
双机器周期指令
四机器周期指令
指令的字节数
单字节指令
双字节指令
三字节指令
不同指令的时序
单字节单周期指令
在程序存储器ROM中仅占一个存储单元
双字节单周期指令时序
指令长度为两个字节,并存储在相邻的两个单元中。要想完整的将这样的指令执行完ROM须从ROM返回中读两次操作码
单字节双周期指令的时序
单字节,却需要两个机器周期运行
2.1 指令系统概述
指令格式
由操作码和操作数(或操作数地址)两部分构成
指令的三种表示形式
二进制的表示形式
特点:直接存储在程序存储器ROM中、被CPU直接识别、运行的指令形式,也称机器码
缺点:不便于人工阅读、记忆和调试修改
十六进制表示方式
对二进制形式的一种简化
指令的“助记符”方式(“汇编格式”)
一种由英文单词或字母、数字便于阅读、书写和交流
这种汇编格式的指令必须把它“翻译”为二进制形式“机器码”后才能为CPU所识别和执行
指令的字节数
单字节指令(49条)
无操作数
操作数隐含在操作码中
有操作数
寄存器名以三位数代码的形式在指令的后三位
双字节指令(46条)
含有一个操作数
含有一个8位操作数的地址
三字节指令(16条)
指令中的操作数为双字节
指令中分别包含1个字节的操作数和1个字节的操作数地址
指令的字节数与指令周期不对等
指令的分类
数据传送类指令
完成数据的传送
算术运算指令
用于操作数的加、减、乘除运算
逻辑操作和循环移位指令
操作数之间的逻辑加、与、取反和异或等操作
控制转移类指令
无条件转移
条件转移
调用和返回
位操作指令
位传送
类似于字节传送,对bit进行传递
位置位/复位
对某一位置一或清零
位运算
对某一位进行逻辑与、或、取反等
位控条件转移
对某一位的状态进行判断,满足条件转移
2.2 寻址方式
寄存器寻址
指令中含有一个存有操作数的寄存器Rn(n=0~7)
直接寻址
指令本身直接给出操作数在RAM中的地址
使用直接寻址应注意的三个问题
指令助记符中direct是用16进制数表示的操作数地址,当地址恰好在SFR区域时,指令也可以用寄存器名来表示
当直接地址时在工作寄存器区中时,可以使用两种寻址方式来访问
在指令系统中:字节地址与位地址时完全不同的概念,前者用direct表示,而后者用bit表示,但在指令中都是用16进制表示的数
立即寻址
指令中直接含有所需要的操作数data
寄存器间接寻址
指令中含有寄存器间接寻址保存操作数地址的寄存器Ri(i=0、1)
使用间接寻址时应注意的几个问题
使用间址指令前,往往要事先为间址寄存器初值
只能使用R0、R1作间址寄存器,即Ri(i=0、1)
间址可访问片内RAM,也是访问片外RAM唯一的方式
间址方式不能访问SFR单元
变址寻址
指令使用DPTR的内容相加,或PC中的内容作为基地址其和作为操作数地址
这是访问程序存储器ROM中数据的唯一的寻址方式
变址寻址方式用于查表操作,而数据表时建立在程序存储器ROM中
相对寻址
转移指令使用的一种寻址方式
相对转移(2个或3个字节)
给出一个转移地址的偏移量rel
注意的问题
CPU进行地址计算时,PC取值是执行本条转移指令后的地址值
偏移量的计算
如果转移地址超过相对寻址的范围(-127~+128)时,在编译时系统会提示出错
绝对转移(3个字节)
指令直接给出转移的目标地址(2个字节地址)
位寻址
指令形式同直接寻址相似,但指令中的地址时“位地址”,不是字节地址
2.3 数据传送指令
传送指令的特点
数据传送是编程中使用最多、最主要的操作
在指令中,必须指定被传送数据的源地址和目标地址
传送类指令除了以累加器A位目标的传送对PSW的P又影响外,其余的传送类指令对PWS一概无影响
内部数据传送类指令
立即寻址型传送指令
原操作数是立即数,处在指令的第二或第三字节,所以这类指令都是多字节指令
直接寻址型传送指令
指令中至少含有一个源操作数或目的操作数的地址。是2个或3个字节的指令格式,其中直接地址在第2或第3个字节上
寄存器寻址型传送指令
指令中含有存放操作数的寄存器名Rn
寄存器间接寻址型传送指令
指令中Ri中存放的不是操作数本身,而是操作 数在RAM中的地址(i=0、1)
内部数据传送类指令
不能根据主观意愿去“创造”指令
以累加器A为目的寄存器的传送指令会影响PSW中的奇偶位P,而其余的指令对PSW均无影响
会正确地估计指令的字节。凡是包含有立即数、直接 地址的指令,都应当在原有的基础上加1或2
对于同一问题可以有不同的编程方法
注意给程序进行正确的注释,这对于阅读、编写和修改程序都是非常重要的
外部数据传送类指令
16位数传送指令
指令系统中唯一的一条16位数据传送类指令
MOV DPTR,#data16
从ROM中的字节传送指令
MOVC A,@A+DPTR
A ← (A+DPTR)
MOVC A,@A+PC
PC ←PC+1, A ← (A+PC)
外部RAM的字节传送指令
实现外部RAM和累加器A之间的数据传送
只能使用寄存器间址的寻址方式
在MOVX指令模式下,单片机的P0、P2口做访问外部数据的地址和数据的总线
P0口做低8位地址和数据的复用总线
P2口做高8位地址总线
特点
使用MOVX或MOVC指令来访问外部存储器
此时,P0、P2作为地址和数据总线
执行MOVX指令访问RAM时,CPU产生/RD或/WR信号
执行MOVC指令访问ROM时,CPU产生/psen信号来选通外ROM
堆栈操作指令
堆栈操作是一种特殊的保护数据的传送指令
堆栈
一个用来保存程序断点、数据的存储区域。在51单片机中,栈区可以使用片内RAM的任意位置,具体由指针SP来确定
进栈操作: PUSH direct
sp+1→sp,(direct)→(sp)
出栈操作: POP direct
(sp)→(direct),sp -1→sp
数据交换指令
为提供一种方便的累加器和寄存器/RAM之间的数据交换,避免了使用mov 指令交换时的不便
2.4 算逻运算和移位指令
算术运算指令
加法指令
不带进位的加法指令 ( ADD )
ADD A ,Rn
A +Rn →A
ADD A ,direct
A +(direct) →A
ADD A ,@Ri
A +(Ri) →A
ADD A ,#data
A +data →A
带进位的加法指令(ADC)
ADDC A ,Rn
A +Rn +Cy →A
ADDC A ,direct
A +(direct) +Cy →A
ADDC A ,@Ri
A +(Ri) +Cy →A
ADDC A ,#data
A +data +Cy →A
加1指令(INC)
INC A
累加器A加一
INC Rn
Rn+1→Rn
INC direct
内存单元数据加一
INC @Ri
内存单元数据加一
INC DPTR
dptr+1→dptr
减法指令
带进位的减法指令(SUBB)
减1指令(DEC)
SUBB A ,Rn
A – Rn – Cy →A
SUBB A ,direct
A – (direct) – Cy →A
SUBB A ,@Ri
A – (Ri) – Cy →A
SUBB A ,#data
A – data – Cy →A
十进制调整指令(DAA)
DA A
若AC=1或A3~0 > 9,则A+06h→A
若Cy =1或A7~4 > 9,则A+60h→A
乘法和除法指令(MUL DIV)
MUL A B
a × b=b a (b存高8位,a存低8位)
DIV A B
a ÷ b=a…b (a存商,b存余数)
逻辑运算指令
逻辑与运算指令
ANL A,Rn
A ∧ R n → A
ANL A,direct
A ∧ (direct) → A
ANL A,@Ri
A ∧ ( Ri) → A
ANL A,#data
A ∧ data → A
ANL direct,A
(direct) ∧ A → direct
ANL direct,# data
(direct) ∧ data → direct
逻辑或运算指令
ORL A,Rn
A ∨ R n → A
ORL A,direct
A ∨ (direct) → A
OR A,@Ri
A ∨ ( R I ) → A
ORL A,#data
A ∨ data → A
ORL direct,A
(direct) ∨ A → direct
ORL direct,# data
(direct) ∨ data → direct
逻辑异或运算指令
XRL A ,Rn
A ⊕ R n → A
XRL A ,direct
A ⊕ (direct) → A
XR A ,@Ri
A ⊕ ( R I ) → A
XRL A ,#data
A ⊕ data → A
XRL direct ,A
(direct) ⊕ A → direct
XRL direct,# data
(direct) ⊕ data → direct
累加器清零
CLR A
累加器取反
CPL A
移位指令
RL A
RR A
RLC A
RRC A
SWAP A
2.5 控制转移和位操作指令
无条件转移指令
LJMP addr16
长转移指令
AJMP addr11
绝对转移
SJMP rel
短转移
JMP @A+DPTR
变址转移
条件转移指令
累加器A判零转移指令(双字节指令)
JZ rel
若A=0,则PC=PC+2+rel
若A≠0,则PC=PC+2
JNZ rel
若A≠0,则PC=PC+2+rel
若A=0,则PC=PC+2
比较条件转移指令(3字节)
CJNE A, #data ,rel
CJNE Rn ,#data ,rel
CJNE A ,direct ,rel
CJNE @Ri ,#data ,rel
减一条件转移指令
DJNZ Rn , rel
DJNZ direc , rel
子程序调用和返回指令
子程序调用指令
短调用指令
ACALL addr11
长调用指令
LCALL addr16
返回指令
RET
RETI
空操作指令
NOP
2.6 位操作指令
位传送指令
MOV C , bit
MOV bit , C
位置位和位清零指令
CLR C
0→Cy
CLR bit
0→( bit )
SETB C
1→Cy
SETB bit
1→( bit )
位运算指令
ANL C, bit
C∧( bit )→ C
ANL C, /bit
C∧ /(bit )→ C
ORL C, bit
C∨( bit )→ C
ORL C, /bit
C∨/( bit )→ C
CPL C
/C → C
CPL bit
/(bit) →bit
位控制转移指令
以Cy内容为条件的转移指令
JC rel
若Cy=1,则PC+2+rel→PC
若Cy=0,则PC+2→PC
JNC rel
若Cy=0,则PC+2+rel→PC
若Cy=1,则PC+2→PC
以位地址为内容为条件的转移指令
JB bit ,rel
若(bit)=1,则PC+3+rel→PC
若(bit)=0,则PC+3→PC
JNB bit ,rel
若(bit)=0,则PC+3+rel→PC
若(bit)=1,则PC+3→PC
JBC bit ,rel
若(bit)=1,则PC+3+rel→PC,0→bit
若(bit)=0,则PC+3→PC
2.7 汇编语言的构成及伪指令
汇编语言的格式
标号段
任选项。与操作码之间由“:”分隔。
操作码段、操作数段
必选项。是指令部分
注释段
任选项。与指令之间由“;”相隔
指令性语句
指示性语句
常用的伪指令
ORG
起始汇编
END
汇编结束
EQU
赋值
DB
定义字节