嵌入式系统入门-03-AVR的指令与汇编系统

上传人:自*** 文档编号:53122976 上传时间:2018-08-28 格式:PPT 页数:154 大小:1.94MB
返回 下载 相关 举报
嵌入式系统入门-03-AVR的指令与汇编系统_第1页
第1页 / 共154页
嵌入式系统入门-03-AVR的指令与汇编系统_第2页
第2页 / 共154页
嵌入式系统入门-03-AVR的指令与汇编系统_第3页
第3页 / 共154页
嵌入式系统入门-03-AVR的指令与汇编系统_第4页
第4页 / 共154页
嵌入式系统入门-03-AVR的指令与汇编系统_第5页
第5页 / 共154页
点击查看更多>>
资源描述

《嵌入式系统入门-03-AVR的指令与汇编系统》由会员分享,可在线阅读,更多相关《嵌入式系统入门-03-AVR的指令与汇编系统(154页珍藏版)》请在金锄头文库上搜索。

1、,LOGO,嵌入式系统入门,第3章 AVR的指令与汇编系统,信息学院 张忠杰 TermyZ,嵌入式系统入门,http:/ ATmega16指令综述 3.2 算术和逻辑指令 3.3 跳转指令 3.4 数据传送指令 3.5 位操作和位测试指令 3.6 MCU控制指令 3.7 AVR汇编语言系统,嵌入式系统入门,3,AVR内核指令系统的特点,116/32位定长指令 AVR的一个指令字为16位或32位,其中大部分的指令为16位。 2流水线操作 AVR采用流水线技术,在前一条指令执行的时候,就取出现行的指令,然后以一个周期执行指令。 3. 大型快速存取寄存器组 用32个通用工作寄存器代替了累加器,避免

2、了传统结构中累加器和存储器之间数据传送造成的瓶颈现象。,3.1 ATmega16指令综述,ATmega16共有131条指令,按功能可分为五大类,它们是: 算术和逻辑运算指令(28条); 比较和跳转指令(36条); 数据传送指令(35条); 位操作和位测试指令(28条); MCU控制指令(4条)。,3.1.1 指令格式以及三种表示方式,指令格式是指指令码的结构形式。通常,指令可分为操作码和操作数两部分。 AVR的指令的一般格式为:,3.1.1 指令格式以及三种表示方式,指令的表示方式是指采用何种形式描述指令,也是人们用于编写和阅读程序的基础。通常指令采用二进制、十六进制和助记符三种表示方式。 指

3、令的二进制表示形式,是一种可以直接为CPU识别和执行的形式,故称为指令的机器码或汇编语言的目标代码。 指令的十六进制形式是二进制形式的变型,只是将二进制代码4位一组用十六进制的形式描述。,3.1.1 指令格式以及三种表示方式,指令的助记符形式又称为指令的汇编形式或汇编语句,是一种用英文单词或缩写字母以及数字来表征指令功能的形式。这种形式不仅容易为人们识别和读写,也方便记忆和交流。 由于CPU可以直接识别和执行的指令实际是二进制数据,因此不管使用十六进制的形式还是汇编形式构成的程序,都需要通过人工或机器把它们翻译成二进制机器码的数据,才能下载到芯片中被CPU执行。,3.1.2 AVR指令系统中使

4、用的符号,在指令描述中,除了操作码采用了助记符表示外,还在指令的操作数的描述说明中采用了一些符号代码,后面对所使用符号的意义进行简单的说明。,1状态寄存器与标志位,SREG: 8位状态寄存器,其中每一位的定义为: C: 进位标志位 Z: 结果为零标志位 N: 结果为负数标志位 V: 2的补码溢出标志位 S: NV,用于符号测试的标志位 H: 操作中产生半进位的标志位 T: 用于和BLD、BST指令进行位数据交换的位 I: 全局中断触发/禁止标志位,2寄存器和操作码,Rd: 目的(或源)寄存器,取值为R0R31或R16R31(取决于指令)。 Rr: 源寄存器,取值为R0R31。 A: I/O寄存

5、器,取值为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.3 AVR指令的寻址方式和寻址空间,指令给出参与运算数据的方式称为寻址方式。 AVR单片机指令操作数的寻址方式有以下几种:,单寄存器直接寻址 双寄存器直接寻址 I/O寄存

