文档详情

dpj第三章(avr指令系统)

今***
实名认证
店铺
PPT
227KB
约25页
文档ID:106879373
dpj第三章(avr指令系统)_第1页
1/25

1,第三章 AVR单片机指令系统,,基本概念:指令系统、机器语言指令、汇编语言指令,AVR单片机指令系统是RISC结构的精简指令集AVR单片机目前用得比较多器件有118条指令大多数指令的执行时间为单个时钟周期主要内容:指令格式、寻址方式、伪指令、具体指令的分类讲解指令分类: 算术和逻辑指令(25) ;转移指令(31) ;数据传送指令(31) ; 位指令和位测试指令 (31)能对位、半字节、字节和双字节数据进行各种操作2,§3. 1 指令格式,,指令的组成:操作码和操作数,如果是两个操作数,目的操作数在前,源操作数在后例:Mov r17,r18; r17← r18,汇编语言源文件是由指令和伪指令组成的ASCII字符文件 一、语句(程序输入行)的四种形式:,(1)【标号】伪指令【操作数】【注释】 (2)【标号】指令【操作数】【注释】 (3)注释 (4)空行,括号内的项是任选的,3,语句行举例:,,Label:.EQU Var1=100 ;置Var1 等于100 伪指令 .EQU Var2=200 ;置Var2 等于200 here: rjmp here ;上一条为无限循环指令,二、常用符号,Rd:R0~R31 或R16~R31(取决于指令); Rr:R0~R31; b 、S 、p 、 K、 k、 q:常数或常数表达式;,4,§3. 2 寻址方式,,概念:指令给出参与运算的数据的方式。

主要是:寄存器、I/O寄存器、数据存储器、程序存储器,转移指令目标地址等的计算还有立即数),AVR 单片机指令操作数的寻址方式有以下几种:单寄存器直接寻址、 双寄存器直接寻址、I/O寄存器直接寻址、数据存储器直接寻址、数据存储器间接寻址、带后增量的数据存储器间接寻址、带预减量的数据存储器间接寻址、带位移的数据存储器间接寻址、从程序存储器取常数寻址、程序间接寻址和程序相对寻址5,AVR 单片机寻址方式,,立即数寻址; 寄存器寻址:单寄存器直接寻址、 双寄存器直接寻址; I/O寄存器:直接寻址; 数据存储器寻址:直接寻址、间接寻址、带后增量的间接寻址、带预减量的间接寻址、带位移的间接寻址; 从程序存储器取常数寻址; 转移指令目标地址的寻址:程序间接寻址、程序相对寻址6,一、单寄存器直接寻址,,由指令指出一个寄存器的内容作为操作数,机器码中给出该寄存器的直接地址,这种寻址方式称为单寄存器直接寻址 例:INC Rd ;,操作:Rd←Rd+1 ; 机器码:1001 010d dddd 0011 可对R0~R31中任意寄存器增1,不同寄存器只需改变机器码中5位地址码,若INC R5,则机器码中的5个d取00101,机器码即为$9453。

7,二、双寄存器直接寻址,,由指令指出两个寄存器的内容作为操作数,机器码中给出该两个寄存器的直接地址,这种寻址方式称为双寄存器直接寻址 例:ADD Rd , Rr ;,操作:Rd←Rd+Rr ; 机器码:0000 11rd dddd rrrr 可对R0~R31中任意两个寄存器相加,这两个寄存器的各5位地址包含在机器码中8,三、I/O寄存器直接寻址,,指令可以直接对I/O 寄存器进行操作,I/O 寄存器的直接地址包含在机器码中 例:IN Rd, P ; P 是 I/O 寄存器的直接地址操作:Rd←P ; 机器码:1001 0ppd dddd pppp 64个I/O寄存器,6位地址P 32个寄存器,5位地址d 例如:IN R5,$3E;(即把SPH输入到R5中) 机器码为$B65C9,四、数据存储器直接寻址,,根据SRAM存储器的直接地址( 16位地址)存取数据,为双字指令例:LDS Rd, K ; K是SRAM存储器的直接地址 操作:Rd←(K) ; 机器码:1001 000d dddd 0000 KKKK KKKK KKKK KKKK 例如:LDS R18,$100 ;(即把SRAM地址为$100的内容传送到R18中), 机器码:$9120 0100,10,五、数据存储器间接寻址,,由某一个16位寄存器的内容作为操作数的地址,该寻址方式称为寄存器间接寻址,用于对SRAM存储器存取操作,称为数据存储器间接寻址。

