单片机设计技术:第3章 AVR单片机指令系统_第1页
单片机设计技术:第3章 AVR单片机指令系统_第2页
单片机设计技术:第3章 AVR单片机指令系统_第3页
单片机设计技术:第3章 AVR单片机指令系统_第4页
单片机设计技术:第3章 AVR单片机指令系统_第5页
已阅读5页,还剩163页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第3章 AVR单片机指令系统 指令格式 寻址方式 算术和逻辑运算指令 控制转移指令 位操作和MCU控制指令 数据传送指令第3章 AVR单片机指令系统 指令格式 寻址方式 数据传送指令 算术和逻辑运算指令 控制转移指令 位操作和MCU控制指令AVR3.1 汇编语言指令格式指令的三种表示形式二进制形式计算机直接能够执行(机器码、目标代码)十六进制形式以十六进制形式存储目标代码(*.hex文件)助记符形式用单词或缩写形式表示指令(汇编语言)3.1 汇编语言指令格式指令字节数MCS-51单片机的1条指令的机器码长度为1个字节(单字节指令)、2个字节(双字节指令)、 3个字节(三字节指令)AVR单片机的

2、1条指令的机器码长度为16位二进制(单字指令)、32位二进制(双字指令)所以程序存储器Flash按照16位二进制(字)进行组织3.1 汇编语言指令格式汇编语句的格式汇编语言的语句最多由四部分(字段)组成:标号: 操作码 操作数,操作数 ;注释 标号之后用冒号“:”与操作码隔开 操作码之后用空格“ ”与操作数隔开 两操作数之间用逗号“,”隔开 注释之前用分号“;”与操作数隔开3.1 汇编语言指令格式关于标号标号-是指令的符号地址。在程序的其它地方可以引用这个标号以代表这个特定的地址。不必每条指令都采用标号,只有那些被其它语句(如转移、调用)引用的语句和数据,才需赋予标号3.1 汇编语言指令格式关

3、于操作码有2类指令助记符伪指令助记符关于操作数工作寄存器、I/O寄存器存储器地址、立即数常数、表达式3.1.4 汇编器伪指令伪指令不对应机器代码,用于设置汇编参数程序段的定义:. CSEG ;程序段开始,不带参数. ESEG ;EEPROM段,不带参数. DSEG ;数据段开始,不带参数3.1.4 汇编器伪指令器件型号的定义:. DEVICE 器件型号 例如 . DEVICE ATmega8 包含文件:. INCLUDE 文件名 把指定文件包含到当前文件中,例如.include m8def.inc3.1.4 汇编器伪指令在SRAM中建立变量(用于保存数据):Label: . BYTE 表达式;

4、其中表达式为字节数,必须有;相当于C语言中声明变量,例如:UA: .BYTE 2 ;相当于: int UA;Power: .BYTE 4 ;相当于: float Power;Text: .BYTE 10 ;相当于:char Text10;3.1.4 汇编器伪指令在程序存储器或EEPROM中定义数据(建立数据):Label: . DB 表达式 ;定义字节数据Label: . DW 表达式 ;定义字数据3.1.4 汇编器伪指令寄存器的定义:. DEF 符号寄存器 可以赋几个符号,符号可以再定义符号的定义:. EQU 符号表达式 ;该符号不能再定义. SET 符号表达式 ;该符号可以再定义3.1.4

5、 汇编器伪指令设置起始地址:. ORG 表达式如果该指令前有标号,则标号表达式如果不用该指令,则汇编器启动时定位计数器自动设置默认值程序段(代码段)和EEPROM段的定位计数器默认值是0; SRAM段的定位计数器默认值是96(0 x60)3.1.5 AVR汇编语言的表达式操作数:标号定位计数器的取值(地址)用EUQ或SET伪指令定义的符号常数整数常数:十进制数,例如 10,255,100十六进制数,如 0 x0A,0 xFF(或写成 $0A,$FF)二进制数,例如 0b000010103.1.5 AVR汇编语言的表达式常用函数:LOW(表达式);返回表达式的低位字节HIGH(表达式);返回第2

