资源预览内容
第1页 / 共40页
第2页 / 共40页
第3页 / 共40页
第4页 / 共40页
第5页 / 共40页
第6页 / 共40页
第7页 / 共40页
第8页 / 共40页
第9页 / 共40页
第10页 / 共40页
亲,该文档总共40页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
基于 AVR 的单片嵌入式系统原理与实践应用华东师范大学 电子科学技术系 马潮3-1第 3 章AVR 的指令与汇编系统第 3 章AVR 的指令与汇编系统传统的 8 位单片机 (如最典型的 8051 结构的单片机) 大都采用复杂指令 CISC(ComplexInstruction Set Computer) 系统体系。由于 CISC 结构存在指令系统不等长,指令数多,CPU 利用效率低,执行速度慢等缺陷,已不能满足和适应设计高档电子产品和嵌入式系统应用的需要。作为 8 位的 AVR 单片机来讲,除了其具备比较完善和功能强大的硬件结构和组成外,其更重要的是它的内核和指令系统为先进的 RISC 体系结构, 采用了大型快速存取寄存器组(32 个通用工作寄存器) 、快速的单周期指令系统以及单级流水线等先进技术。因此,AVR内核核指令系统的显著特点有:1 16/32 位定长指令AVR 的一个指令字为 16 位或 32 位,其中大部分的指令为 16 位。采用定长指令,不仅使取指操作简单,提高了取指令的速度;同时也降低了在取指操作过程中的错误,提高了系统的可靠性。2 流水线操作AVR 采用流水线技术,在前一条指令执行的时候,就取出现行的指令,然后以一个周期执行指令。大大提高了 CPU 的运行速度。3. 大型快速存取寄存器组传统的基于累加器的结构单片机(如 8051) ,需要大量的程序代码来完成和实现在累加器和存储器之间的数据传送。而在 AVR 单片机中,采用 32 个通用工作寄存器构成大型快速存取寄存器组,用 32 个通用工作寄存器代替了累加器(相当有 32 个累加器) ,从而避免了传统结构中累加器和存储器之间数据传送造成的瓶颈现象。由于 AVR 单片机采用 RISC 结构,使得它具有高达 1MIPSMHz 的高速运行处理能力。同时也能更好地适合采用高级语言(例如 C 语言、BASIC 语言)来编写系统程序,高效地开发出目标代码,以加快产品进入市场的时间和简化系统的设计、开发、维护和支持。3.1 ATmega16 指令综述3.1 ATmega16 指令综述指令是 CPU 用于控制各功能部件完成某一指定动作或操作的指示和命令。指令不同,CPU 和各个功能部件完成的动作也不一样,指令的功能也不同。程序员根据系统的要求,选用不同功能指令的有序组合就构成的程序。CPU 执行不同的程序,就能完成不同的任务。CPU 指令的的集合或全体称为指令系统。指令系统是 CPU 的重要性能指标之一,也是学习以及使用单片机的重要内容。由于 CPU 结构的不同,每一种 CPU 的指令和功能也不同,因此学习 AVR,就必须要了解它的指令结构、功能和特点。只有在此基础上,才能更清楚的了解 AVR 的硬件使用,编写出好的系统程序。AVR 单片机指令系统是 RISC 结构的精简指令集,是一种简明、易掌握、效率高的指令系统。ATmega16 单片机完全兼容 AVR 的指令系统,具有高性能的数据处理能力,能对位、Generated by Foxit PDF Creator Foxit Software http:/www.foxitsoftware.com For evaluation only.第 3 章 AVR 的指令与汇编系统半字节、字节和双字节数据进行各种操作,包括算术和逻辑运算、数据传送、布尔处理、控制转移和硬件乘法等操作。ATmega16 共有 131 条指令,按功能可分为五大类,它们是:算术和逻辑运算指令(28 条);比较和跳转指令(36 条);数据传送指令(35 条);位操作和位测试指令(28 条);MCU 控制指令(4 条)。在本章中将对 ATmega16 全部的 131 条指令,包括字节数、功能、对标志位的影响以及执行周期数等进行简单的描述。3.1.1指令格式以及三种表示方式3.1.1指令格式以及三种表示方式指令格式是指指令码的结构形式。通常,指令可分为操作码和操作数两部分。其中操作码部分比较简单,操作数部分则比较复杂,而且随 CPU 类型的不同,寻址方式的不同有较大的变化。AVR 的指令的一般格式为:其中,操作码用于指示 CPU 执行何种操作,是加法操作还是减法操作,是数据传送还是数据移位等。第 1 操作数或操作数地址用于表示参与操作的第 1 个操作数,或该操作数在内存的地址,同时该地址也将作为操作结果存放的地址。第 2 操作数或操作数地址(如果有的话)用于表示参与操作的第 2 个操作数,或该操作数在内存的地址。需要注意的是,在 AVR 的指令中,有相当一部分只有操作码,或只有操作码和第 1 操作数或操作数地址,前者在操作码中隐含了操作数或操作数的地址。指令的表示方式是指采用何种形式描述指令,也是人们用于编写和阅读程序的基础。通常指令采用二进制、十六进制和助记符三种表示方式。指令的二进制表示形式,是一种可以直接为 CPU 识别和执行的形式,故称为指令的机器码或汇编语言的目标代码,下载到 AVR 中的代码必须是可执行的目标代码。但二进制形式的代码具有难读、难写、难记忆和难修改等缺点,因此人们通常不用它来编写程序。指令的十六进制形式是二进制形式的变型,只是将二进制代码 4 位一组用十六进制的形式描述。十六进制的形式虽然比二进制形式读写方便些,但还是不易被人们识别和修改,所以通常也不被用于编写程序,只是在某些场合,如调试环境中的指令字的显示,或调试程序、修改调整个别指令代码时作为输入程序的辅助手段。指令的助记符形式又称为指令的汇编形式或汇编语句,是一种用英文单词或缩写字母以及数字来表征指令功能的形式。这种形式不仅容易为人们识别和读写,也方便记忆和交流,因此也是人们用于进行程序设计的一种常用的形式。由于 CPU 可以直接识别和执行的指令形式必须是二进制表示形式的,因此不管使用十六进制的形式还是汇编形式构成的程序,都需要通过人工或机器把它们翻译成二进制机器码的形式,才能下载到芯片中被 CPU 执行。现在决大多数单片机都提供相应的,能够在 PC 上工作的的开发平台,其最基本的功能就是提供用户编写汇编代码的源程序,并能将汇编源程序翻译成二进制的机器码,生成可操作码第 1 操作数或操作数地址第 2 操作数或操作数地址操作码第 1 操作数或操作数地址第 2 操作数或操作数地址Generated by Foxit PDF Creator Foxit Software http:/www.foxitsoftware.com For evaluation only.基于 AVR 的单片嵌入式系统原理与实践应用华东师范大学 电子科学技术系 马潮3-3下载的目标代码文件。3.1.2AVR 指令系统中使用的符号3.1.2AVR 指令系统中使用的符号在本章所列出 ATmega16 所有的 131 条指令中, 给出了全部指令的汇编助记符、 操作数、操作说明、相应的操作、操作数的范围、对标志位的影响、以及指令的执行周期。在指令描述中,除了操作码采用了助记符表示外,还在指令的操作数的描述说明中采用了一些符号代码,下面对所使用符号的意义进行简单的说明。1状态寄存器与标志位SREG:8 位状态寄存器,其中每一位的定义为:C:进位标志位Z:结果为零标志位N:结果为负数标志位V:2 的补码溢出标志位S:NV,用于符号测试的标志位H:操作中产生半进位的标志位T:用于和 BLD、BST 指令进行位数据交换的位I:全局中断触发/禁止标志位2寄存器和操作码Rd:目的(或源)寄存器,取值为 R0R31 或 R16R31(取决于指令) 。Rr:源寄存器,取值为 R0R31。A:I/O 寄存器,取值为 063 或 031(取决于指令) 。b:I/O 寄存器中的指定位,常数(07) 。s:状态寄存器 SREG 中的指定位,常数(07) 。K:立即数,常数(0255) 。k:地址常数,取值范围取决于指令。q:地址偏移量常数(063) 。X、Y、Z:地址指针寄存器(X=R27:R26;Y=R29:R28;Z=R31:R30) 。3堆栈STACK: 作为返回地址和压栈寄存器的堆栈SP:堆栈 STACK 的指针3.1.3AVR 指令的寻址方式和寻址空间3.1.3AVR 指令的寻址方式和寻址空间指令的一个重要组成部分是操作数。指令给出参与运算数据的方式称为寻址方式。CPU执行指令时,首先要根据地址获取参加操作的操作数,然后才能对操作数进行操作,操作的结果还要根据地址保存在相应的储存器或寄存器中。因此 CPU 执行程序实际上是不断的寻找操作数并进行操作的过程。通常,指令的寻址方式有多种,寻址方式越多,指令的功能也就越强。AVR 单片机指令操作数的寻址方式有以下几种:单寄存器直接寻址、双寄存器直接寻址、I/O 寄存器直接寻址、数据存储器直接寻址、数据存储器间接寻址、带后增量的数据存储器间接寻址、带预减量的数据存储器间接寻址、带位移的数据存储器间接寻址、程序Generated by Foxit PDF Creator Foxit Software http:/www.foxitsoftware.com For evaluation only.第 3 章 AVR 的指令与汇编系统存储器取常量寻址、程序存储器空间直接寻址、程序存储器空间间接寻址、程序相对寻址等。1 单寄存器直接寻址(图 3-1)由指令指定一个寄存器的内容作为操作数,在指令中给出寄存器的直接地址,这种寻址方式称为单寄存器直接寻址。单寄存器寻址的地址范围限制为通用工作寄存器组中的 32个寄存器 R0R31,或后 16 个寄存器 R16R31(取决于不同指令) 。例:INC Rd;操作:RdRd+1。INC R5;将寄存器 R5 内容加 1 回放。图 3-1 单寄存器直接寻址图 3-1 单寄存器直接寻址2 双寄存器直接寻址(图 3-2)图 3-2 双寄存器直接寻址图 3-2 双寄存器直接寻址双寄存器直接寻址方式与单寄存器直接寻址方式相似,它是将指令指出的两个寄存器Rd 和 Rr 的内容作为操作数,而结果存放在 Rd 寄存器中。指令中同时给出两个寄存器的直接地址,这种寻址方式称为双寄存器直接寻址。双寄存器寻址的地址范围限制为通用工作寄存器组中的 32 个寄存器 R0R31, 或后 16 个寄存器 R16R31, 或后 8 个寄存器 R16R23(取决于不同指令) 。例:ADD Rd,Rr;操作:RdRd+Rr。ADD R0,R1;将 R0 和 R1 寄存器内容相加,结果回放 R0。Generated by Foxit PDF Creator Foxit Software http:/www.foxitsoftware.com For evaluation only.基于 AVR 的单片嵌入式系统原理与实践应用华东师范大学 电子科学技术系 马潮3-53I/O 寄存器直接寻址(图 3-3)由指令指定一个 I/O 寄存器的内容作为操作数。 在指令中直接给出 I/O 寄存器的地址,这种寻址方式称为 I/O 寄存器直接寻址。I/O 寄存器直接寻址的地址使用 I/O 寄存器空间的地址$00$3F,共 64 个,取值为 063 或 031(取决于指令) 。例:IN Rd,P;操作:RdP。IN R5,$3E;读 I/O 空间地址为$3E 寄存器(SPH)的内容,放入寄存器 R5。图 3-3 I/O 寄存器直接寻址图 3-3 I/O 寄存器直接寻址4数据存储器空间直接寻址(图 3-4)数据存储器空间直接寻址方式用于直接 CPU 从 SRAM 存储器中存取数据。 数据存储器空间直接寻址为双字指令,在指令的低字中指出一个 16 位的 SRAM 地址。例:LDS Rd,K;操作:Rd(K) 。LDS R18,$100;读地址为$100 的 SRAM 中内容,传送到 R18 中。指令中 16 位 SRAM 的地址字长度限定了 SRAM 的地址空间为 64K 字节, 该地址空间
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号