6、器直接寻址 数据存储器直接寻址 数据存储器间接寻址 带后增量的数据存储器间接寻址 带预减量的数据存储器间接寻址 带位移的数据存储器间接寻址 程序存储器取常量寻址 程序存储器空间直接寻址 程序存储器空间间接寻址 程序相对寻址等,1单寄存器直接寻址,由指令指定一个寄存器的内容作为操作数,在指令中给出寄存器的直接地址,这种寻址方式称为单寄存器直接寻址。 单寄存器寻址的地址范围限制为通用工作寄存器组中的32个寄存器R0R31,或后16个寄存器R16R31(取决于不同指令)。 例:INC Rd;操作:RdRd+1。 INC R5;将寄存器R5内容加1回放。,2双寄存器直接寻址,双寄存器直接寻址方式与单寄

7、存器直接寻址方式相似,它是将指令指出的两个寄存器Rd和Rr的内容作为操作数,而结果存放在Rd寄存器中。指令中同时给出两个寄存器的直接地址,这种寻址方式称为双寄存器直接寻址。 双寄存器寻址的地址范围限制为通用工作寄存器组中的32个寄存器R0R31,或后16个寄存器R16R31,或后8个寄存器R16R23(取决于不同指令)。 例:ADD Rd,Rr;操作:RdRd+Rr。 ADD R0,R1;将R0和R1寄存器内容相加,结果放回R0。,3I/O寄存器直接寻址,由指令指定一个I/O寄存器的内容作为操作数。在指令中直接给出I/O寄存器的地址,这种寻址方式称为I/O寄存器直接寻址。 I/O寄存器直接寻址

8、的地址使用I/O寄存器空间的地址$00$3F,共64个,取值为063或031(取决于指令)。 例:IN Rd,P;操作:RdP。 IN R5,$3E;读I/O空间地址为$3E寄存器(SPH)的内容,放入寄存器R5。,4数据存储器空间直接寻址,数据存储器空间直接寻址方式用于直接CPU从SRAM存储器中存取数据。 数据存储器空间直接寻址为双字指令,在指令的低字中指出一个16位的SRAM地址。 例:LDS Rd,K;操作:Rd(K)。 LDS R18,$100;读地址为$100的SRAM中内容,传送到R18中。,5数据存储器空间的寄存器间接寻址,由指令指定某一个16位寄存器的内容作为操作数在SRAM

9、中的地址,该寻址方式称为数据存储器空间的寄存器间接寻址。 AVR单片机中使用16位寄存器X、Y或Z作为规定的地址指针寄存器,因此操作数的SRAM地址在间址寄存器X、Y或Z中。 例:LD Rd,Y;操作:Rd (Y),把以Y为指针的SRAM的内容送Rd。 LD R16,Y;设Y=$0567,即把SRAM地址为$0567的内容传送到R16中。,6带后增量的数据存储器空间的寄存器间接寻址,这种寻址方式类似于数据存储器空间的寄存器间接寻址方式,间址寄存器X、Y、Z中的内容仍为操作数在SRAM空间的地址,但指令在间接寻址操作后,再自动把间址寄存器中的内容加1。 这种寻址方式特别适用于访问矩阵、查表等应用

10、。 例:LD Rd,Y+;操作:Rd(Y),Y=Y+1,先把以Y为指针的SRAM的内容送Rd,再把Y增1。 LD R16,Y+;设原Y=$0567,指令把SRAM地址为$0567的内容传送到R16中,再将Y的值加1,操作完成后Y=$0568。,7带预减量的数据存储器空间寄存器间接寻址,这种寻址方式类似于数据存储器空间的寄存器间接寻址方式,间址寄存器X、Y、Z中的内容仍为操作数在SRAM空间的地址,但指令在间接寻址操作之前,先自动将间址寄存器中的内容减1,然后把减1后的内容作为操作数在SRAM空间的地址。 这种寻址方式也特别适用于访问矩阵、查表等应用。 例:LD Rd,-Y;操作:Y=Y-1,R

11、d(Y),先把Y减1,再把以Y为指针的SRAM的内容送Rd。 LD R16,-Y;设原Y=$0567,指令即先把Y减1,Y=$0566,再把SRAM地址为$0566的内容传送到R16中。,8带位移的数据存储器空间寄存器间接寻址,带位移的数据存储器空间寄存器间接寻址方式是:由间址寄存器(Y或Z)中的内容和指令字中给出的地址偏移量共同决定操作数在SRAM空间的地址,偏移量的范围为063。 例:LDD Rd,Y+q;操作:Rd(Y+q),其中0q63,即把以Y+q为地址的SRAM的内容送Rd,而Y寄存器的内容不变。 LDD R16,Y+31;设Y=$0567,把SRAM地址为$0598的内容传送到R

