AVR汇编指令集中文版
### AVR汇编指令集中知识点详解 #### 一、ADC(带进位加法) **功能说明**:ADC(Add with Carry)指令实现的是带进位的加法操作,即两个寄存器的内容以及当前的进位标志(C标志位)进行相加,并将结果存储到目标寄存器中。 **操作格式**: ``` (i) Rd ← Rd + Rr + C ``` **语法**: ``` ADCRd,Rr ``` **参数范围**: - `0 ≤ d ≤ 31`:目标寄存器编号 - `0 ≤ r ≤ 31`:源寄存器编号 **程序计数器变化**: - `PC <- PC + 1`:执行该指令后,程序计数器(PC)自动增加1 **机器码**: ``` 0001 11rd dddd rrrr ``` **状态寄存器(SREG)标志位变化**: - **H** (Half Carry): 如果第3位有进位,则H标志位置1,否则清零。 - **S** (Sign): 如果结果的符号位(最高有效位)为1,则S标志位置1,否则清零。 - **V** (Overflow): 如果结果的补码发生溢出,则V标志位置1,否则清零。 - **N** (Negative): 如果结果的最高有效位为1,则N标志位置1,否则清零。 - **Z** (Zero): 如果结果为0,则Z标志位置1,否则清零。 - **C** (Carry): 如果结果的最高有效位有进位,则C标志位置1,否则清零。 **示例**: ```assembly ; 将 R1:R0 与 R3:R2 相加 add r0, r2 ; 加低字节 adc r1, r3 ; 带进位加高字节 ``` **字长**:1(2字节) **指令周期**:1 --- #### 二、ADD(无进位加法) **功能说明**:ADD(Addition)指令实现的是两个寄存器的内容进行相加,但不考虑进位标志位(C标志位),并将结果存储到目标寄存器中。 **操作格式**: ``` Rd <- Rd + Rr ``` **语法**: ``` ADDRd,Rr ``` **参数范围**: - `0 ≤ d ≤ 31`:目标寄存器编号 - `0 ≤ r ≤ 31`:源寄存器编号 **程序计数器变化**: - `PC <- PC + 1`:执行该指令后,程序计数器(PC)自动增加1 **机器码**: ``` 0000 11rd dddd rrrr ``` **状态寄存器(SREG)标志位变化**: - **H** (Half Carry): 如果第3位有进位,则H标志位置1,否则清零。 - **S** (Sign): 如果结果的符号位(最高有效位)为1,则S标志位置1,否则清零。 - **V** (Overflow): 如果结果的补码发生溢出,则V标志位置1,否则清零。 - **N** (Negative): 如果结果的最高有效位为1,则N标志位置1,否则清零。 - **Z** (Zero): 如果结果为0,则Z标志位置1,否则清零。 - **C** (Carry): 如果结果为$00,则C标志位置1,否则清零。 **示例**: ```assembly ; 将 r1 与 r2 相加 add r1, r2 ; r1 = r1 + r2 ``` **字长**:1(2字节) **指令周期**:1 --- #### 三、ADIW(寄存器对与立即数相加) **功能说明**:ADIW(Add Immediate to Word)指令是将寄存器对与一个立即数(0-63)相加,并将结果存放到寄存器对中。该指令主要应用于最后4个寄存器对和指针寄存器。 **操作格式**: ``` (i) Rd+1:Rd <- Rd+1:Rd + K ``` **语法**: ``` ADIWRd+1:Rd,K ``` **参数范围**: - `dE{24,26,28,30}`:寄存器对编号 - `0 <= K <= 63`:立即数范围 **程序计数器变化**: - `PC <- PC + 1`:执行该指令后,程序计数器(PC)自动增加1 **机器码**: ``` 1001 0110 KKdd KKKK ``` **状态寄存器(SREG)标志位变化**: - **S** (Sign): 如果操作结果的符号位(最高有效位)为1,则S标志位置1,否则清零。 - **V** (Overflow): 如果操作结果的补码发生溢出,则V标志位置1,否则清零。 - **N** (Negative): 如果结果的最高有效位为1,则N标志位置1,否则清零。 - **Z** (Zero): 如果结果为$0000,则Z标志位置1,否则清零。 - **C** (Carry): 如果结果的最高有效位有进位,则C标志位置1,否则清零。 **示例**: ```assembly ; 将 r25:r24 加1 adiw r25:r24, 1 ``` **字长**:1(2字节) **指令周期**:2 --- #### 四、AND(按位与操作) **功能说明**:AND指令用于实现寄存器Rd和寄存器Rr中的内容进行逻辑与操作,并将结果存储到目标寄存器Rd中。 **操作格式**: ``` (i) Rd ← Rd · Rr ``` **语法**: ``` ANDRd,Rr ``` **参数范围**: - `0 ≤ d ≤ 31`:目标寄存器编号 - `0 ≤ r ≤ 31`:源寄存器编号 **程序计数器变化**: - `PC <- PC + 1`:执行该指令后,程序计数器(PC)自动增加1 **机器码**: ``` 0010 00rd dddd rrrr ``` **状态寄存器(SREG)标志位变化**: - **S** (Sign): 如果结果的符号位(最高有效位)为1,则S标志位置1,否则清零。 - **V** (Overflow): 清零。 - **N** (Negative): 如果结果的最高有效位为1,则N标志位置1,否则清零。 - **Z** (Zero): 如果结果为$00,则Z标志位置1,否则清零。 **示例**: ```assembly ; 将 r2 和 r3 按位与 and r2, r3 ``` **字长**:1(2字节) **指令周期**:1 --- #### 五、ANDI(寄存器内容与立即数按位与操作) **功能说明**:ANDI指令用于实现寄存器Rd的内容与一个立即数进行逻辑与操作,并将结果存储到目标寄存器Rd中。 **操作格式**: ``` (i) Rd ← Rd · K ``` **语法**: ``` ANDIRd,K ``` **参数范围**: - `16 ≤ d ≤ 31`:目标寄存器编号 - `0 ≤ K ≤ 255`:立即数范围 **程序计数器变化**: - `PC <- PC + 1`:执行该指令后,程序计数器(PC)自动增加1 **机器码**: ``` 0111 KKKK dddd KKK ``` **状态寄存器(SREG)标志位变化**: - **S** (Sign): 如果结果的符号位(最高有效位)为1,则S标志位置1,否则清零。 - **V** (Overflow): 清零。 - **N** (Negative): 如果结果的最高有效位为1,则N标志位置1,否则清零。 - **Z** (Zero): 如果结果为$00,则Z标志位置1,否则清零。 **示例**: ```assembly ; 将 r2 的内容与立即数0x01按位与 andi r2, 0x01 ``` **字长**:1(2字节) **指令周期**:1 以上五个指令涵盖了AVR微控制器中的基本算术逻辑操作,通过这些指令可以实现数据处理和控制逻辑的编程,是构建复杂程序的基础。理解并熟练掌握这些指令对于开发基于AVR的嵌入式系统至关重要。
剩余124页未读,继续阅读
- xiaminglun2013-04-24中文版,非常棒!
- tsxbbgg2012-12-13挺全的,理解单片机过程很有用
- mass_lynnxy2015-01-04很全面,工具书了。。
- dinbo12013-01-12我很需要的中文版
- kwchangseu2013-03-10谢谢,对我很有帮助
- 粉丝: 0
- 资源: 19
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助