AVR的指令与汇编器系统及宏指令

发布者:BlissfulWhisper最新更新时间:2019-11-15 来源: 51hei关键字:AVR  指令  汇编器系统  宏指令 手机看文章 扫描二维码
随时随地手机看文章

AVR单片机指令系统是RISC结构的精简指令集,CISC结构存在指令系统不等长,指令数多,CPU利用效率低,执行速度慢等缺陷。


ATmega16共有131条指令,按功能可分为五大类,它们是:

A.算术和逻辑运算指令(28 条); 
B.比较和跳转指令(36 条); 
C.数据传送指令(35 条); 
D.位操作和位测试指令(28 条); 
E.MCU控制指令(4 条)。


AVR一条指令的长度大多数为16位,还有少部分为32位。

AVR的指令的一般格式为:

 

操作码用于指示CPU执行何种操作,是加法还是减法,是数据传送还是数据移位。

一条指令可以只有操作码,或第一操作数。


AVR的汇编语句的格式:

(1) [标号:] 伪指令 [操作数] [;注释] 
(2) [标号:] 指令    [操作数] [;注释]

1.AVR指令的寻址方式和寻址空间

指令的一个重要组成部分是操作数。指令给出参与运算数据的方式称为寻址方式。CPU执行指令时,首先要根据地址获取参加操作的操作数,然后才能对操作数进行操作,操作的结果还要根据地址保存在相应的储存器或寄存器中。


下面介绍部分AVR的部分指令及寻址方式:

(1)单寄存器寻址 例:INC Rd ;操作:Rd←Rd+1

INC R5 ;将寄存器R5内容加1回放。

(2)双寄存器寻址 例:ADD Rd, Rr ;操作:Rd←Rd+Rr

ADD R0, R1 ;将R0和R1寄存器内容相加,结果回放R0。

(3)I/O寄存器直接寻址 例:IN Rd, P ;操作:Rd←P。

IN R5, $3E ;读 I/O 空间地址为$3E寄存器(SPH)的内容,放入寄存器R5。

(4)数据存储器空间直接寻址 例:LDS Rd, K ;操作:Rd←(K)

LDS R18, $100 ;读地址为$100的SRAM中内容,传送到R18中。

(5)数据存储器空间的寄存器间接寻址 例:LD Rd, Y ;操作:Rd←(Y),把以Y为指针的SRAM的内容送Rd。

LD R16, Y ;设Y=$0567,即把SRAM地址为$0567的内容传送到R16中。

(6)程序存储器空间取常量寻址

例:LPM            ;操作:R0←(Z),即把以Z为指针的程序存储器的内容送R0。 
若 Z=$0100,即把地址为$0080的程序存储器的低字节内容送R0。 
若 Z=$0101,即把地址为$0080的程序存储器的高字节内容送R0。 
例:LPM R16, Z ;操作:R16←(Z),即把以Z为指针的程序存储器的内容送R16。 
若 Z=$0100,即把地址为$0080 的程序存储器的低字节内容送R16。 
若 Z=$0101,即把地址为$0080 的程序存储器的高字节内容送R16。

(7)程序存储器空间写数据寻址

例:SPM ;操作:(Z)←R1:R0,把 R1:R0 内容写入以 Z 为指针的程序存储器单元。

(8)程序存储器空间直接寻址

例:JMP $0100   ;操作:PC←$0100。程序计数器 PC 的值设置为$0100,接下来执行程序存储器$0100 单元的指令代码。 
例:CALL $0100 ;操作:STACK←PC+2; SP← SP-2; PC←$0100。先将程序计数器 PC 的当前值加 2 后压进堆栈(CALL 指令为 2 个字长),堆栈指针计数器 SP 内容减 2,然后 PC 的值为$0100,接下来执行程序存储器$0100 单元的指令代码。

(9)程序存储器空间相对寻址

例:RJMP $0100    ;操作:PC←PC+1+$0100。若当前指令地址为$0200(PC=$0200),即把$0301 送程序计数器 PC,接下来执行程序存储器$0301 单元的指令代码。 
例:RCALL $0100  ;操作:STACK←PC+1;SP←SP-2;PC←PC+1+$0100。若当前指令地址为$0200(PC=$0200),先将程序计数器 PC 的当前值加 1 后压进堆栈,堆栈指针计数器SP 内容减 2,然后 PC 的值为$0301,接下来执行程序存储器$0301 单元的指令代码。