6、个字节BYTE2(表达式);返回第2个字节BYTE3(表达式);返回第3个字节BYTE4(表达式);返回第4个字节EXP2(表达式) ;返回2的(表达式)次幂,= 2表达式3.1.5 AVR汇编语言的表达式运算符:逻辑非 !逐位非 负号 乘、除 * /加、减 左移 逐位与 &逐位异或 逐位或 |第3章 AVR单片机指令系统AVR 指令格式 寻址方式 数据传送指令 算术和逻辑运算指令 控制转移指令 位操作和MCU控制指令3.2 寻址方式(Addressing Modes) 寄存器直接寻址 数据直接寻址 立即数寻址 寄存器间接寻址 变址寻址、相对寻址、位寻址指令给出操作数的方式,有7大类第3章寄存

7、器直接寻址单寄存器直接寻址(Direct Single Register Addressing)汇编指令中给出1个寄存器的名字作为操作数(R0, R1, , R31);机器码中给出该寄存器的直接地址(00000, 00001, , 11111)例:INC Rd;机器码1001 010d dddd 00113.2寄存器直接寻址双寄存器直接寻址(Direct Register Addressing, 2 Registers)指令中给出2个寄存器的名字作为操作数;机器码中给出这2个寄存器的直接地址例1:ADD Rd, Rr机器码 0000 11 rd dddd rrrr例2:SUB Rd, Rr机器

8、码 0001 10 rd dddd rrrr3.2寄存器直接寻址I/O寄存器直接寻址(I/O Direct Addressing)指令中给出I/O寄存器的名字作为操作数(SREG, SPH, SPL, )机器码中给出I/O寄存器的直接地址(000000, 000001, , 111111)例:IN Rd, P机器码 1011 0ppd dddd pppp3.2数据直接寻址Data Direct Addressing以SRAM的数据作为操作数,直接给出地址机器码为2个字,其中第2个字为SRAM数据的直接地址,地址范围(0 x0000 0 xFFFF)例:LDS Rd, K ;机器码 1001 0

9、00d dddd 0000, kkkk kkkk kkkk kkkk3.2立即数寻址在指令的机器码中包含操作数例:LDI Rd, K ;机器码 1110 kkkk dddd kkkk3.2数据间接寻址Data Indirect Addressing以SRAM的数据作为操作数,以16位寄存器X/Y/Z的形式间接给出数据地址,寻址范围64KB(0 x0000 0 xFFFF)机器码为1个字,例:LD Rd, Y 机器码 1000 000d dddd 10003.2数据间接寻址带后增量的数据存储器间接寻址(with Post-increment)先完成数据存储器间接寻址操作,然后把X, Y 或 Z

10、的内容加1例如:LD Rd, Y相当于C语言中:char Rd; char *Y;Rd = * (Y+ +);3.2数据间接寻址带预减量的数据存储器间接寻址(with Pre-decrement)先把X, Y 或 Z 的内容减1,然后完成数据存储器间接寻址操作例如:LD Rd, Y相当于C语言中:char Rd; char *Y;Rd = * (Y);3.2数据间接寻址带偏移量的数据存储器间接寻址 (with Displacement) 变址寻址用X, Y 或 Z 的内容与指令中的常数q之和间接给出数据地址例如:LDD Rd, Yq其中 0 q 63相对寻址和位寻址在具体指令中学习3.2第3章

11、 AVR单片机指令系统AVR 指令格式 寻址方式 数据传送指令 算术和逻辑运算指令 控制转移指令 位操作和MCU控制指令3.5 数据传送指令SRAM空间的数据传送指令Flash空间的数据传送指令I/O空间的数据传送指令堆栈操作指令第3章3.5.1-2 SRAM空间的数据传送指令1. 工作寄存器之间的传送(1) 寄存器送寄存器(Copy Register)MOV Rd, Rr ; 0d, r31操作: Rd Rr,PC PC + 1 其中Rr内容不变机器码: 0010 11 rd dddd rrrr1个字,所以PC + 13.5.1-2 SRAM空间的数据传送指令1. 工作寄存器之间的传送(2)

