单片机的指令系统.ppt

上传人:sh****n 文档编号:6352900 上传时间:2020-02-23 格式:PPT 页数:103 大小:3.02MB
返回 下载 相关 举报
单片机的指令系统.ppt_第1页
第1页 / 共103页
单片机的指令系统.ppt_第2页
第2页 / 共103页
单片机的指令系统.ppt_第3页
第3页 / 共103页
点击查看更多>>
资源描述
1 指令概述寻址方式数据传送类指令算术运算类指令逻辑操作类指令控制转移类指令位操作指令 第3章80C51的指令系统 本章内容 2 3 1指令系统简介 1 指令概述一台微机所具有的所有指令的集合 就构成了指令系统 指令系统越丰富 说明CPU的功能越强 2 机器指令一台微机能执行什么样的操作 是在微机设计时确定的 一条指令对应着一种基本操作 由于计算机只能识别二进制数 所以指令也必须用二进制形式来表示 称为指令的机器码或机器指令 MCS 51单片机指令系统共有33种功能 42种助记符 111条指令 3 1 二进制的表示形式 以 累加器的内容 08H 为例 00100100B操作码OP 加法 00001000B操作数DATA 08H 特点 能被CPU直接识别 运行的形式 也称机器码 汇编语言的目标代码 缺点 不便于阅读 记忆和调试修改 3 指令表示 4 2 十六进制表示方式 它是对二进制形式的一种简化 00100100B24H00001000B08H 二进制表示的形式十六进制表示的形式 在实验室等少数环境下 可以将这种形式作为输入程序的一种辅助手段 但是 这种形式的指令格式必须由对应的监控程序把它们翻译成二进制的 机器码 后存入程序存储器并运行 5 3 指令的 助记符 方式 也称 汇编格式 00100100B24H00001000B08HADDA 08H 二进制表示形式十六进制表示汇编格式 返回 1 这是一种由英文单词或字母 数字来表征指令功能的形式 是一种便于阅读 书写和交流的表示形式 2 汇编 格式的指令必须 翻译 为二进制形式 机器码 后才能为CPU所识别和执行 3 三种不同的表示方法适用于不同的场合 6 指令格式 既指令的结构形式 操作码 操作数或操作数地址 由操作码和操作数 或操作数地址 构成指令的结构 举例 MOVA 0FFHADDA R0 返回 4 指令格式 7 采用助记符表示的汇编语言指令格式如下 标号是程序员根据编程需要给指令设定的符号地址 可有可无 标号由1 8个字符组成 第一个字符必须是英文字 不能是数字或其它符号 标号后必须用冒号 4 指令格式 8 操作码表示指令的操作种类 如MOV表示数据传送操作 ADD表示加法操作等 操作数或操作数地址表示参加运算的数据或数据的有效地址 操作数一般有以下几种形式 没有操作数项 操作数隐含在操作码中 如RET指令 只有一个操作数 如CPLA指令 有两个操作数 如MOVA 00H指令 操作数之间以逗号相隔 有三个操作数 如CJNEA 00H NEXT指令 操作数之间也以逗号相隔 注释是对指令的解释说明 用以提高程序的可读性 注释前必须加分号 4 指令格式 9 在MCS 51单片机的指令系统中 因指令操作码和操作数的不同 指令 在存储器中 长度也各不相同 分为单字节 双字节和三字节 单字节指令 49条 分无操作数 有操作数两种 无操作数 如INCDPTR10100011BINCA00000100B 特点 操作数隐含在操作码中 含有操作数寄存器名称的单字节指令 如 MOVA R011101000BMOVA R111101001B 特点 寄存器名以三位数代码的形式在指令的后三位 5 指令长度与执行时间 5 指令长度与执行时间 10 双字节指令 46条 指令的操作码和操作数各占一个字节 如 MOVA data01110100Bdata很明显 8位的操作数本身占据一个字节 n n 1 MOVA data 双字节指令在程序存储器的存放示意图 5 指令长度与执行时间 11 三字节指令 16条 指令中的操作数为双字节 如 MOVDPTR data161001000B data15 8 data7 0或者 指令中分别包含1个字节的操作数和1个字节的操作数地址 如 MOVdirect data举例 MOV20H 0FFH MOVDPTR data16 MOVdirect data 三字节指令在存储器中存放的方式示意图 5 指令长度与执行时间 12 指令的字节多是否意味着指令周期就长 从表中可见 指令的字节数与指令周期不是对等的关系 返回 5 指令长度与执行时间 5 指令长度与执行时间 13 6 符号说明 参见P51说明 14 3 2寻址方式 找到参与运算的数据或数据所在的地址的方式 称为寻址方式 寻址方式主要是指源操作数的寻址 15 目的地 XXH 操作数 MOVP1 55H MOVA 01H 55H 目的地 信 寄存器寻址 直接寻址 立即数寻址 寄存器间接寻址 变址寻址 相对寻址 位寻址 1 立即数寻址 16 MOVP1 55H 将立即数55H送P1口MOV20H 55 将立即数55H送20H单元MOVA 0F0H 将立即数0F0H送累加器AMOVR4 0FH 将立即数0FH送寄存器R4中MOVR0 20H 将立即数20H送寄存器R0口ANDA 0FH A的内容与立即数0FH与操作ORLA 0F0H A的内容与立即数0F0H或操作MOVA 01H 将立即数01H送累加器A中MOVA 55H 将立即数55H送累加器A中 注意 1 2 不能作为目的 3 注意 0F0H的意义 17 MOVA 3AH直接寻址是指把存放操作数的内存单元的地址直接写在指令中 在MCS 51单片机中 可以直接寻址的存储器主要有内部RAM区和特殊功能寄存器SFR区 参见P37 2 直接寻址 18 3 寄存器寻址 MOVR1 A寄存器寻址是指将操作数存放于寄存器中 寄存器包括工作寄存器R0 R7 累加器A 通用寄存器B 地址寄存器DPTR等 例如 指令MOVR1 A的操作是把累加器A中的数据传送到寄存器R1中 其操作数存放在累加器A中 所以寻址方式为寄存器寻址 19 寄存器寻址 直接寻址 立即数寻址 寄存器间接寻址 变址寻址 相对寻址 位寻址 设R0 3AH 内部RAM3AH中的值是65H 则指令MOVA R0的执行结果是累加器A的值为65H 目的地 寄存器 操作数 3AH 内部RAM 3AH 65H 3AH R0R1DPTR 目的地 2号 信在2号箱子里 1号 注意 1 间接寻址的标志 2 R0 R1 SP DPTR 4 寄存器间接寻址 20 寻址比较 MOVP1 R0 MOVP1 R0 MOVP1 20H MOVP1 20H MOVP1 R0 21 MOVP1 R0 MOVP1 R0 MOVP1 20H MOVP1 20H MOVP1 R0 22 MOVP1 R0 MOVP1 R0 MOVP1 20H MOVP1 20H MOVP1 20H 23 MOVP1 R0 MOVP1 R0 MOVP1 20H MOVP1 20H MOVP1 20H 24 寄存器寻址 直接寻址 立即数寻址 寄存器间接寻址 变址寻址 相对寻址 位寻址 MOVCA A DPTRMOVCA A PCJMP A DPTR 目的地 寄存器 操作数 内部RAM 3AH 65H 3AH 基址寄存器12H 变址寄存器34H 内部RAM 46H 65H A DPTRPC 46H 5 变址寻址 25 26 目的地 寄存器寻址 直接寻址 立即数寻址 寄存器间接寻址 变址寻址 相对寻址 XXH 位寻址 操作数 ORG2000HSJMP54HSJMP2056H出现的格式 PC 54H PC 2002H 2002H 2056H PC 2056H 6 相对寻址 27 设指令SJMP54H的机器码80H54H存放在2000H处 当执行到该指令时 先从2000H和2001H单元取出指令 PC自动变为2002H 再把PC的内容与操作数54H相加 形成目标地址2056H 再送回PC 使得程序跳转到2056H单元继续执行 28 寄存器寻址 直接寻址 立即数寻址 寄存器间接寻址 变址寻址 相对寻址 位寻址 1 00000000 想一想 如果想使27H单元的第3位置1 该怎么办呢 7 位寻址 29 位寻址地址表 例 SETB3DH 3D 3C 3B 3F 3E 3A 39 38 27H 30 寄存器寻址 直接寻址 立即数寻址 寄存器间接寻址 变址寻址 相对寻址 位寻址 SETB3DH 0000000 1 0 位地址的表示方式 31 3 3数据传送指令 按功能 MCS 51指令系统可分为下列5类 数据传送指令 29条 算术运算指令 24条 逻辑运算指令 24条 控制转移指令 17条 位操作指令 17条 32 数据传送类指令共29条 它是指令系统中最活跃 使用最多的一类指令 一般的操作是把源操作数传送到目的操作数 即指令执行后目的操作数改为源操作数 而源操作数保持不变 若要求在进行数据传送时 不丢失目的操作数 则可以用交换型传送指令 指令通式 MOV 目的地址源地址 数据 20H A 33 数据传送类指令不影响进位标志CY 半进位标志AC和溢出标志OV 但当传送或交换数据后影响累加器A的值时 奇偶标志P的值则按A的值重新设定 按数据传送类指令的操作方式 又可把传送类指令分为3种类型 数据传送 数据交换和堆栈操作 并使用8种助记符 MOV MOVX MOVC XCH XCHD SWAP PUSH及POP 34 1 数据传送到累加器A的指令MOVA RnMOVA directMOVA RiMOVA data这组指令的功能是 把源操作数的内容送入累加器A 例如 MOVA 10H 该指令执行时将立即数10H送入累加器A中 3 3 1内部RAM传送指令 35 例3 3 1已知 A 20H R0 50H 内部RAM中 40H 30H 50H 10H 指出下列指令执行后相应单元内容的变化情况 MOVA 40HMOVA 40HMOVA R0MOVA R0 36 2 数据传送到工作寄存器Rn的指令MOVRn AMOVRn directMOVRn data这组指令的功能是 把源操作数的内容送入当前工作寄存器区的R0 R7中的某一个寄存器 指令中Rn在内部数据存储器中的地址由当前的工作寄存器区选择位RS1 RS0确定 可以是00H 07H 08H 0FH 10H 17H 18H 1FH 例如 MOVR0 A 若当前RS1 RS0设置为00 即工作寄存器0区 执行该指令时 将累加器A中的数据传送至工作寄存器R0 内部RAM00H 单元中 37 3 数据传送到内部RAM单元 直接地址 MOVdirect AMOVdirect RnMOVdirect directMOVdirect RiMOVdirect data4 数据传送到内部RAM单元 间接地址 MOV Ri AMOV Ri directMOV Ri data 38 5 16位数传送指令 MCS 51指令系统中唯一的一条16位数据传送类指令 MOVDPTR data16DPTR是单片机内部SFR中的两个寄存器DPH DPL组合而成 其中DPH为高八位 DPL为低八位 DPTR是一个专门用于访问外部存储器的间址寄存器 寻址能力为64K 0 65535 39 例3 3 2已知 R0 50H R1 66H R6 30H内部RAM中 50H 60H 66H 45H 70H 40H指出下列指令执行后相应单元内容的变化情况 MOVA R6MOVR7 70HMOV70H 50HMOV40H R0MOV R1 88H 40 实现外部RAM和累加器A之间的数据传送 只有寄存器间接寻址的指令 MOVXA Ri使用Ri寄存器间址寻址范围0 255hMOVX Ri A在硬件电路中P0口输出8位地址数据 MOVXA DPTR使用DPTR间址 寻址范围0 65535hMOVX DPTR A在硬件电路中 使用P0口输出低8位 P2口输出高8位外部RAM地址 3 3 2外部RAM传送指令 41 外部RAM的字节传送指令举例 已知外部RAM的88H单元有一个数x 试编程将x送外部RAM的1818H单元 解 外部RAM中的数据是不能直接传送的 因此必须使用两次MOVX指令完成此操作 ORG2000HMOVR0 88H 为8位指针赋值MOVDPTR 1818H 为16位指针赋值MOVXA R0 取x到累加器AMOVX DPTR A x送RAM的1818h单元SJMP 停机END 返回 42 3 3 3数据交换指令 为提供一种方便的累加器和寄存器或RAM之间的数据交换 避免了使用一般MOV传送指令完成交换时的不便 格式 XCHA Rn A RnXCHA direct A direct XCHA Ri A Ri XCHDA Ri A3 0 Ri 3 0SWAPA A3 0 A4 7 43 数据交换指令举例 已知 片外RAM20h单元 内部RAM20h单元分别有数x和y 试编程互将两数相交换 MOVR1 20h 指针赋初值MOVXA R1 x aXCHA R1 交换a 20h y aMOVX R1 A y 20h 片外RAM y x 20h 20h 累加器A 1 2 3 44 3 3 4ROM的字节传送指令 查表指令 这类指令有两条 都属于变址寻址指令 MOVCA A DPTR A A DPTR MOVCA A PC PC PC 1 A A PC 该指令也称为 查表 指令 在ROM中建立一个数据表 可以使用DPTR PC作为数据表格的基地址 在第一条指令中 用DPTR作为基地址 使用前 先将数据表的首地址送入DPTR中 累加器A作为偏移量 由两者数据相加得到待查的表中数据地址并取出 远程查表指令 第二条指令是以程序计数器PC为基地址 由于PC的内容与该指令在ROM中的位置有关 所以一旦该指令在程序中的位置确定 其PC的值也就确定 近程查表指令 P62 45 ROM的字节传送指令举例 已知累加器A中存有0 9范围内的数 试用查表指令编写出查找出该数平方的程序 采用DPTR作基址寄存器 设平方表的首地址为2000h 累加器A中的内容恰好是查表的偏移量 首先将表的起始地址2000h送入DPTR中 MOVDPTR 2000H 指针赋值MOVCA A DPTR 平方值送A 2000h 2009h 2008h 2007h 2006h 2005h 2004h 2003h 2002h 2001h 46 3 3 5堆栈操作指令 堆栈操作是一种特殊的数据传送指令 堆栈 一个用来保存程序断点 数据的特殊的存储区域 在MCS 51单片机中 栈区是占用片内RAM的存储空间 具体栈位置由指针SP来确定 系统上电时 SP 07H 1 进栈操作 PUSHdirect SP 1 SP direct SP 2 出栈操作 POPdirect SP direct SP 1 SP 注意 寻址方式为直接寻址 所以PUSHA是错误的 应当是PUSHACC或PUSH0E0H 同理 PUSHR0也是错误的 进栈是堆栈向上 生长 的过程 即SP 1 出栈则相反 系统上电时 SP 07h SP的值可以根据需要进行修改 以适应具体编程的需要 在确定栈区位置时要考虑对数据区的影响 以避免数据区与栈区冲突 47 堆栈操作指令举例 一 下面是一个BCD码转换为二进制的子程序BCDB中有关堆栈操作的例子 在这里 进栈操作是为了保护主程序中相关寄存器中的数据 因为子程序要使用这些寄存器 org0800hbcdb pushPSWpushACCpushB popBpopACCpopPSWRET SP 48 堆栈操作指令举例 二 堆栈操作指令除了可以在子程序的设计中 对主程序的数据进行保护 还可以根据堆栈操作的特点完成一些特殊的操作 举例 设片内RAM的30h单元存有x 40h单元存有y 试将两个单元内容互换 push30hpush40hpop30hpop40h SP 07h 40h 30h 49 内部RAM前128字节 SFR之间可以相互传送 但最多只允许1个操作数使用寄存器间接寻址 MOV R0 R1是错误的 访问SFR必须使用直接寻址 不能采用寄存器间接寻址 MOVA P0或MOVA 80H正确MOVR0 80H和MOVA R0错误 8051没有提供B寄存器的寻址方式 乘法除法除外 MOVA B直接寻址 注意A和ACC的区别 MOV3FH A 寄存器寻址 2字节指令 MOV3FH ACC 直接寻址 3字节指令 8051数据传送指令的几点说明 50 3 4算术运算指令 不带进位的加法指令 ADD 1 加法指令 带进位的加法指令 ADC 加1指令 INC 2 减法指令 带进位的减法指令 SUBB 减1指令 DEC 3 十进制调整指令 DAA 4 乘法和除法指令 MULAB DIVAB 51 3 4 1加法指令 1 不带进位的加法指令格式 ADDA Rn A Rn AADDA direct A direct AADDA Ri A Ri AADDA data A data A 注意 1 参加运算的数据都应当是8位的 结果也是8位并影响PSW 2 根据编程者的需要 8位数据可以是无符号数 0 255 也可以是有符号数 128 127 52 不带进位的加法指令举例 一 试分析执行下列指令后累加器A和PSW中各标志的变化 MOVA 19HCy 0 ADDA 66HAC 0OV C7 C6 025A 00011001BP 1 102data 01100110B127001111111B1 若两数都是无符号数 则因Cy 0无进位 25 102 127 2 若两个数是有符号数 则因OV 0无溢出 cy 000C7C6AC 53 不带进位的加法指令举例 二 试分析执行下列指令后累加器A和PSW中各标志的变化 MOVA 5AHCy 0 ADDA 6BHAC 1 OV C7 C6 190A 01011010BP 0 107data 01101011B197011000101BC7C6AC1 若两数是无符号数 因Cy 0无进位 90 107 1972 若两数是有符号数 因OV 1 故有溢出 两个正数相加后变为负数 很明显结果是不正确的 54 2 带进位的加法指令格式 ADDCA Rn A Rn Cy AADDCA direct A direct Cy AADDCA Ri A Ri Cy AADDCA data A data Cy A 注意 这里的Cy是指令执行前的Cy 对PSW的影响同ADD指令 55 3 加1指令格式 INCA 累加器A加一INCRn Rn 1 RnINCdirect 内存单元数据加一INC Ri 内存单元数据加一INCDPTR dptr 1 dptr 注意 1 除了第一条对PSW的P有影响外 其余对PSW均无影响 2 由于上面的原因 INC指令不能作为一般的数据算术运算使用 INC主要用于修改数据指针等控制 循环语句中使用 56 编程举例 已知M1 M2单元中存有两个16位无符号数x1 x2 低位在前 试写出x1 x2 并将结果放入M1 M1 1单元 低8位在M1单元 设两数之和不会超过16位 65535 解 MOVR0 M1 x1指针赋初值MOVR1 M2 x2指针赋初值MOVA R0 取x1低8位送AADDA R1 x1与x2低8位相加MOV R0 A 低8位和送m1单元INCR0INCR1 修改指针MOVA R0 取x1的高8位送AADDCA R1 x1与x2的高8位和Cy相加MOV R0 A 结果送M1 1单元 M1 M1 1 M2 M2 1 57 3 4 2减法指令 带进位的减法指令 在MCS 51单片机的指令系统中 只有 带进位的减法SUBB 减一DEC两种指令 1 减法指令 格式 SUBBA Rn A Rn Cy ASUBBA direct A direct Cy ASUBBA Ri A Ri Cy ASUBBA data A data Cy A 58 使用减法指令要注意的问题 在MCS 51的指令系统中没有不带Cy的减法 所以在使用SUBB指令前必须使用一条清除Cy的指令 CLRC 59 减法指令应用举例 试分析执行下列指令后累加器A和PSW中各标志的变化 CLRCMOVA C9HSUBBA 054H201a 11001001 84data 01010100117001110101 117手工计算 60 2 减一指令 格式 DECA 累加器A减一DECRn Rn 1 RnDECdirect 内存单元数据减一DEC Ri 内存单元数据减一 注意 1 除了第一条对PSW的P有影响外 其余对PSW均无影响 2 由于上面的原因 DEC指令一般不作为数据算术运算使用 因为不能对PSW的OV等位产生影响 它主要用于修改数据指针在控制 循环语句中使用 61 3 4 3十进制调整指令 在CPU进行BCD码运算时 必须在运算后进行十进制调整 这是因为 CPU在运算时 并不知道数据是二进制还是BCD码 格式 DAA 若AC 1或A3 0 9 则A 06h A 若Cy 1或A7 4 9 则A 60h A 注意 1 DAA指令必须紧跟在加法指令之后 2 DAA指令只适用于加法指令的调整 62 十进制调整指令应用举例 一 1 BCD加法运算 试写出完成85 59的BCD码的加法程序 MOVA 85HADDA 59HDAASJMP 85a 10000101B 59dtat 01011001B14411011110B低4位 9 所以加06h 00000110B11100100B高4位 9 所以加60h01100000B101000100B结果为144h 1包含在Cy 注意 144H是用16进制数来表示十进制 既BCD码 63 3 4 4乘法和除法指令 这是MCS 51单片机唯一的一类单字节4周期指令 它相当于4条加法指令的运行时间 格式 MULAB a b b a b存高8位 a存低8位 DIVAB a b a b a存商 b存余数 注意 指令对标志的影响 1 在乘法指令中对PSW的影响有Cy OV 和P 具体如下 Cy 0 P取决于A中 1 的个数 OV表明积的大小 当积超过255 B 0 时 OV 1 2 在除法指令中 Cy P与乘法相同 在执行除法指令时 若B 0时OV 1 表示除数 0除法无意义 其余情况下OV被复位 64 3 5逻辑运算指令 功能 对2个8位二进制数进行逻辑与 或 非和异或操作 特点 除了以累加器A为目标寄存器的指令影响PSW的P位外 其余指令对PSW均无影响 1 逻辑与运算指令 ANL 2 逻辑或运算指令 ORL 3 逻辑异或指令 XRL 4 累加器清零和取反指令 CLR CPL 65 1 逻辑与运算指令 格式 ANLA Rn A Rn AANLA direct A direct AANLA Ri A Ri AANLA data A data AANLdirect A direct A directANLdirect data direct data direct上面的指令也可以分为两类 1 以累加器A为目标寄存器的逻辑运算指令 2 以内存单元为目标的逻辑运算指令 66 应用举例 一 已知R0 30H和 30H 0AAH 试问执行下列指令后累加器A和30H单元中的内容是什么 1 MOVA 0FFH2 MOVA 0FHANLA R0ANLA 30H A 30H 30H 0AAH A 0AH 30H 0AAH 3 MOVA 0F0H4 MOVA 80HANLA R0ANL30H A A 0A0H 30H 0AAH A 80H 30H 80H 很明显 ANL操作可以从某个存储单元中取出某几位 而把其它的位清零 67 2 逻辑或运算指令 格式 ORLA Rn A Rn AORLA direct A direct AORA Ri A RI AORLA data A data AORLdirect A direct A directORLdirect data direct data direct同与运算一样 上面的指令也可以分为两类 1 以累加器A为目标寄存器的逻辑运算指令 2 以内存单元为目标的逻辑运算指令 68 应用举例 设累加器A 0AAH P1口 0FFH 试编程将累加器A中的低四位送P1口的低四位 而P1口的高四位不变 解 MOVR0 A 累加器A中的数据暂存ANLA 0FH 屏蔽A的高4位ANLP1 0F0H 屏蔽P1口的低4位ORLP1 A 在P1口组装MOVA R0 恢复累加器A的数据 小结 与运算可以 清零 某些位 或运算可以 置位 某些位 69 3 逻辑异或运算指令 格式 XRLA Rn A Rn AXRLA direct A direct AXRA Ri A RI AXRLA data A data AXRLdirect A direct A directXRLdirect data direct data direct特点 按位运算 相同时为0 不同时为1 使用异或可以实现将某个字节的数据或将数据的某几位取反 70 举例 已知 外部RAM的30H单元中有一个数AAH 现要将其高4位不变 低4位取反 试编程 解1 利用MOVXA Ri指令 MOVR0 30H10101010MOVXA R0 00001111XRLA 0FH10100101MOVX R0 A解2 利用MOVXA DPTRMOVDPTR 0030HMOVXA DPTRXRLA 0FHMOVX DPTR A 71 4 累加器清零和取反指令 用传送指令可以实现对累加器A的清零和取反操作 但是它们都是双字节指令 在MCS 51的指令系统中专门设计了单字节 单周期对累加器清零和取反的指令 格式 CLRA 累加器清零CPLA 累加器取反取反指令可以方便的实现求补操作 举例 已知30H单元中有一个数x 写出对它求补的程序 MOVA 30HCPLAINCAMOV30H A 72 A 0 A 7 A 0 A 7 A 0 A 7 A 0 A 7 CY CY RLARRARLCARRCA 注意 执行带进位的循环移位指令之前 必须给CY置位或清零 5 循环移位指令 73 循环指令可以实现数据各位的循环移位 循环检测 也可以对数据乘2 除2操作 MOVA 02HCLRCRLCA A 2MOVA 06HCLRCRRCA A 2 74 3 6控制转移指令 1 无条件转移指令2 条件转移指令3 子程序调用和返回4 空操作指令 75 3 6 1无条件转移指令 格式 LJMPaddr16 长转移指令 寻址范围65535AJMPaddr11 短转移 寻址范围2KSJMPrel 相对转移 转移范围 127 128 JMP A DPTR 间接转移 寻址范围65535 LJMP指令 三字节 AJMP指令 双字节 SJMP指令 双字节 JMP指令 单字节 76 1 长转移指令 三字节双周期指令 指令执行时 将指令码中的addr16送入PC中 使程序无条件的转向addr16所指向的新地址执行程序 举例 已知某单片机的监控程序地址为A080H 试问用什么方法使单片机开机后自动的转向该监控程序 解 因为单片机上电时 PC 0000H 所以在0000H单元存放一条LJMP0A080H的指令即可 ROM 0000H0001H0002H0003H 77 2 短转移指令 双字节 双周期指令 将AJMP指令中的11位转移地址替换掉原来PC中16位地址中的低11位地址 指令中的11位地址 确定了地址的转移范围在2K以内 所以AJMP也称 页内转移 指令 A10a9a8操作码a7 a0 AJMP指令 PC程序计数器 78 MCS 51的ROM系统是以2K为一页来划分程序存储器 这样对于4K的片内ROM存储器可以分为2页 片外64K的ROM可以分为32页 在执行AJMP指令时 PC的高5位决定了ROM中的页地址 而AJMP指令的低11位地址用来选择页内地址 在一般情况下 AJMP指令应当与目标地址在同一页内 更具体的说 目标地址应当与AJMP指令取出后的PC值 PC PC 2 在同一页内 否则转移将会出现错误 79 ROM的64K存储空间的页面 部分 划分表 80 ROM的64K存储空间的页面示意图 AAA MOVA R0MOVR1 A AJMPAAA 0100H 07FEH 00000111111111111110 PC值 00001000000000000000 PC 2值 00001001000000000000 AJMP指令中的11位地址 原本AJMP指令要转到本页的0100H单元但是由于PC的高5位页面地址发生了变化使AJMP指令实际转到下一页0900H单元 最后PC值 发生跨页错误 81 AJMP转一指令是用来做页内2K范围的转移 如果使用不当 会发生错误的 跨页 操作 产生跨页的原因是AJMP指令处于每一页的最后两个单元的结果 所以避免这种现象的方法就是不要在每一页的最后两个单元使用AJMP指令 如果目标地址与AJMP地址不再同一页内 建议使用LJMP指令替代AJMP 使用AJMP指令时 11位的绝对地址可以用符号地址取代 正确使用AJMP转移指令 82 3 相对转移SJMP指令 格式 SJMPrelrel为偏移量 127 128 rel 偏移量 的计算公式 rel 目标地址 源地址 2 其中 2为SJMP指令的长度 例1 如图 要转到0116H时 rel 0116H 0110H 2 04H 例2 要转到0109H时 rel 0109H 0110H 2 F7H 9 实际编程时 使用符号地址取代rel以简化计算 在汇编时由汇编程序来计算rel PC PC 2 0109H 0110H 0116H 83 4 间接转移指令 散转指令 格式 JMP A DPTR单字节操作码为73H特点 转移地址由累加器A的内容与DPTR相加形成 用途 用来制作一个多分支的转移结构 举例 MOVDPTR TABLE 指针赋表头地址JMPA A DPTR 转移地址由A DPTR产生TABLE AJMPROUT0 多分支转移表AJMPROUT1AJMPROUT1AJMPROUT2 84 3 6 2条件转移指令 1 累加器A判零转移指令 双字节指令 JZrel 若A 0 则PC PC 2 rel 若A 0 则PC PC 2JNZrel 若A 0 则PC PC 2 rel 若A 0 则PC PC 2 85 2 比较不相等转移指令 3字节 a data时 PC 3 PC Cy 0CJNEA data rela data时 PC 3 rel Cy 0CJNERn data rela Y Cy 1则X Y 86 3 减一条件转移指令 1 DJNZRn rel Rn 1 Rn 若Rn 0则PC 2 rel PC 若Rn 0则PC 2 PC2 DJNZdirect rel direct 1 direct 若 direct 0则PC 3 rel PC 若 direct 0则PC 3 PC注意 第一条指令为双字节 第二条指令为三字节 指令本身先做一个带回送的减一运算操作 然后根据运算的结果是否为零作为转移的条件 例如 有一段程序如下 MOV23H 0AHCLRALOOPX ADDA 23HDJNZ23H LOOPXSJMP 该程序执行后 A 10 9 8 7 6 5 4 3 2 1 37H 87 88 应用举例 令片内RAM中DATA为起始地址的数据块中连续10个无符号数相加 并把和送到SUM单元 设其和小于256 ORG1000HSTART MOVR2 0AH 数据块长度10送计数器R2MOVR0 DATA 数据块起始地址送指针R0CLRA 累加器清零LOOP ADDA R0 累加部分和INCR0DJNZR2 LOOP 若R2 1 0则转LOOP继续MOVSUM A 存累加和SJMP 停机END这是一个循环结构的程序 DJNZ指令又是决定整个循环是否结束的控制语句 89 3 6 3子程序调用和返回指令 一 子程序调用指令 1 短调用指令ACALLaddr112 长调用指令LCALLaddr16 二 返回指令 1 子程序返回RET2 中断返回RETI 90 1 调用指令 1 短调用指令ACALLaddr11PC 2 PCSP 1 SP PC7 0 SP SP 1 SP PC15 8 SP addr11 PC10 02 长调用指令LCALLaddr16PC 3 PCSP 1 SP PC7 0 SP SP 1 SP PC15 8 SP addr16 PC 子程序的调用包含两部分内容 A 实现转入子程序的入口地址 这主要由调用语句中的addr11或addr16实现 B 子程序完成后 能够自动的返回 这是由调用语句执行时依靠堆栈操作已经将返回地址压栈保存 带返回时弹出送PC实现的 91 2 返回指令 格式 RET 子程序返回操作码 22H 操作 SP PC15 8 SP 1 SP SP PC7 0 SP 1 SP格式 RETI 中断子程序返回操作码 32H 操作 SP PC15 8 SP 1 SP SP PC7 0 SP 1 SPRETI与RET的区别在于返回主程序后 RETI还要清除相应的中断优先级状态位 使系统响应低优先级的中断 92 3 6 4空操作指令 格式 NOP 单字节操作码 00H 功能 仅使程序计数器PC加一 消耗12个时钟周期 所以时常用作延时 93 位操作特点 操作数不是字节 而是某一位 每位的取值只能是 0 或 1 因而也称之为布尔变量操作 布尔变量存在于片内RAM的位寻址区 20H 2FH 11个可以按位寻址的SFR 3 7位操作指令 主要内容 1 位传送指令2 位置位和位清零指令3 位运算指令4 位控制转移指令 94 3 7 1位传送指令 格式 MOVC bit 其中 C为PSW中的CyMOVbit C bit为布尔变量的位地址举例 试将00H位和7FH位中的内容互换 解 两个位互换必须找一个位作为缓冲位 MOVC 00HMOV01H CMOVC 7FHMOV00H CMOVC 01HMOV7FH C 例如 若 CY 1 P3 11000101B P1 00110101B 执行以下指令 MOVP1 3 CMOVC P3 3MOVP1 2 C结果为 CY 0 P3的内容未变 P1的内容变为00111001B 95 96 3 7 2位置位和位清零指令 格式 CLRC 0 CyCLRbit 0 bit SETBC 1 CySETBbit 1 bit 例如 若 P1 10011101B 执行指令 CLRP1 3 后 结果为 P1 10010101B 执行指令 SETBP1 1 后 结果为 P1 10011111B 97 3 7 3位逻辑运算指令 格式 ANLC bit C bit CANLC bit C bit CORLC bit C bit CORLC bit C bit CCPLC C CCPLbit bit bit 98 3 7 4位控制转移指令 一 以Cy内容为条件的转移指令格式 JCrel 若Cy 1 则PC 2 rel PC 若Cy 0 则PC 2 PCJNCrel 若Cy 0 则PC 2 rel PC 若Cy 1 则PC 2 PC 二 以位地址为内容为条件的转移指令格式 JBbit rel 若 bit 1 则PC 3 rel PC 若 bit 0 则PC 3 PCJNBbit rel 若 bit 0 则PC 3 rel PC 若 bit 1 则PC 3 PCJBCbit rel 若 bit 1 则PC 3 rel PC 0 bit 若 bit 0 则PC 3 PC 99 位操作指令应用举例 已知 内部RAM的M1 M2单元各有两个无符号的8位数 试编程比较其大小 并将大数送MAX单元 解 MOVA M1 操作数1送累加器ACJNEA M2 LOOP 两个数相比较LOOP JNCLOOP1 M1 M2时转LOOP1MOVA M2 M1 M2时 取M2到ALOOP1 MOVMAX A A中数据送MAX单元说明 1 第2条指令作为比较指令使用 不论结果都转LOOP2 第3条指令是一条位控转移指令 根据Cy的状态控制转移 本章小结 指令系统的功能强弱决定了计算机性能的高低 80C51单片机的指令系统共有111条指令 其指令执行时间短 指令字节少 位操作指令极为丰富 指令由操作码和操作数组成 操作码用来规定要执行的操作的性质 操作数用于给指令的操作提供数据和地址 8051的指令按其编码长短可以分为3种格式 单字节指令 双字节指令和三字节指令 寻址方式是寻找存放操作数的地址并将其提取出来的方法 8051单片机有7种基本的寻址方式 寄存器寻址 直接寻址 寄存器间接寻址 立即寻址 变址寻址 相对寻址和位寻址 100 数据传送类指令在单片机中应用最为频繁 其特点是执行的结果不影响标志位的状态 算术运算类指令的特点是执行的结果通常影响标志位的状态 逻辑运算类指令执行的结果一般不影响标志位CY AC和OV 仅在涉及累加器A时才对标志位P产生影响 控制程序的转移要利用转移指令 8051的转移指令有无条件转移 条件转移及子程序调用与返回等 位操作具有较强的位处理能力 在进行位操作时 以进位标志CY作为位累加器 101 思考题与习题 1 80C51系列单片机的指令系统有何特点 2 80C51单片机有哪几种寻址方式 各寻址方式所对应的寄存器或存储器空间如何 3 对于80C52单片机内部RAM还存在高128字节 应采用何种方式访问 4 试用位操作指令实现下列逻辑操作 要求不得改变未涉及的位的内容 1 使ACC 0置位 2 清除累加器高4位 3 清除ACC 3 ACC 4 ACC 5 ACC 6 102 5 试编写程序 将内部RAM的20H 21H 22H三个连续单元的内容依次存入2FH 2EH和2DH单元 6 试编写程序 完成两个16位数的减法 7F4DH 2B4EH 结果存入内部RAM的30H和31H单元 31H单元存差的高8位 30H单元存差的低8位 7 试编写程序 将R1中的低4位数与R2中的高4位数合并成一个8位数 并将其存放在R1中 8 试编写程序 将内部RAM的20H 21H单元的两个无符号数相乘 结果存放在R2 R3中 R2中存放高8位 R3中存放低8位 103
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!