文档介绍:一个单片机所需执行指令的集合即为单片机的指令系统。 单片机使用的机器语言、 汇编语言 及高级语言, 但不管使用是何种语言, 最终还是要 “翻译” 成为机器码, 单片机才能执行之。 现在有很多半导体厂商都推出了自己的单片机, 单片机种类繁多, 品种数不胜数, 值得注意的是 不同的单片机它们的指令系统不一定相同, 或不完全相同。 但不管是使用机器语言、 汇编语言还 是高级语言都是使用指令编写程序的。
所谓机器语言即指令的二进制编码, 而汇编语言则是指令的表示符号。 在指令的表达式上也 不会直接使用二进制机器码, 最常用的是十六进制的形式。 但单片机并不能直接执行汇编语言和 高级语言, 都必须通过汇编器“翻译”成为二进制机器码方能执行,但如果直接使 用二进制来编写程序, 那将十分不便, 也很难记忆和识别, 不易编写、 难于辨读, 极易出错,同 时出错了也相当难查找。所以现在基本上都不会直接使用机器语言来编写单片机的程序。最好的办法 就是使用易于阅读和辨认的指令符号来代替机器码,我们常称这些符号为助记 符,用助记符的形式表示的单片机指令就是汇编语言, 为便于记忆和阅读, 助记符号通常都使用 易于理解的英文单词和拼音字母来表示。
每种单片机都有自己独特的指令系统, 那么指令系统是开发和生产厂商定义的, 如要使用其 单片机,用户就必须理解和遵循这些指令标准,要掌握某种(类)单片机,指令系统的 学****是必须的。
MCS-51 共有 111 条指令,可分为 5 类:
. 数据传送类指令(共 29 条)
. 算数运算类指令(共 24 条)
. 逻辑运算及移位类指令(共 24 条)
. 控制转移类指令(共 17 条)
. 布尔变量操作类指令(共 17 条)
一些特殊符号的意义
在介绍指令系统前, 我们先了解一些特殊符号的意义, 这对今后程序的编写都是相当有用 的。
Rn ——当前选中的寄存器区的 8 个工作寄存器 R0— R7( n=0-7 )。
Ri ――当前选中的寄存器区中可作为地址寄存器的两个寄存器 R0和R1 (i=0,1 )
direct —内部数据存储单元的 8 位地址。 包含 0— 127(255)内部存储单元地址和特殊功能 寄存地址。
#data ―指令中的 8 位常数。
#data16 ―指令中的 16 位常数。
addr16 ―用于 LCALL 和 LJMP 指令中 16 目的地地址,目的地址的空间为 64kB 程序存
的
储器地址。
#addr11 ―用于 ACALL AJMP 指令中的 11 目的地地址, 目的地址必须放在与下条指令 和
第一个字节同一个 2kB 程序存储器空间之中。
rel — 8位带符号的偏移字节,用于所有的条件转移和 SJMP等指令中,偏移字节对于下
条指令的第一个字节开始的 -128 ―― +127范围内。
@ —间接寄存器寻址或基址寄存器的前缀。
/ —为操作的前缀,声明对该位操作书取反。
DPTR —数据指针。
bit —内部 RAM 和特殊功能寄存器的直接寻址位。
A —累加器。
B—累加器 B。用于乘法和除法指令中。
C —进位标志位。
(x) —某地址单元中的内容。
((x)) —由 X 寻址单元中的内容。
MCS-51 的寻址方式
寻址的“地址”即为操作数所在单元的地址,绝大部分指令执行时都需要用到操作数, 那么到哪里去取得操作数呢?最易想到的就是告诉 CPU 操作数所在的地址单元,从那里可 取得响应的操作数,这便是“寻址”之意。 MCS-51 的寻址方式很多,使用起来也相当方便,
功能也很强大,灵活性强。这便是 MCS-51 指令系统“好用”的原因之一。下面我们分别讨论 几种寻址方式的原理。
. 直接寻址
指令中操作数直接以单元地址形式出现,例如:
MOV A,68H
这条指令的意义是把内部 RAM 中的 68H 单元中的数据内容传送到累加器 A 中。值得注意的是 直接寻址方式只能使用 8 位二进制地址,因此这种寻址方式仅限于内部 RAM 进行寻址。低 128 位单 元在指令中直接以单元地址的形式给出。 对于特殊功能寄存器可以使用其直接地址进行访问, 还可 以以它们的符号形式给出, 只是特殊功能寄存器只能用直接寻址方式访问,而无其它方法。
. 寄存器寻址 寄存器寻址对选定的 8 个工作寄存器 R0-R7 进行操作, 也就是操作数在寄存器中, 因此指定 了寄存器就得到了操作数,寄存器寻址的指令中以寄存器的符号来表示寄存器,例如:
MOV A,R1
这条指令的意义是把所用的工作寄存器组中的 R3 的内容送到累加器 A 中。
值得一提的是工作状态寄存器的选择是通过程序状态字寄存器来控制的, 在这条指令前,