12、 16位寄存器送16位寄存器(Copy Register Word)MOVW Rd, Rr ; d, r=0,230操作: Rd+1: Rd Rr+1: Rr该指令为mega指令,AT90S没有3.5.1-2 SRAM空间的数据传送指令1. 工作寄存器之间的传送(3)立即数送寄存器(Load Immediate)LDI Rd, K; 16d31, 0K255操作: Rd K例如:LDI R16,203.5.1-2 SRAM空间的数据传送指令1. 工作寄存器之间的传送例 把立即数(常数)66H送到R0中相应程序为:LDI R16, $66 ;或0 x66MOV R0, R16(1) 直接寻址SR

13、AM送寄存器(Load Direct from Data Space)LDS Rd, k; 0d31, 0k 65535操作:Rd SRAM (k)指令机器码为2个字2. 工作寄存器和SRAM之间的传送(1) 直接寻址寄存器送SRAM (Store Direct to Data Space)STS k, Rr ; 0r31, 0k 65535操作:SRAM (k) Rr指令机器码为2个字2. 工作寄存器和SRAM之间的传送2. 工作寄存器和SRAM之间的传送(2) SRAM送寄存器,寄存器间接寻址,采用X指针 (Load Indirect from Data Space to Register

14、 using Index X) LD Rd,X ;0d 31 LD Rd,X+ ;0d 31 LD Rd,X ;0d 31(2)寄存器送SRAM ,寄存器间接寻址,采用X指针(Store Indirect From Register to Data Space using Index X) ST X, Rr ;0r 31 ST X+, Rr ;0r 31 ST X, Rr ;0r 312. 工作寄存器和SRAM之间的传送(3) SRAM送寄存器,寄存器间接寻址,采用Y指针 (Load Indirect from Data Space to Register using Index Y) LD

15、Rd,Y ;0d 31 LD Rd,Y+ ;0d 31 LD Rd,Y ;0d 31 LDD Rd,Y+q ;0q 632. 工作寄存器和SRAM之间的传送 ST Y, Rr ;0r 31 ST Y+, Rr ;0r 31 ST Y, Rr ;0r 31 STD Y+q , Rr ;0q 632. 工作寄存器和SRAM之间的传送(3)寄存器送SRAM ,寄存器间接寻址,采用Y指针(Store Indirect From Register to Data Space using Index Y)(4) SRAM送寄存器,寄存器间接寻址,采用Z指针 (Load Indirect from Data

16、 Space to Register using Index Z) LD Rd,Z ;0d 31 LD Rd,Z+ ;0d 31 LD Rd,Z ;0d 31 LDD Rd,Z+q ;0q 632. 工作寄存器和SRAM之间的传送 ST Z, Rr ;0r 31 ST Z+, Rr ;0r 31 ST Z, Rr ;0r 31 STD Z+q , Rr ;0q 632. 工作寄存器和SRAM之间的传送(4)寄存器送SRAM ,寄存器间接寻址,采用Z指针(Store Indirect From Register to Data Space using Index Z)3.5.3 从程序存储器读数

17、据指令 (Load Program Memory)指令格式: LPM操作:R0 Flash(Z)Z的高15位指向程序存储器的字地址,最低位为0时指向低字节,最低位为1时指向高字节。1. 从程序存储器读数据装入R03.5.3 从程序存储器读数据指令 (Load Program Memory)指令格式: LPM Rd, Z操作:Rd Flash(Z)该指令为mega指令,AT90S没有2. 从程序存储器读数据装入指定寄存器3.5.3 从程序存储器读数据指令 (Load Program Memory)指令格式: LPM Rd, Z+操作:Rd Flash(Z), Z Z+1该指令为mega指令,AT

