免费预览已结束,剩余58页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2020 4 21 1 第四章80C51的指令系统 2020 4 21 2 4 1指令系统简介 7种寻址方式111条指令 2020 4 21 3 常用符号 Rn 工作寄存器中的寄存器R0 R1 R7之一 Ri 工作寄存器中的寄存器R0或R1 data 8位立即数 data16 16位立即数 direct 片内RAM或SFR的地址 8位 间接寻址寄存器 Bit 片内RAM或SFR的位地址 addr11 11位目的地址 addr16 16位目的地址 2020 4 21 4 rel 补码形式的8位地址偏移量 偏移范围为 128 127 位操作指令中 该位求反后参与操作 不影响该位X 片内RAM的直接地址或寄存器 X 相应地址单元中的内容 箭头左边的内容送入箭头右边的单元内 2020 4 21 5 4 2寻址方式 1立即寻址ImmediateAddressing 操作数就包含在指令代码中 在操作码之后 称为立即数 用 表示 如 MOVP1 80HMOVR7 0F5HMOVDPTR 1245H 操作数存在程序存储器中 2020 4 21 6 2直接寻址DirectAddressing直接使用操作数所在单元的地址找到了操作数 所以称这种方法为直接寻址 操作数在SFR 内部RAM 位地址空间 如 MOVA 00HMOVC 60HMOVA 0F0H 2020 4 21 7 3寄存器寻址RegisterAddressing 对选定的工作寄存器R0 R7 累加器A 通用寄存器B 地址寄存器DPTR中的数进行操作 例 MOVA R0功能 将R0中数据送累加器A中 问题 工作寄存器就是内存单元的一部分 如果选择工作寄存器组0 实际R0就是RAM的00H单元 那么 MOVA 00H 和 MOVA R0 不就没什么区别了吗 的确 这两条指令都是将00H单元中的内容送A 但执行的过程不同 执行第一条指令需2个机器周期 而第二条则只需1个机器周期 第一条指令变成最终目标码要两个字节 E5H00H 而第二条则只一个字节 E8H 就可以 2020 4 21 8 4 2 4寄存器间接寻址RegisterIndirectAddressing 把地址放在另外一个寄存器中 根据这个寄存器中的数值决定该到哪个单元中取数据 R0 R1 8位地址 片内低128字节或片外DPTR 16位 片外64KBMCS 51如 MOVA R0MOVXA R0MOVXA DPTR 操作数在片内RAM中 操作数在片外RAM中 操作数在片外RAM中 2020 4 21 9 以DPTR或PC为基址寄存器 累加器A为变址寄存器 把两者内容相加 结果作为操作数的地址 常用于查表操作 MCS 51MOVCA A DPTR A DPTR AMOVCA A PC PC 1 PC A PC A 4 2 5变址寻址 基址 变址 Base Register plus Index Register IndirectAddressing 操作数在程序存储器中 2020 4 21 10 E0 A 如 MOVCA A DPTR设DPTR 2000H A E0H 20E0H 47 指令代码 2020 4 21 11 4 2 6相对寻址 将PC中的当前内容与指令第二字节给出的数相加 结果作为跳转指令的转移地址 转移目的地址 PC中的当前内容称为基地址 本指令后的字节地址 指令第二字节给出的数据称为偏移量 1字节带符号数 常用于跳转指令 如 JC23H若C 0 不跳转 C 1 跳转 RelativeAddressing 改变PC 2020 4 21 12 如 JC23 1025H 23H 1002H 指令代码 当前PC 2020 4 21 13 对片内RAM的位寻址区和某些可位寻址的特殊功能寄存器进行位操作时的寻址方式 如 SETB3DH 将27H 5位置1CLRC Cy位清0 4 2 7位寻址BitAddressing 操作数在片内RAM位地址区或SFR某些位中 2020 4 21 14 小结 寻址方式涉及的存储器空间 2020 4 21 15 4 3 1数据传送类指令 29条 DataTransferInstruction MCS 51助记符 MOV MOVX MOVC XCH XCHD SWAP PUSH POP源操作数寻址方式 5种 立即寻址 直接寻址 寄存器寻址 寄存器间接寻址 变址寻址 目的操作数寻址方式 3种 直接寻址 寄存器寻址 寄存器间接寻址注意 除了目的操作数为ACC的指令影响奇偶标志P外 一般不影响标志位 2020 4 21 16 4 3 1数据传送类指令 1 累加器A为目的操作数的指令MOVA data data AMOVA direct direct AMOVA Rn Rn AMOVA Ri Ri A 内部RAM数据传送指令 2020 4 21 17 内部RAM数据传送指令 2 以寄存器Rn为目的操作数的指令MOVRn data data RnMOVRn direct direct RnMOVRn A A Rn 例1A 5BH R1 10HR2 20H R3 30H 30H 4FH执行指令 MOVR1 A A R1MOVR2 30H 30H R2MOVR3 83H 83H R3执行后 R1 5BH R2 4FH R3 83H 2020 4 21 18 3 十六位数的传递指令 1条 MOVDPTR data168051是一种8位机 这是唯一的一条16位立即数传递指令 功能 将一个16位的立即数送入DPTR中去 其中高8位送入DPH 低8位送入DPL 例 MOVDPTR 1234H执行完了之后DPH中的值为12H DPL中的值为34H 如果我们分别向DPH DPL送数 则结果也一样 如下面两条指令 MOVDPH 35HMOVDPL 12H 则就相当于执行了MOVDPTR 3512H 2020 4 21 19 累加器A与片外RAM之间的数据传递类指令 4条 MOVXA RiMOVX Ri AMOVXA DPTRMOVX DPTR A说明 1 在51中 与外部存储器RAM打交道的只可以是A累加器 所有需要送入外部RAM的数据必需要通过A送去 而所有要读入的外部RAM中的数据也必需通过A读入 在此我们可以看出内外部RAM的区别了 内部RAM间可以直接进行数据的传递 而外部则不行 2020 4 21 20 2 要读或写外部的RAM 当然也必须要知道RAM的地址 在后两条指令中 地址是被直接放在DPTR中的 而前两条指令 由于Ri 即R0或R1 只是8位的寄存器 所以只提供低8位地址 高8位地址由P2口来提供 3 使用时应先将要读或写的地址送入DPTR或Ri中 然后再用读写命令 例 将外部RAM中100H单元中的内容送入外部RAM中200H单元中 MOVDPTR 0100HMOVXA DPTRMOVDPTR 0200HMOVX DPTR A 2020 4 21 21 读程序存储器指令 2条 MOVCA A DPTRMOVCA A PC例 有一个数在R0中 要求用查表的方法确定它的平方值 此数的取值范围是0 5 MOVDPTR 100HMOVA R0MOVCA A DPTR ORG0100HDB0 1 4 9 16 25 如果R0中的值为2 则最终地址为100H 2为102H 到102H单元中找到的是4 本组指令是将ROM中的数送入A中 本组指令也被称为查表指令 常用此指令来查一个已做好在ROM中的表格说明 查找到的结果被放在A中 因此 本条指令执行前后 A中的值不一定相同 2020 4 21 22 堆栈操作 2条 PUSHdirect SP SP 1 SP direct POPdirect direct SP SP SP 1第一条为压入指令 就是将direct中的内容送入堆栈中 第二条为弹出指令 就是将堆栈中的内容送回到direct中 例 MOVSP 5FHMOVA 100MOVB 20PUSHACCPUSHB 则执行第一条PUSHACC指令是这样的 将SP中的值加1 即变为60H 然后将A中的值送到60H单元中 因此执行完本条指令后 内存60H单元的值就是100 同样 执行PUSHB时 是将SP 1 即变为61H 然后将B中的值送入到61H单元中 即执行完本条指令后 61H单元中的值变为20 2020 4 21 23 1 给出每条指令执行后的结果 MOV23H 30HMOV12H 34HMOVR0 23HMOVR7 12HMOVR1 12HMOVA R0MOV34H R1MOV45H 34HMOVDPTR 6712HMOV12H DPHMOVR0 DPLMOVA R0 23H 30H 12H 34H R0 23H R7 34H R1 12H A 30H 34H 34H 45H 34H DPTR 6712H 12H 67H R0 12H A 67H 内部RAM 2020 4 21 24 4 3 2算术运算类指令 24条 ArithmeticOperations 主要对8位无符号数 也可用于带符号数运算 包括 加 减 乘 除 加1 减1运算指令 影响PSW有关位 2020 4 21 25 4 3 2 1加法指令 ADDA data A data AADDA direct A direct AADDA Rn A Rn AADDA Ri A Ri A用途 将A中的值与源操作数所指内容相加 最终结果存在A中 1 不带进位位的加法指令 4条 2020 4 21 26 2 带进位位的加法指令 4条 ADDCA Rn A Rn CY AADDCA direct A direct CY AADDCA Ri A Ri CY AADDCA data A data CY A用途 将A中的值和其后面的值以及进位位C中的值相加 最终结果存在A 常用于多字节数运算中 说明 由于51单片机是一种8位机 所以只能做8位的数学运算 但8位运算的范围只有0 255 这在实际工作中是不够的 因此就要进行扩展 一般是将2个8位 两字节 的数学运算合起来 成为一个16位的运算 这样 可以表达的数的范围就可以达到0 65535 2020 4 21 27 例 先做67H A0H 107H 而107H显然超过了0FFH 因此最终保存在A中的是07H 而1则到了PSW中的CY位了 换言之 CY就相当于是100H 然后再做10H 30H CY 结果是41H 所以最终的结果是4107H 1067H 30A0H 0001000001100111 0011000010100000 0100000100000111 1067H 30A0H 4107H 2020 4 21 28 设 1067H存在R1R0中 30A0H存在R3R2中 计算R1R0 R3R2 结果存在R5R4中 MOVA R0ADDA R2 R0 R2 A和CYMOVR4 AMOVA R1ADDCA R3 R1 R3 CY A和CYMOVR5 A 2020 4 21 29 又例 先做67H 20H 87H 没有超过0FFH 因此最终保存在A中的是87H 而PSW中的CY 0 然后再做10H 30H CY 结果是40H 所以最终的结果是4087H 1067H 3020H 2020 4 21 30 DAA在进行BCD码加法运算时 跟在ADD和ADDC指令之后 用于对累加器A中刚进行的两个BCD码的加法的结果进行十进制调整 例 A 00010101BCD 代表十进制数15 ADDA 8 3 十进制调整指令 1条 A 1DH 按二进制规律加 A 23H 按十进制规律加 DAA 2020 4 21 31 调整要完成的任务是 1 当累加器A中的低4位数出现了非BCD码 1010 1111 或低4位产生进位 AC 1 则应在低4位加6调整 以产生低4位正确的BCD结果 2 当累加器A中的高4位数出现了非BCD码 1010 1111 或高4位产生进位 CY 1 则应在高4位加6调整 以产生高4位正确的BCD结果 十进制调整指令执行后 PSW中的CY表示结果的百位值 2020 4 21 32 例若 A 01010110B 表示的BCD码为56 R3 01100111B 表示的BCD码为67 CY 0 执行以下指令 ADDA R2DAA由于 A 00100011B 即 且 CY 1 即 结果为BCD数123 应该注意 DA指令不能对减法进行十进制调整 2020 4 21 33 4 3 2 2减法指令 SUBBA Rn A Rn CY ASUBBA direct A direct CY ASUBBA Ri A Ri CY ASUBBA data A data CY A将A中的值减去源操作数所指内容以及进位位C中的值 最终结果存在A中 如 SUBBA R2设 A C9H R2 55H CY 1 执行指令之后 A中的值为73H 1 带借位的减法指令 4条 说明 没有不带借位的减法指令 如果需要做不带位的减法指令 在做第一次相减时 只要将CY清零即可 对带符号数 要注意OV标志 OV 1 出错 2020 4 21 34 4 3 3逻辑运算类指令 24条 主要用于对2个操作数按位进行逻辑操作 结果送到A或直接寻址单元 主要操作 与 或 异或 移位 取反 清零等 对标志位的影响 除了目的操作数为ACC的指令影响奇偶标志P外 一般不影响标志位 LogicOperations 2020 4 21 35 4 3 3 1逻辑或指令 6条 ORLA Rn A Rn AORLA direct A direct AORLA Ri A Ri AORLA data A data AORLdirect A direct A direct ORLdirect data direct data direct 例 71H和56H相或 01110001 71H 01010110 56H 01110111即77H 后两条指令 若直接地址为I O端口 则为 读 改写 操作 ORLogicInstruction 2020 4 21 36 4 3 3 2逻辑与指令 6条 ANLA Rn A Rn AANLA direct A direct AANLA Ri A Ri AANLA data A data AANLdirect A direct A direct ANLdirect data direct data direct 后两条指令若直接地址为I O端口 则为 读 改写 操作 ANDLogicInstruction 2020 4 21 37 4 3 3 3逻辑异或指令 6条 XRLA Rn A Rn AXRLA direct A direct AXRLA Ri A Ri AXRLA data A data AXRLdirect A direct A direct XRLdirect data direct data direct 后两条指令 若直接地址为I O端口 则为 读 改写 操作 eXclusive oRLogicInstruction 2020 4 21 38 4 3 3 4清0与取反指令 2条 取反 CPLA A A例 若A 5CH 执行CPLA结果 A A3H 清0 CLRA 0 A ClearAndComPlementLogicOperation 2020 4 21 39 4 3 3 5循环移位指令 4条 RLARRARLCARRCA 后两条指令 影响P标志和CY RotateLogicinstruction 2020 4 21 40 例 若A 5CH CY 1 执行RLCA后 对RLC RRC指令 在CY 0时RLC相当于乘以2RRC相当于除以2 结果 A B9H CY 0 P 1 2020 4 21 41 4 3 4控制转移类指令 17条 BranchingInstruction 共有控制程序转移类指令 不包括位操作类的转移指令 此类指令一般不影响PSW 包括以下类型 无条件转移和条件转移相对转移和绝对转移长转移和短转移调用与返回指令 2020 4 21 42 4 3 4 1无条件转移类指令 4条 短转移类指令 AJMPaddr11长转移类指令 LJMPaddr16相对转移指令 SJMPrel间接转移指令 JMP A DPTR 1 上面的前三条指令 统统理解成 PC值改变 即跳转到一个标号处 那么他们的区别何在呢 2020 4 21 43 跳转的范围不同 短转移类指令 AJMPaddr11长转移类指令 LJMPaddr16相对转移指令 SJMPrel 转移范围 2KB64KB 128 127 指令构成不同 AJMP LJMP后跟的是绝对地址 而SJMP后跟的是相对地址 指令长度不同原则上 所有用SJMP或AJMP的地方都可以用LJMP来替代 2020 4 21 44 间接转移指令 JMP A DPTR 这条指令的用途也是跳转 转到什么地方去呢 这可不能由标号简单地决定了 转移地址由A DPTR形成 并直接送入PC 指令对A DPTR和标志位均无影响 本指令可代替众多的判别跳转指令 又称为散转指令 多用于多分支程序结构中 2 第四条指令与前三条指令相比有所不同 2020 4 21 45 4 3 4 2条件转移指令 8条 条件转移指令是指在满足一定条件时进行相对转移 否则程序继续执行本指令的下一条指令 一 判A内容是否为0转移指令 2条 JZrel 如果A 0 则转移 否则顺序执行 JNZrel 如果A 0 就转移 转移到相对于当前PC值的8位移量的地址去 即 新的PC值 当前PC 偏移量rel我们在编写汇编语言源程序时 可以直接写成 JZ标号 即转移到标号处 2020 4 21 46 MOVA R0JZL1MOVR1 00HAJMPL2L1 MOVR1 0FFHL2 SJMPL2END在执行上面这段程序前 如果R0 0 结果R1 0FFH 而如果R0 0 则结果是R1 00H 把上面的那个例子中的JZ改成JNZ 看看程序执行的结果是什么 如果R0 0 结果R1 00H 如果R0 0 结果是R1中的值为0FFH 2020 4 21 47 二 比较不等转移指令 4条 CJNEA data relCJNEA direct relCJNERn data relCJNE Ri data rel此类指令的功能是将两个操作数比较 如果两者相等 就顺序执行 如果不相等 就转移 同样地 使用时 我们可以将rel理解成标号 即 CJNEA data 标号CJNEA direct 标号CJNERn data 标号CJNE Ri data 标号 2020 4 21 48 利用这些指令 可以判断两数是否相等 但有时还想得知两数比较之后哪个大 哪个小 本条指令也具有这样的功能 如果两数不相等 则CPU还会用CY 进位位 来反映哪个数大 哪个数小 如果前面的数大 则CY 0 否则CY 1 因此在程序转移后再次利用CY就可判断出哪个数大 哪个数小了 2020 4 21 49 举例 MOVA R0CJNEA 10H L1MOVR1 0 如R0 10H 则不转移R1 00H AJMPL3L1 JCL2 如CY 1即R010H 则转移AJMPL3L2 MOVR1 0FFHL3 SJMPL3因此最终结果是 本程序执行前 如果R0 10H 则R1 00H 如果R0 10H 则R1 0AAH 如果R0 10H 则R1 0FFH 2020 4 21 50 三 减1不为0转移指令 2条 DJNZRn relDJNZdirect relDJNZ指令的执行过程是这样的 它将第一个参数中的值减1 然后看这个值是否等于0 如果等于0 就往下执行 如果不等于0 就转移到第二个参数所指定的地方去 例 DJNZ10H LOOP LOOP 2020 4 21 51 例 MOV23H 0AHCLRALOOP ADDA 23HDJNZ23H LOOPSJMP 上述程序段的执行过程是 将23H单元中的数连续相加 存至A中 每加一次 23H单元中的数值减1 直至减到0 共加 23H 次 2020 4 21 52 4 3 4 3调用与返回指令 4条 一 调用指令 2条 LCALLaddr16 长调用指令 3字节 ACALLaddr11 短调用指令 2字节 上面两条指令都是在主程序中调用子程序 两者的区别 对短调用指令 被调用子程序入口地址必须与调用指令的下一条指令的第一字节在相同的2KB存储区之内 使用时可以用 LCALL标号 标号表示子程序首地址ACALL标号来调用子程序 指令的执行过程是 当前PC压栈 子程序首地址送PC 实现转移 2020 4 21 53 二 返回指令 2条 子程序执行完后必须回到主程序 如何返回呢 只要执行一条返回指令就可以了 RET 子程序返回指令RETI 中断子程序返回指令两者不能互换使用 RET指令的执行过程是 堆栈栈顶内容 2字节 调用时保存的当前PC值 弹出给PC 实现返回 RETI指令除了具有RET指令的功能实现程序返回外 还有对中断优先级状态触发器的清零 2020 4 21 54 4 3 4 4空操作指令 1条 NOP 空操作 就是什么事也不干 停一个周期 一般用作短时间的延时 2020 4 21 55 4 3 5位操作指令 17条 BooleanOperations MCS 51单片机的硬件结构中 有一个位处理器 又称布尔处理器 它有一套位变量处理的指令集 包括位变量传送 逻辑运算 控制程序转移等 2020 4 21 56 在MCS 51中 有一部份RAM和一部份SFR是具有位寻址功能的 位操作区 内部RAM的20H 2FH这16个字节单元 即128
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人才公寓租赁协议范本
- 10-款经典鸡尾酒的调制方法
- 2026年上海理工大学单招职业倾向性考试题库附答案
- 2026年温州职业技术学院单招职业适应性考试必刷测试卷附答案
- 2026年河北青年管理干部学院单招职业适应性测试题库新版
- 2026年洛阳职业技术学院单招职业适应性测试题库附答案
- 2026年陕西艺术职业学院单招职业倾向性考试题库必考题
- 2026年贵州交通职业技术学院单招职业倾向性考试题库必考题
- 2026年苏州工业园区职业技术学院单招职业技能考试题库及答案1套
- 2026年开封职业学院单招综合素质考试必刷测试卷必考题
- 2025山东泰山财产保险股份有限公司总公司及分支机构校园招聘、社会招聘笔试模拟试题及答案解析
- 剪纸社团教学课件
- 2025至2030中国DNA提取试剂盒行业项目调研及市场前景预测评估报告
- 半导体销售基础知识培训课件
- 化学武器及其防护课件
- 女性成长培训课件
- 2025年交通运输工程考试试题及答案
- 前列腺增生的护理查房
- 检验科授权书
- 肾病综合征护理中医查房
- 科教融合下的Web应用开发技术AI辅助教学实践
评论
0/150
提交评论