操作数的地址在变址寄存器X、Y或Z中 例:LD Rd,Y ; 操作:Rd ←(Y),把以Y为指针的SRAM的内容送Rd; 机器码:1000 000d dddd 1000 例如:LD R16,Y ;(设Y=$067,即把SRAM地址为$67的内容传送到R16中);机器码为$810811,六、带后增量的数据存储器间接寻址,,类似数据存储器间接寻址方式,但寄存器X、Y或Z的内容在操作后被加1,而操作数的地址为寄存器增量之前的内容这种寻址方式特别适用于访问矩阵查表等 例:LD Rd,Y+ ; 操作:Rd←(Y),Y=Y+1,先把以Y为指针的SRAM的内再容送Rd,再把Y增1 机器码:1001 000d dddd 1001; LD R16,Y+;(设Y=$067;即把SRAM地址为$67的内容传送到R16中且Y=$068) 机器码为$910912,七、带预减量数据存储器间接寻址,,类似数据存储器间接寻址,但寄存器X、Y或Z 的内容在操作之前先被减1,减1后的内容为操作数的地址这种寻址方式特别适用于访问矩阵查表等应用 例:LD Rd,-Y ; 操作: Y=Y-1,Rd←(Y),先把Y减1,再把以Y为指针的SRAM的内再容送Rd; 机器码:1001 000d dddd 1010 LD R16,-Y;(设Y=$067,即先把Y减1,Y=$066,再把SRAM地址为$066的内容传送到R16中) 。

机器码:$910A 13,八、带位移的数据存储器间接寻址,,带位移的数据存储器间接寻址方式是利用变址寄存器Y或Z及指令字中的位移量q共同决定被存取SRAM存储器的地址操作数的地址由Y或Z寄存器的内容加上机器码中给出的位移量q 例:LDD Rd,Y+q ; 操作: Rd←(Y+q),其中0≤q≤63, 即把以Y+q为指针的SRAM的内再容送Rd,而Y寄存器的内容不变 机器码:10q0 0d dddd 1q14,九、从程序存储器取常数寻址,,只有一条指令LPM,也称查表指令 程序存储器中存放常数字节的地址由寄存器Z的内容确定Z寄存器的高15位用于选择字地址,而Z寄存器的最低位D0用于存放字地址的高低字节若最低位为0,则选择低字节;若最低位为1,则选择高字节 例:LPM ; 操作: R0←(Z),既把以Z为指针的程序存储器的内容送R0若Z=$0100,即把地址为$0080的程序存储器的低字节内容送R0,若Z=$0101,即把地址为$0080的程序存储器的高字节内容送R0先了解一下,指令部分详细讲解15,十、程序间接寻址,,程序间接寻址方式中使用Z寄存器存放要执行程序的地址,程序转到Z寄存器的内容指定的地址处继续执行,即用寄存器Z的内容代替PC的值。

例:IJMP ; 操作: PC←Z,既把以Z的内容送程序计数器若Z=$0100,即把$0100送程序计数器, 程序从$0100开始执行16,十一、程序相对寻址,,程序相对寻址方式在机器码中包含了相对地址K, 例:RJMP k; 操作: PC←PC+1+k –2048≤k≤2047 ,执行程序时,PC首先自动加1,再加k即执行该指令时程序计数器自动加1后又再跳k步 机器码:1100 kkkk kkkk kkkk,17,§3. 3 伪指令和表达式,,汇编器提供一些伪指令,伪指令并不是指令系统中的指令,而是用于:,调整存储器中程序的位置; 定义宏、定义一些符号; 初始化存储器等全部伪指令如下:,18,一、存储器类型定义伪指令(不带参数),,1、CSEG——代码段 表明下面是代码段语法:.CSEG,2、DSEG——数据段 表明下面是数据段语法: .DSEG,3、ESEG——E2PROM 段 表明下面是E2PROM段语法: .ESEG,说明: 一个汇编文件包含若干个代码段,若干个数据段 ,若干个E2PROM 段 ,在汇编时,它们按类型的不同被分别连接成一个代码段,一个数据段,一个E2PROM段。