18、90S没有3. 带后增量的从程序存储器读数据指令3.5.4 向程序存储器写数据指令(Store Program Memory)指令格式: SPM操作:Flash(Z) R1:R0 该指令为mega指令,AT90S没有,用于自编程(程序更新)功能3.5.5 I/O空间的数据传送指令(输入输出)输入指令(Input)格式: IN Rd,P;0d 31, 0P 63操作: Rd P例如: IN R16, SREG IN R17, PINA3.5.5 I/O空间的数据传送指令(输入输出)输出指令(Output)格式: OUT P, Rr;0r 31, 0P 63操作: P Rr例如: OUT SPH,

19、 R16 OUT SPL, R173.5.6 堆栈操作指令进栈指令(Push Register on Stack)格式: PUSH Rr ;0r 31操作:(1) STACK (SP) Rr(2) SP SP 1例如:PUSH R16PUSH R173.5.6 堆栈操作指令出栈指令(Pop Register from Stack)格式: POP Rd ;0d 31操作:(1) SP SP 1(2) Rd STACK (SP) 例如:POP R16POP R173.5 数据传送指令小结工作寄存器0000H001FH2立即数1堆栈2I/O寄存器0020H005FH2SRAM存储器0060H045F

20、H24Flash存储器000HFFFH4第3章 AVR单片机指令系统AVR 指令格式 寻址方式 数据传送指令 算术和逻辑运算指令 控制转移指令 位操作和MCU控制指令3.3 算术和逻辑运算指令算术运算指令逻辑运算指令第3章3.3.1 加法指令3.3.2 减法指令3.3.6 逻辑与运算指令3.3.7 逻辑或运算指令3.3.3 取反码指令3.3.4 取补码指令3.3.5 比较指令3.3.9 乘法指令3.3.8 逻辑异或运算指令3.3.1 加法算术运算指令寄存器相加,不带进位(Add without Carry) ADD Rd,Rr ;0d31,0r31操作: Rd Rd Rr寻址方式: 双寄存器直

21、接寻址机器码: 0000 11 rd dddd rrrr影响标志: H S V N Z C3.3.1 加法算术运算指令寄存器相加,不带进位(Add without Carry) ADD Rd,Rr ;0d31,0r31例: LDI R16, 27LDI R20, 34 ADD R20, R16运行结果 (R20) = 613.3.1 加法算术运算指令寄存器相加,带进位(Add with Carry) ADC Rd,Rr ;0d31,0r31操作: Rd Rd Rr C寻址方式: 双寄存器直接寻址机器码: 0001 11 rd dddd rrrr影响标志: H S V N Z C3.3.1 加法

22、算术运算指令寄存器相加,带进位(Add with Carry)例:LDI R16, low(1000)LDI R17, high(1000)LDI R20, low(2000)LDI R21, high(2000) ADD R16, R20 ADC R17, R213.3.1 加法算术运算指令寄存器对加立即数(Add Immediate to Word) ADIW Rdl,K其中 dl=24, 26, 28, 30, 0K63操作: Rdh:Rdl Rdh:Rdl K寻址方式: 双寄存器直接寻址,立即数寻址机器码: 1001 0110 kkdd kkkk影响标志: S V N Z C(不影响半

23、进位)3.3.1 加法算术运算指令寄存器对加立即数(Add Immediate to Word) ADIW Rdl,K其中 dl=24, 26, 28, 30, 0K63例如: ADIW R24, 0 x3F等价于:LDI R16, 0 x3FLDI R17, 0ADD R24, R16ADC R25, R173.3.1 加法算术运算指令寄存器加1指令(Increment)INC Rd ;0d 31 操作: Rd Rd 1寻址方式: 单寄存器直接寻址机器码: 1001 010d dddd 0011影响标志: S V N Z (不影响半进位和进位标志)3.3.1 加法算术运算指令寄存器加1指令(

24、Increment) INC Rd ;0d 31例:INC R16等价于:LDI R17, 1ADD R16, R17但对状态寄存器SREG的影响不同3.3.2 减法运算指令寄存器相减,不带进位(Subtract without Carry) SUB Rd,Rr ;0d 31,0r 31操作: Rd Rd Rr寻址方式: 双寄存器直接寻址机器码: 0001 10 rd dddd rrrr影响标志: H S V N Z C例: SUB R16, R203.3.2 减法运算指令寄存器减立即数,不带进位(Subtract Immediate)SUBI Rd,K ;16d31,0K255操作: Rd