(10)数据存储器空间堆栈寄存器 SP 间接寻址

例:PUSH R0 ;操作:STACK←R0;SP←SP-1。若当前 SP=$10FF,先把寄存器 R0 的内容送到 SRAM 的$10FF 单元,再将 SP 内容减 1,即 SP=$10FE。 
例:POP R1   ;操作:SP←SP+1;R1←STACK。若当前 SP=$10FE,先将 SP 内容加 1,再把 SRAM 的$10FF 单元内容送到寄存器 R1,此时 SP=$10FF。 
此外,在 CPU 响应中断和执行 CALL 一类的子程序调用指令(SP = SP-2),以及执行中断返回 IRET 和子程序返回 RET 一类的子程序返回指令中(SP = SP+2),都隐含着使用堆栈寄存器 SP 间接寻址的方式。


2.AVR汇编器伪指令

在汇编语言程序中可以使用一些伪指令。伪指令不属于 CPU 指令集,编译时并不产生实际的目标机器操作代码,只是用于在汇编程序中对地址、寄存器、数据、常量等进行定义说明,以及对编译过程进行某种控制等。AVR 的指令系统不包括伪指令,伪指令通常由汇编编译系统给出。

伪指令一般以 . 开头,如:

.DSEG ;RAM 数据段(SRAM) var1: .BYTE 1 ;保留 1 个字节的存储单元,用 var1 标识 table: .BYTE tab_size;保留 tab_size 个字节的存储空间 .CSEG ;代码段开始(Flash)   ldi r30, low(var1) ;将保留存储单元 var1 起始地址的低 8 位装入 Z   ldi r31, high(var1) ;将保留存储单元 var1 起始地址的高 8 位装入 Z   ld r1, Z ;将保留存储单元的内容读到寄存器 R1

关键字:AVR  指令  汇编器系统  宏指令 引用地址:AVR的指令与汇编器系统及宏指令

上一篇:avr单片机汇编参考程序
下一篇:avr单片机的内部结构

推荐阅读最新更新时间:2024-11-07 18:15

