您好,欢迎访问三七文档
ADC说明:两个寄存器和C标志位的内容相加,结果送目的寄存器Rd。操作:(i)Rd←Rd+Rr+C语法:操作数:程序计数器:(i)ADCRd,Rr0≤d≤31,0≤r≤31PC-PC+1机器码:000111rdddddrrrr状态寄存器(SREG)标志位:ITHSVNZC--H:Rd3·Rr3+Rr3·R3+R3·Rd3如果第3位有进位置1,否则清零S:N[+]V符号测试V:Rd7·Rr7·R7+Rd7·Rr7·R7如果结果的补码溢出则置1,否则清零N:R7如果结果的最高有效位为1则置1,否则清零Z:R7·R6·R5·R4·R3·R2·R1·R0如果结果为$00置1,否则清零C:Rd7·Rr7+Rr7·R7+R7·Rd7如果结果的最高有效位有进位则置1,否则清零R(((结果)在操作之后等于Rd例如:R1:R0与R3:R2相加addr2,r0;加低字节adcr3,r1;带进位加高字节字长:1(2字节)指令周期:1共125页第1页ADD说明:两个寄存器不带进位C标志位相加,结果送目的寄存器Rd。操作:Rd-Rd+Rr语法:操作数:程序计数器:ADDRd,Rr0≤d≤31,0≤r≤31PC-PC+1机器码:000011rdddddrrrr状态寄存器(SREG)标志位:ITHSVNZC--H:Rd3·Rr3+Rr3·R3+R3·Rd3如果第3位有进位置1,否则清零S:N[+]V符号测试V:Rd7·Rr7·R7+Rd7·Rr7·R7如果结果的补码溢出则置1,否则清零N:R7如果结果的最高有效位为1则置1,否则清零Z:R7·R6·R5·R4·R3·R2·R1·R0如果结果为$00置1,否则清零C:Rd7·Rr7+Rr7·R7+R7·Rd7如果结果为$00置1,否则清零R(结果)在操作之后等于Rd例如:addr1,r2;r1与r2相加(r1=r1+r2)addr28,r28;r28自加(r28=r28+r28)字长:1(2字节)指令周期:1共125页第2页ADIW说明:寄存器对与立即数(0-63)相加,结果放到寄存器对。此指令只用于最后4个寄存器对和指针寄存器。此指令并不是在所有的芯片上都适用。详情请参照设备专用指令集。操作:(i)Rd+1:Rd-Rd+1:Rd+K语法:操作数:程序计数器:(i)ADIWRd+1:Rd,KdE{24,26,28,30},0=K=63PC-PC+1机器码:10010110KKddKKKK状态寄存器(SREG)标志位:ITHSVNZC---S:N[+]V,符号测试V:Rdh7·R15如果操作结果的补码溢出则置1,否则清零N:R15如果结果的最高有效位为1则置1,否则清零Z:R15·R14·R13·R12·R11·R10·R9·R8·R7·R6·R5·R4·R3·R2·R1·R0如果结果为$0000置1,否则清零C:R15·Rdh7如果结果的最高有效位有进位则置1,否则清零R(结果)在操作之后等于Rdh:Rdl(Rdh7-Rdh0=R15-R8,Rdl7-Rdl0=R7-R0)例如:adiwr25:24,1;将r25:r24加1adiwZH:ZL,63;将Z指针(r31:r30)加上63字长:1(2字节)指令周期:2共125页第3页AND说明:寄存器Rd和寄存器Rr的内容逻辑与,结果送目的寄存器Rd。操作:(i)Rd←Rd·Rr(ii)语法:操作数:程序计数器:(i)ANDRd,Rr0≤d≤31,0≤r≤31PC←PC+1机器码:001000rdddddrrrr状态寄存器(SREG)标志位:ITHSVNZC---0-S:N[+]V,符号测试V:0清零N:R7如果结果的最高有效位为1则置1,否则清零Z:R7·R6·R5·R4·R3·R2·R1·R0如果结果为$00置1,否则清零R(结果)在操作之后等于Rd例如:andr2,r3;r2和r3按位与,结果放在r2ldir16,1;把立即数00000001装入r16andr2,r16;只取r2的第0位字长:1(2字节)指令周期:1共125页第4页ANDI说明:寄存器Rd的内容与常数逻辑与,结果送目的寄存器Rd操作:(i)Rd←Rd·K语法:操作数:程序计数器:(i)ANDIRd,K16≤d≤31,0≤K≤255PC←PC+1机器码:0111KKKKddddKKKK状态寄存器(SREG)标志位:ITHSVNZC---0-S:N[+]V,符号测试V:0清零N:R7如果结果的最高有效位为1则置1,否则清零Z:R7·R6·R5·R4·R3·R2·R1·R0如果结果为$00置1,否则清零R(结果)在操作之后等于Rd例如:andir17,$0F;将r17的高半字节清零andir18,$10;取r18的第4位andir19,$AA;将r19的奇数位清零字长:1(2字节)指令周期:1共125页第5页ASR说明:寄存器Rd中的所有位右移1位,而第7位保持原逻辑值,第0位被装入SREG的C标志位。这个操作实现补码值除以2,而不改变符号。进位标志用于结果的舍入。操作:(i)语法:操作数:程序计数器:(i)ASRRd0≤d≤31PC←PC+1机器码:1001010ddddd0101状态寄存器(SREG)标志位:ITHSVNZC---S:N[+]V,符号测试V:N[+]C(用来标志右移后的N和C)N:R7如果结果的最高有效位为1则置1,否则清零Z:R7·R6·R5·R4·R3·R2·R1·R0如果结果为$00置1,否则清零C:Rd0如果在右移之前Rd的LSB为1则置1,否则清零R(结果)在操作之后等于Rd例如:dir16,$10;将十进制数16装入r16asrr16;r16=r16/2ldir17,$FC;将-4装入r17asrr17;r17=r17/2字长:1(2字节)指令周期:1共125页第6页BCLR说明:状态寄存器SREG的指定位清零操作:(i)SREG(s)←0语法:操作数:程序计数器:(i)BCLRs0≤s≤7PC-PC+1机器码:100101001sss1000状态寄存器(SREG)标志位:ITHSVNZCI:0如果s=7为0,否则不变T:0如果s=6为0,否则不变H:0如果s=5为0,否则不变S:0如果s=4为0,否则不变V:0如果s=3为0,否则不变N:0如果s=2为0,否则不变Z:0如果s=1为0,否则不变C:0如果s=0为0,否则不变例如:bclr0;清零Cbclr7;禁止全局中断字长:1(2字节)指令周期:1共125页第7页BLD说明:复制SREG(状态寄存器)的T标志位到寄存器Rd中的第b位。操作:Rd(b)-T语法:操作数:程序计数器:BLDRd,b0≤d≤31,0≤b≤7PC-PC+1机器码:1111100ddddd0bbb状态寄存器(SREG)标志位:ITHSVNZC--------例如:;复制位bstr1,2;存储r1的第2位到T标志位中bldr0,4;将T标志位装入到r0的第4位字长:1(2字节)指令周期:1共125页第8页BRBC说明:条件相对跳转。执行该指令时,PC先加1,再测试SREG的第s位,如果该位被清零,则跳转k个字,k为7位带符号数,最多可向前跳63个字,向后跳64个字;否则顺序执行。在汇编程序中,用目的地址的标号替代相对跳转字k。操作:IfSREG(s)=0thenPC-PC+k+1,elsePC-PC+1语法:操作数:程序计数器:BRBCs,k0≤s≤7,-64≤k≤+63PC-PC+k+1PC-PC+1,如果条件为假机器码:111101kkkkkkksss状态寄存器(SREG)标志位:ITHSVNZC--------例如:cpir20,5;比较r20与数字5brbc1,noteq;若SREG的z标志位(第1位)为0跳转...noteq:nop;跳转到目标语句执行(空操作)字长:1(2字节)指令周期:1(如果条件为假)2(如果条件为真)共125页第9页BRBS说明:条件相对跳转。执行该指令时,PC先加1,再测试SREG的s位,如果该位被置位,则跳转k个字,k为7位带符号数,最多可向前跳63个字,向后跳64个字;否则顺序执行。在汇编程序中,用目的地址的标号替代相对跳转字k。操作:IfSREG(s)=1thenPC←PC+k+1,elsePC←PC+1语法:操作数:程序计数器:BRBSs,k0≤s≤7,-64≤k≤+63PC-PC+k+1PC-PC+1,如果条件为假机器码:111100kkkkkkksss状态寄存器(SREG)标志位:ITHSVNZC--------Example:bstr0,3;装入r0的第3位到T标志位brbs6,bitset;若T标志位(第6位)为1跳转...bitset:nop;跳转到目标语句执行(空操作)字长:1(2字节)指令周期:1(如果条件为假)2(如果条件为真)共125页第10页BRCC说明:条件相对跳转。测试进位标志C,如果C位被清除,则相对PC值跳转k个字。k为7位带符号数,最多可向前跳63个字,向后跳64个字。这条指令相当于指令BRBC0,k。操作:IfC=0thenPC-PC+k+1,elsePC-PC+1语法:操作数:程序计数器:BRCCk-64≤k≤+63PC-PC+k+1PC-PC+1,如果条件为假机器码:111101kkkkkkk000状态寄存器(SREG)标志位:ITHSVNZC--------例如:addr22,r23;r23加上r22brccnocarry;C=0跳转...nocarry:nop;跳转到目标语句执行(空操作)字长:1(2字节)指令周期:1(如果条件为假)2(如果条件为真)共125页第11页BRCS说明:条件相对跳转,测试进位标志C,如果C位被置位,则相对PC值跳转k个字。k为7位带符号数,最多可向前跳63个字,向后跳64个字。这条指令相当于指令BRBS0,k。操作:IfC=1thenPC-PC+k+1,elsePC-PC+1语法:操作数:程序计数器:BRCSk-64≤k≤+63PC-PC+k+1PC-PC+1,如果条件为假机器码:111100kkkkkkk000状态寄存器(SREG)标志位:ITHSVNZC--------例如:cpir26,$56;比较r26与$56brcscarry;C=1跳转...carry:nop;跳转到目标语句执行(空操作)字长:1(2字节)指令周期:1(如果条件为假)2(如果条件为真)共125页第12页BREAK说明:BREAK指令用于在线调试系统,它通常不在应用程序中使用。一旦BREAK指令执行,AVRCPU将被置于停止模式,此时可以使用在线调试器获取CPU内部资源数据和变化。如果任何的锁定位置位,或者JTAGEN和OCDEN镕丝位都处于未编程状态,CPU会把BREAK指令当作一个空操作来对待,此时不会进入停止模式。此指令不是任何芯片都支持。详情请参照芯片特殊指令集。操作:在线调试终断执行语法:操作数:程序计数器:BREAK无PC-PC+1机器码:1001010110011000状态寄存器(SREG)标志位:ITHSVNZC--------字长:1(2字节)指令周期:1共125页第13页BREQ说明:条件相对跳转,测试零标志位Z,如果Z位被置位,则相对PC值跳转k个字。如果在执行CP、CPI、SUB或SUBI指令后,立即执行该指令,且当寄存器Rd中数与寄存器Rr中数相等时,将发生跳转。可跳转k个字,k为7位带符号数,最多可向前跳63个字,向后跳64个字。这条指令相当于指令BRBS1,k。操作:IfRd=Rr(Z=1)thenPC-PC+k+1,elsePC-PC+1语法:操作数:程序计数器:BREQk-64≤k≤+63PC-PC+k+1PC-PC+1,如果条件为假机器码:111100kkkkkkk001状态寄存器(SREG)标志位:I
本文标题:AVR指令集中文版
链接地址:https://www.777doc.com/doc-6242825 .html