25、Rd K寻址方式: 单寄存器直接寻址,立即寻址机器码: 0101 kkkk dddd kkkk影响标志: H S V N Z C例: SUBI R16, 1503.3.2 减法运算指令寄存器相减,带进位(Subtract with Carry) SBC Rd,Rr ;0d31,0r31 操作: Rd Rd Rr C寻址方式: 双寄存器直接寻址机器码: 0000 10 rd dddd rrrr影响标志: H S V N Z C例: SUB R16, R20 SBC R17, R213.3.2 减法运算指令寄存器减立即数,带进位 (Subtract Immediate with Carry)SBC

26、I Rd,K;16d31,0K255操作: Rd Rd K C寻址方式: 单寄存器直接寻址,立即寻址机器码: 0100 kkkk dddd kkkk影响标志: H S V N Z C3.3.2 减法运算指令寄存器减立即数,带进位 (Subtract Immediate with Carry)例: SUBI R16, low(1500)SBCI R17, high(1500)等价于:LDI R20, low(1500) LDI R21, high(1500) SUB R16, R20 SBC R17, R213.3.2 减法运算指令寄存器对减立即数(Subtract Immediate from

27、 Word) SBIW Rdl,Kdl=24, 26, 28, 30,0K63操作: Rdh:Rdl Rdh:Rdl K寻址方式: 双寄存器直接寻址,立即寻址机器码: 1001 0111 kkdd kkkk影响标志: S V N Z C (不影响半进位)3.3.2 减法运算指令寄存器对减立即数(Subtract Immediate from Word) SBIW Rdl,Kdl=24, 26, 28, 30,0K63例: SBIW R24, 10等价于: LDI R17, 0 SUBI R24, 10 SBC R25, R173.3.2 减法运算指令寄存器减1指令(Decrement) DEC

28、 Rd ;0d 31操作: Rd Rd 1寻址方式: 单寄存器直接寻址机器码: 1001 010d dddd 1010影响标志: S V N Z (不影响半进位和进位标志)例: DEC R163.3.3 取反码指令寄存器取反码指令(Ones Complement) COM Rd ;0d 31操作: Rd 0 xFF Rd寻址方式: 单寄存器直接寻址影响标志: S V0 N Z C1(不影响半进位)寄存器取补码指令(Twos Complement) NEG Rd ;0d 31操作: Rd 0 x00 Rd寻址方式: 单寄存器直接寻址影响标志: H S V N Z C3.3.4 取补码指令(取补运

29、算)注意该指令是取补运算,例如LDI R16, 255NEG R16运行结果 (R16) = 0 x01LDI R16, 1NEG R16运行结果 (R16) = 0 xFF3.3.4 取补码指令(取补运算)3.3.5 比较指令寄存器比较,不带进位(Compare) CP Rd,Rr ;0d31,0r31寄存器比较,带进位(Compare with Carry) CPC Rd,Rr;0d31,0r31寄存器与立即数比较(Compare with Immediate)CPI Rd,K;16d31, 0K2553.3.5 比较指令指令 CP Rd,Rr 对应于 SUB指令 CPC Rd,Rr 对应