avr频率占空比可调波形输出子函数
#ifndef _KPWM_H_ #define _KPWM_H_ /*************avr频率占空比可调波形输出子函数**************/ ///形参:Fclk赋值设定频率(单位为k) 范围: 1K 到 256K /// rat设定占空比(单位为百分比)eg:40 则输出方波占空比为百分之四十 //频率误差小于2%,占空比误差小于5% //PWM频率计算公式为f=fox/N(1+TOP) fox为晶振频率 N为分频系数 TOP为计数计数最大值 //TOP的反算公式为TOP=FOX/NFclk-1 //在15模式下计数最大值为OCR1A //比较值放在OCR1B //15模式下时钟1到达OCR1B时OC1B
[单片机]
学习AVR(六)CPU中状态寄存器
状态寄存器包含最近执行的算术运算的结果的有关信息。这些信息可以用来实现条件运算,以改变程序流向。注意,状态寄存器在所有的ALU运算结束后才被刷新。在许多情况下,这将取代专用的比较指令,可以使得代码更快、更紧凑。 当进入中断程序时,状态寄存器不会自动储存;从中断程序中返回时,它也不会恢复到原值。这必须由软件来处理。 SREG 位 7 6 5 4 3 2 1 0 读/写 I T H S V N Z C 初始值 0 0 0 0 0 0 0 0 位7-I:全局中断使能 要想使能中断,必须
[单片机]
基于AVR Studio5.1的工程项目文件创建
打开软件后,找到New Project (单击左键) 出现下面对话框 按照按图中的标记进行选择,名称和路径自己更改,设置完成后点确定。进入单片机选型对话框,从中找到自己所用的单片机型号 单击OK 这样就完成了一个简单工程的创建。 如图所示在AVR_IIC.c 源文件中就可以编写自己的代码了。 当你打开刚才所指定的路径时会有以下文件: 当我们的工程比较大时,通常要进行模块化编程,这样会有多个源文件和头文件,如果这些文件都堆在上面的文件下,整个工程就会很乱。 以下是一种简单的项目模块化的创建方法: 当我们按照上面的方法创建完工程时 解决方案管理器 有以下文件,我们把刚才创建工程后所自带创建的.c文件删除,
[单片机]
基于<font color='red'>AVR</font> Studio5.1的工程项目文件创建
AVR,C51和PIC八位单片机性能比较
1. 51系列   应用最广泛的八位单片机首推Intel的51系列,由于产品硬件结构合理,指令系统规范,加之生产历史 悠久 ,有先入为主的优势。世界有许多著名的芯片公司都购买了51芯片的核心专利技术,并在其基础上进行性能上的扩充,使得芯片得到进一步的完善,形成了一个庞大的体系,直到现在仍在不断翻新,把单片机世界炒得沸沸扬扬。有人推测,51芯片可能最终形成事实上的标准MCU芯片。   51系列优点之一是它从内部的硬件到软件有一套完整的按位操作系统,称作位处理器,或布尔处理器。它的处理对象不是字或字节而是位。它不光能对片内某些特殊功能寄存器的某位进行处理,如传送、置位、清零、测试等,还能进行位的逻辑运算,其功能十分完备,使用起来得心应
[单片机]
AVR单片机密码锁程序
这是一款用AVR单片机实现的密码锁,它分别由硬件16个矩阵键盘、数码管以及蜂鸣器组成的。系统正确的初始密码为0、1、2、3。当我们按下按键次数在4次以内,系统才判断密码对与否,当输入密码正确时,蜂鸣器报响起,即表示密码是正确的,当我们按下按键的次数超过4次,即使按下的密码正确,蜂鸣器也不响,还有按下密码顺序必须是0、1、2、3,如果按下0、2、1、3或者是其它的,都不能正常开蜂鸣器。如果按键次数超过4次了,密码就无法正常输入了,此时只要按下第16个按键时,就可以回到初始状态,即清除我们以前按键按下的次数,(因为密码输入时必须在4次以内完成的,超过了4次你怎么输,也进入密码判断模式)此时就可以重新输入正确的密码了。另外当按下按键时,
[单片机]
ARM指令条件码
当处理器工作在ARM状态时,几乎所有的指令均根据CPSR中条件码的状态和指令的条件域有条件的执行。当指令的执行条件满足时,指令被执行,否则指令被忽略。每一条ARM指令包含4位的条件码,位于指令的最高4位 。条件码共有16种,每种条件码可用两个字符表示,这两个字符可以添加在指令助记符的后面和指令同时使用。例如,跳转指令B可以加上后缀EQ变为BEQ表示“相等则跳转”,即当CPSR中的Z标志置位时发生跳转。在16种条件标志码中,只有15种可以使用,如表所示,第16种(1111)为系统保留,暂时不能使用。 指令的条件码 条件码 助记符后缀 标 志 含 义 0000 EQ Z置位 相等 0001 NE
[单片机]
专用IC解密技术AVR应用技巧
AVR与传统类型的单片机相比,在IC芯片解密技术中除了必须能实现原来的一些基本的功能,其在结构体系、功能部件、性能和可靠性等多方面有很大的提高和改善。   但使用更好的器件只是为设计实现一个好的系统创造了一个好的基础和可能性,如果还采用和沿袭以前传统的硬件和软件设计思想和方法的话,是不能用好AVR的,甚至也不能真正的了解AVR的特点和长处。   功能越好的器件,需要具备更高技术和能力的人来使用和驾驭它。IC芯片解密就象一部好的F1赛车,只有具备高超技术的驾驶员才能充分体会到车的特点,并能最大限度的发挥出车的性能。   AVR具有上手入门快,开发方便简单的特点,但要充分体会和发挥AVR的优点,还需要应用工程师本身的硬软件设计开发能力
[工业控制]
AVR单片机上电复位不可靠问题的解决
推荐昨晚在调试AVR 单片机时又有一些心得体会,虽然结论是一个很小的问题造成的,但在此还是写出来给大家参考,避免走弯路。 事件描述: 以前用AVR的芯片也做过好几个设计,从来没有怀疑过ATMEL的芯片的稳定性,以前的几个方案都是很稳定的,当然这跟PCB的设计有很大的关系,如果大家需要PCB相关参考资料的话可以到本站的PCB技术专栏里查找,那里有很多前辈的PCB布板心得。 这次用的ATmega48制作的串口电压表就出现一个很奇怪的现象,电路板是用万能板焊接的,程序里用到ADC功能和串口通讯功能,用的AVR下载工具是STK500,每次下载程序后芯片总是不能正常复位工作,还要读取下芯片的特征字或熔丝位让芯片重新复位下才能工作,这时
[单片机]
<font color='red'>AVR</font>单片机上电复位不可靠问题的解决
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved