- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
AVR指令中使用的符号
1、状态寄存器与标志位
SREG: 8位状态寄存器,其中每一位的定义为:
C: 进位标志位
Z: 结果为零标志位
N: 结果为负数标志位
V: 2的补码溢出标志位
S: N⊕V,用于符号测试的标志位
H: 操作中产生半进位的标志位
T: 用于和BLD、BST指令进行位数据交换的位
I: 全局中断触发/禁止标志位
2、寄存器和操作码
Rd: 目的(或源)寄存器,取值为R0~R31或R16~R31(取决于指令)。
Rr: 源寄存器,取值为R0~R31。
A: I/O寄存器,取值为0~63或0~31(取决于指令)。
b: I/O寄存器中的指定位,常数(0~7)。
s: 状态寄存器SREG中的指定位,常数(0~7)。
K: 立即数,常数(0~255)。
k: 地址常数,取值范围取决于指令。
q: 地址偏移量常数(0~63)。
X、Y、Z:地址指针寄存器(X=R27:R26;Y=R29:R28;Z=R31:R30)。
3、堆栈
STACK: 作为返回地址和压栈寄存器的堆栈
SP: 堆栈STACK的指针
AVR指令的寻址方式和寻址空间
1、单寄存器直接寻址
由指令指定一个寄存器的内容作为操作数,在指令中给出寄存器的直接地址,这种寻址方式称为单寄存器直接寻址。单寄存器寻址的地址范围限制为通用工作寄存器组中的32个寄存器R0~R31,或后16个寄存器R16~R31。
例:INC Rd;操作:Rd←Rd+1。
INC R5;将寄存器R5内容加1回放。
2、双寄存器直接寻址
双寄存器直接寻址方式与单寄存器直接寻址方式相似,它是将指令指出的两个寄存器Rd和Rr的内容作为操作数,而结果存放在Rd寄存器中。指令中同时给出两个寄存器的直接地址,这种寻址方式称为双寄存器直接寻址。双寄存器寻址的地址范围限制为通用工作寄存器组中的32个寄存器R0~R31,或后16个寄存器R16~R31,或后8个寄存器R16~R23(取决于不同指令)。
例:ADD Rd,Rr;操作:Rd←Rd+Rr。
ADD R0,R1;将R0和R1寄存器内容相加,结果回放R0。
3、I/O寄存器直接寻址
由指令指定一个I/O寄存器的内容作为操作数。在指令中直接给出I/O寄存器的地址,这种寻址方式称为I/O寄存器直接寻址。I/O寄存器直接寻址的地址使用I/O寄存器空间的地址$00~$3F,共64个,取值为0~63或0~31。
例:IN Rd,P;操作:Rd←P。
IN R5,$3E;读I/O空间地址为$3E寄存器(SPH)的内容,放入寄存器R5。
4、数据存储器空间直接寻址
数据存储器空间直接寻址方式用于直接CPU从SRAM存储器中存取数据。数据存储器空间直接寻址为双字指令,在指令的低字中指出一个16位的SRAM地址。
例:LDS Rd,K;操作:Rd←(K)。
LDS R18,$100;读地址为$100的SRAM中内容,传送到R18中。
指令中16位SRAM的地址字长度限定了SRAM的地址空间为64K字节,该地址空间实际包含了32个通用寄存器和64个I/O寄存器。因此,也可使用数据存储器空间直接寻址的方式读取通用寄存器或I/O寄存器中的内容,此时应使用这些寄存器在SRAM空间的映射地址,而且其效率也比使用寄存器直接寻址的方式要低。原因在于数据存储器空间直接寻址的指令为双字指令,指令周期为2个系统时钟。
5、数据存储器空间的寄存器间接寻址
由指令指定某一个16位寄存器的内容作为操作数在SRAM中的地址,该寻址方式称为数据存储器空间的寄存器间接寻址。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。这种寻址方式特别适用于访问矩阵、查表等应用。
例: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后的内容作为操作数在S
文档评论(0)