30、于 SBC 指令 CPI Rd,K 对应于 SUBI但计算结果不存储影响标志: H S V N Z C (全部)通常紧跟条件转移指令(判断)3.3.9 乘法指令(Multiply) ATmega指令定点整数乘法指令(3条) MUL Rd,Rr ;0d, r 31 MULS Rd,Rr ;16d, r 31 MULSU Rd,Rr ;16d, r 31其中MUL指令完成无符号数相乘,MULS 是带符号数相乘,MULSU 是带符号数Rd与无符号数Rr相乘,结果均在R1:R0中定点数的概念定点数:小数点位置固定的数。8位二进制无符号整数:0255 (281)例如C语言中的无符号字符型变量( unsi

31、gned char )8位二进制带符号整数:128127例如C语言中的带符号字符型变量( signed char )定点数的概念16位二进制无符号整数:065535 (2161)例如C语言中的无符号整型变量 ( unsigned int )16位二进制带符号整数:3276832767例如C语言中的带符号整型变量 ( signed int )MUL、MULS 、MULSU完成8位二进制定点整数乘法3.3.9 乘法指令(Multiply) ATmega指令定点小数乘法(Fractional Multiply)指令(3条) FMUL Rd,Rr ;16d, r 23 FMULS Rd,Rr ;16d

32、, r 23 FMULSU Rd,Rr ;16d, r 23其中FMUL指令完成无符号数相乘,FMULS 是带符号数相乘,FMULSU 是带符号数Rd与无符号数Rr相乘,结果均在R1:R0中3.3.9 乘法指令(Multiply) ATmega指令定点小数乘法(Fractional Multiply)指令(3条) FMUL Rd,Rr ;16d, r 23 FMULS Rd,Rr ;16d, r 23 FMULSU Rd,Rr ;16d, r 23被乘数和乘数均为8位二进制定点小数,格式为(1.7),结果本来应该是(2.14),左移规格化(1.15),结果最高位进入C标志3.3.6 逻辑与运算

33、指令1. 寄存器逻辑与(Logical AND)AND Rd,Rr ;0d31,0r31影响标志: S V0 N Z (不影响半进位和进位标志)3.3.6 逻辑与运算指令2. 寄存器与立即数逻辑与(Logical AND with Immediate)ANDI Rd,K ;16d31,0K255影响标志: S V0 N Z (不影响半进位和进位标志)3.3.6 逻辑与运算指令3. 寄存器位清零指令(Clear Bits in Register)CBR Rd, K ;16d31, 0K255操作: Rd Rd & (0 xFF K)例1: CBR R16, 8等价于 ANDI R16, 2470

34、b000010000b111101113.3.6 逻辑与运算指令3. 寄存器位清零指令(Clear Bits in Register)CBR Rd, K ;16d31, 0K255操作: Rd Rd & (0 xFF K)例2: CBR R16, 0b 11001001等价于 ANDI R16, 0b 001101103.3.6 逻辑与运算指令4. 测试寄存器(Test for Zero or Minus) TST Rd ;0d 31 操作: Rd Rd & Rd即 AND Rd,Rd影响标志: S V0 N Z (用于判断Rd是否为0、是否为负)3.3.7 逻辑或运算指令1. 寄存器逻辑或(

35、Logical OR)OR Rd,Rr ;0d31,0r31影响标志: S V0 N Z (不影响半进位和进位标志)3.3.7 逻辑或运算指令2. 寄存器与立即数逻辑或(Logical OR with Immediate)ORI Rd,K ;16d31,0K255影响标志: S V0 N Z (不影响半进位和进位标志)3.3.7 逻辑或运算指令3. 设置寄存器位(Set Bits in Register)SBR Rd, K ;16d31,0K255操作: Rd Rd | K例1: SBR R16, 8等价于ORI R16, 83.3.7 逻辑或运算指令3. 设置寄存器位(Set Bits in

36、 Register)SBR Rd, K ;16d31,0K255操作: Rd Rd | K例2: SBR R16, 0b11001001等价于 OR I R16, 0b110010013.3.7 逻辑或运算指令4. 设置寄存器(不影响标志位)(Set all Bits in Register) SER Rd ;16d 31完全等价于 LDI Rd,0 xFF结果等价于 ORI Rd,0 xFF(ORI指令影响标志位)3.3.8 逻辑异或运算指令1. 寄存器逻辑异或(Exclusive OR)EOR Rd,Rr ;0d31,0r31操作: Rd Rd Rr影响标志: S V0 N Z (不影响半

37、进位和进位标志)3.3.8 逻辑异或运算指令2. 寄存器清零(Clear Register)CLR Rd ;0d 31操作: Rd Rd Rd影响标志: S0 V0 N0 Z1 第3章 AVR单片机指令系统AVR 指令格式 寻址方式 数据传送指令 算术和逻辑运算指令 控制转移指令 位操作和MCU控制指令3.4 控制转移指令 无条件转移指令 条件转移指令 条件跳行指令 子程序调用和返回指令第3章无条件转移指令1. 相对转移指令(Relative Jump)RJMP k ;-2Kk 2K操作: PC PC +1 + k, 其中k为12位二进制补码机器码:1100 kkkk kkkk kkkk标志位