12、16中,Y寄存器的内容不变。,9程序存储器空间取常量寻址,程序存储器空间取常量寻址主要从程序存储器Flash中读取常量,此种寻址方式只用于指令LPM。 程序存储器中常量字节的地址由地址寄存器Z的内容确定。 Z寄存器的高15位用于选择字地址(程序存储器的存储单元为字),而Z寄存器的最低位Z(d0)用于确定字地址的高/低字节。若d0=0,则选择字的低字节;d0=1,则选择字的高字节。,9程序存储器空间取常量寻址,例:LPM R0,Z;操作:R0 (Z),即把以Z为指针的程序存储器的内容送R0。 若Z=$0100,即把地址为$0080的程序存储器的低字节内容送R0。 若Z=$0101,即把地址为$0

13、080的程序存储器的高字节内容送R0。 例:LPM R16,Z;操作:R16(Z),即把以Z为指针的程序存储器的内容送R16。 若Z=$0100,即把地址为$0080的程序存储器的低字节内容送R16。 若Z=$0101,即把地址为$0080的程序存储器的高字节内容送R16。,10带后增量的程序存储器空间取常量寻址,带后增量的程序存储器空间取常量寻址主要从程序存储器Flash中取常量,此种寻址方式只用于指令LPM Rd,Z+。 程序存储器中常量字节的地址由地址寄存器Z的内容确定。,10带后增量的程序存储器空间取常量寻址,例:LPM R16,Z+;操作:R16(Z);ZZ+1,即把以Z为指针的程序

14、存储器的内容送R16,然后Z的内容加1。 若Z=$0100,即把地址为$0080的程序存储器的低字节内容送R16,完成后Z=$0101。 若Z=$0101,即把地址为$0080的程序存储器的高字节内容送R16,完成后Z=$0102。,11程序存储器空间写数据寻址,程序存储器空间写数据寻址主要用于可进行在系统自编程的AVR单片机,此种寻址方式只用于指令SPM。该指令将寄存器R1和R0中的内容组成一个字R1:R0,然后写入由Z寄存器的内容作为地址(Z寄存器的最低位必须为0)的程序存储器单元中。 例:SPM;操作:(Z)R1:R0,把R1:R0内容写入以Z为指针的程序存储器单元。,12程序存储器空间

15、直接寻址,程序存储器空间直接寻址方式用于程序的无条件跳转指令JMP、CALL。 指令中含有一个16位的操作数,指令将操作数存入程序计数器PC中,作为下一条要执行指令在程序存储器空间的地址。 JMP类指令和CALL类指令的寻址方式相同,但CALL类的指令还包括了返回地址的压进堆栈和堆栈指针寄存器SP内容减2的操作。,12程序存储器空间直接寻址,例:JMP $0100;操作:PC$0100。 程序计数器PC的值设置为$0100,接下来执行程序存储器$0100单元的指令代码。 例:CALL $0100;操作:STACKPC+2;SPSP-2;PC$0100。 先将程序计数器PC的当前值加2后压进堆栈

16、(CALL指令为2个字长),堆栈指针计数器SP内容减2,然后PC的值为$0100,接下来执行程序存储器$0100单元的指令代码。,13程序存储器空间Z寄存器间接寻址,程序存储器空间间接寻址方式是使用Z寄存器存放下一步要执行指令代码程序地址,程序转到Z寄存器内容所指定程序存储器的地址处继续执行,即用寄存器Z的内容代替PC的值。此寻址方式用于IJMP、ICALL指令。,13程序存储器空间Z寄存器间接寻址,例:IJMP;操作:PCZ, 即把Z的内容送程序计数器PC。若Z=$0100,即把$0100送程序计数器PC,接下来执行程序存储器$0100单元的指令代码。 例:ICALL;操作:STACKPC+1;SPSP-2;PCZ。 若Z=$0100,先将程序计数器PC的当前值加1后压进堆栈,堆栈指针计数器SP内容减2,然后PC的值为$0100,接下来执行程序存储器$0100单元的指令代码。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号