19,二、ORG——设置程序、数据在段中的起始位置,,语法: .ORG 表达式 ;,表达式的值为定位计数器的值---绝对值(无符号数)注意:程序存储器定位计数器--按字计数; 而E2PROM和SRAM 定位计数器--按字节计数缺省值:代码段:0;数据段:32; E2PROM 段 :0如果ORG伪指令放在数据段,则设置SRAM定位计数器 如果该伪指令放在代码段,则设置程序存储器计数器 如果该伪指令放在E2PROM段,则设置E2PROM定位计数器20,三、数据定义伪指令,,1.BYTE——在SRAM数据区定义字节 语法:LABEL:.BYTE 表达式(表),2. DB——在程序存储器或E2区中定义字节常数 语法:LABEL: .DB 表达式(表) tab:.db $3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f ;七段码表,3、 DW——在程序存储器或E2区中定义字常数 语法:LABEL: .DW 表达式(表),说明: 多个表达式之间用“,”分隔,若为负则用补码表示21,四、符号定义伪指令,,1、DEF——设置寄存器的符号名 语法:.DEF 符号=寄存器,2、EQU——设置一个符号相等于一个表达式 语法: .EQU 标号=表达式 ; 不能重新赋值,3、SET——设置一个与表达式相等的符号 语法: .SET 标号 =表达式;可重新赋值,; I/O 寄存器的定义 .EQU SREG = $3f . EQU SPH = $3e . EQU SPL = $3d,.def XL = r26 .def XH = r27,22,五、定义被汇编的器件,,DEVICE----定义被汇编的器件,语法: .DEVICE AT90S8515 | AT90S8535 等。

例如:.device AT90S8535,六、 INCLUDE——包括另外的文件,语法: .INCLUDE “文件名”,例如 .include “8535def.inc”,23,表达式,,一、操作数,(1) 用户定义的标号,该标号给出了放置标号位置的定位计数器的值 (2) 用户用SET 伪指令定义的变量 (3) 用户用EQU 伪指令定义的常数4) PC:程序存储器定位计数器的当前值5) 整数常数包括下列几种形式:,十进制(缺省值):10,255 十六进制数:0x0a,$0a,0xff,$0ff ,$ff 二进制数:0b00001010,0b11111111,汇编语句中常用到表达式,表达式由操作数、运算符及函数组成24,表达式--函 数,,1.LOW(表达式):返回一个表达式的低字节 2.HIGH(表达式):返回一个表达式的第二个字节 3.BYTE2(表达式):与HIGH 函数相同 4.BYTE3(表达式):返回一个表达式的第三个字节 5.BYTE4(表达式):返回一个表达式的第四个字节 6.LWRD(表达式):返回一个表达式的0~15位 7.HWRD(表达式):返回一个表达式的16~31位 8.PAGE(表达式):返回一个表达式的16~21位 9.EXP2(表达式):返回2的(表达式)次幂 10.LOG2(表达式):返回LOG2(表达式)的整数部分,25,表达式--运算符,,1、逻辑非 ! 2、逐位非 ~ 3、负号 — 4、乘法 * 5、除法 / 6、加法 + 7、减法 - 8、左移 << 9、右移 >> 10、小于 <,11、小于等于 <= 12、大于 > 13、大于等于 >= 14、等于 == 15、不等于 != 16、逐位与 & 17、逐位异或 ∧ 18、逐。

下载提示
相似文档
正为您匹配相似的精品文档