38、: 不影响无条件转移指令2. 间接转移指令(Indirect Jump)IJMP操作: PC Z(150),根据Z指针寄存器的内容进行转移机器码: 1001 0100 0000 1001标志位: 不影响无条件转移指令3. 长转移指令(Jump)JMP k ;0k 4M操作: PC k地址范围:03FFFFFH(=4194303)ATmega指令条件转移指令BRBS s,k ;0s 7, 64k63操作:If SREG(s)=1, then PC (PC + 1) +k ; else PC PC + 1寻址方式: 相对寻址机器码: 1111 00kk kkkk ksss影响标志: 无1. 状态寄

39、存器中某位置位转移(Branch if Bit in SREG is Set)条件转移指令BRBC s,k ;0s 7, 64k63操作:If SREG(s)=0, then PC (PC + 1) +k ; else PC PC + 1寻址方式: 相对寻址机器码: 1111 01kk kkkk ksss影响标志: 无2. 状态寄存器中某位清0转移(Branch if Bit in SREG is Cleared)条件转移指令BREQ k ; 64k63操作:If SREG(1)=1, or (Z=1) then PC (PC + 1) +k ; else PC PC + 1寻址方式: 相对寻

40、址机器码: 1111 00kk kkkk k001等效指令: BRBS 1,k3. 相等(Z标志置位)转移Branch if Equal条件转移指令BRNE k ; 64k63操作:If SREG(1)=0, or (Z=0) then PC (PC + 1) +k ; else PC PC + 1寻址方式: 相对寻址机器码: 1111 01kk kkkk k001等效指令: BRBC 1,k4. 不相等(Z标志清0)转移Branch if Not Equal条件转移指令BRCS k ; 64k63操作:If SREG(0)=1, or (C=1) then PC (PC + 1) +k ;

41、else PC PC + 1寻址方式: 相对寻址机器码: 1111 00kk kkkk k000等效指令: BRBS 0,k5、C标志位置位转移(Branch if Carry Set)条件转移指令BRCC k ; 64k63操作:If SREG(0)=0, or (C=0) then PC (PC + 1) +k ; else PC PC + 1寻址方式: 相对寻址机器码: 1111 01kk kkkk k000等效指令: BRBC 0,k6、C标志位清0转移(Branch if Carry Cleared)条件转移指令BRSH k ; 64k63等效指令: BRBC 0,k 或者: BRC

42、C k7、(无符号数)大于或等于转移 Branch if Same or Higher (Unsigned)条件转移指令BRLO k ; 64k63等效指令: BRBS 0,k 或者: BRCS k8、(无符号数)小于转移 Branch if Lower (Unsigned)条件转移指令BRMI k ; 64k63操作:If SREG(2)=1, or (N=1) then PC (PC + 1) +k ; else PC PC + 1寻址方式: 相对寻址机器码: 1111 00kk kkkk k010等效指令: BRBS 2,k9、负数转移(Branch if Minus)条件转移指令BRP

43、L k ; 64k63操作:If SREG(2)=0, or (N=0) then PC (PC + 1) +k ; else PC PC + 1寻址方式: 相对寻址机器码: 1111 01kk kkkk k010等效指令: BRBC 2,k10、正数转移(Branch if Plus)条件转移指令BRGE k ; 64k63操作:If SREG(4)=0, or (S=0) then PC (PC + 1) +k ; else PC PC + 1寻址方式: 相对寻址机器码: 1111 01kk kkkk k100等效指令: BRBC 4,k11、(带符号数)大于或等于转移 Branch if

44、 Greater or Equal (Signed)条件转移指令BRLT k ; 64k63操作:If SREG(4)=1, or (S=1) then PC (PC + 1) +k ; else PC PC + 1寻址方式: 相对寻址机器码: 1111 00kk kkkk k100等效指令: BRBS 4,k12、(带符号数)小于转移 Branch if Less Than (Signed)条件转移指令BRHS k ; 64k6313、半进位标志H置位转移BRHC k ; 64k6314、半进位标志H清0转移条件转移指令BRTS k ; 64k6315、T标志置位转移BRTC k ; 64k

45、6316、T标志清0转移条件转移指令BRVS k ; 64k6317、溢出标志置位转移BRVC k ; 64k6318、溢出标志清0转移条件转移指令BRIE k ; 64k6319、I标志置位(中断允许)转移BRID k ; 64k6320、I标志清0(中断禁止)转移条件跳行指令1、相等跳行CPSE Rd, Rr ; 0d, r31操作:If Rd=Rr, then PC PC + 2 (or 3) ; else PC PC + 1条件跳行指令1、相等跳行(Compare Skip if Equal) 主要用于以下场合:CPSE Rd, Rr ;比较 ;若不相等,多执行一条指令 ;若相等则执行

46、以下指令条件跳行指令2、寄存器位清0跳行(Skip if Bit in Register is Cleared)SBRC Rr, b ; 0r31, 0b 7操作:If Rr (b) =0, then PC PC + 2 (or 3) ; else PC PC + 1条件跳行指令3、寄存器位置位跳行(Skip if Bit in Register is Set)SBRS Rr, b ; 0r31, 0b 7操作:If Rr (b) =1, then PC PC + 2 (or 3) ; else PC PC + 1条件跳行指令4、I/O寄存器位清0跳行(Skip if Bit in I/O R

47、egister is Cleared)SBIC P, b ; 0P31, 0b 7操作:If I/O P (b) =0, then PC PC + 2 (or 3) ; else PC PC + 1条件跳行指令5、I/O寄存器位置位跳行(Skip if Bit in I/O Register is Set)SBIS P, b ; 0P31, 0b 7操作:If I/O P (b) =1, then PC PC + 2 (or 3) ; else PC PC + 13.4.3 子程序调用和返回指令1、相对调用(Relative Call to Subroutine)RCALL k ;-2Kk 2

48、K操作:STACK PC + 1,即(SP) PCL , SP SP1(SP) PCH , SP SP1 然后 PC (PC + 1) + k 3.4.3 子程序调用和返回指令2、间接调用(Indirect Call to Subroutine)ICALL操作: STACK PC + 1,PC Z(150) 3.4.3 子程序调用和返回指令3、长调用(Long Call to a Subroutine)CALL k ;0k 0LDI R16, 0XFF ; X0RJMP DONEPOSI: LDI R16, 0X01DONE: STS FUNC, R16HERE: RJMP HERE.EXIT例3 已知SRAM中BLOCK1和BLOCK2开始有两个4字节整数,编程相加并把结果存入BLOCK1开始的存储空间(低字节在前)例3程序如下.include “m8def.inc”.SET BLOCK1 = 0X0060.SET BLOCK2 = 0X0070LDI XL, LOW(BLOCK1)LDI XH, HIGH(BLOCK1)LDI YL, LOW(BLOCK2)LDI YH, HIGH(BLOCK2) LDIR17, 4;设

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论