AVR的指令(第七部分 汇编系统相关)

2004天前 · AVR单片机 · 446次阅读

汇编语言语句格式

汇编语言程序是由一系列汇编语句组成的。AVR的汇编语句的标准格式有以下4种:

  • [标号:]伪指令[操作数][;注释]
  • [标号:]指令[操作数][;注释]
  • [;注释]
  • 空行

括号部分表示可以缺省

  1. 标号。标号是语句地址的标记符号,用于引导对该语句的访问和定位。使用标号的目的是为了跳转和分支指令,以及在程序存储器、数据存储器SRAM和EEPROM中定义变量名。

    • 标号一般由ASCII字符组成,第一个字符为字母;
    • 同一标号在一个独立的程序中只能定义一次;
    • 不能使用汇编语言中已定义的符号(保留字),如指令字、寄存器名、伪指令等等。
  2. 伪指令。伪指令不属于CPU指令集,编译时并不产生实际的目标机器操作代码,只是用于在汇编程序中对地址、寄存器、数据、常量等进行定义说明,以及对编译过程进行某种控制。
  3. 指令。指令是汇编程序中主要的部分,汇编程序中使用AVR指令集中的全部指令。
  4. 操作数。集指令操作时所需要的数据或地址。就是指令。操作时所需要的数据和地址。汇编程序完全支持指令系统所定义的操作数格式。但指令系统采用的操作数格式通常为数字形式,在编写程序时使用起来不太方便,因此,在编译器的支持下,可以使用多种形式的操作数,如数字、标识符、表达式等。
  5. 注释。注释部分仅用于对程序和语句进行说明,帮助程序设计人员阅读、理解和修改程序。注释内容长度不限,换行时也需要分号。
  6. 其他字符。在汇编语句中,“;”用于标号之后;空格用于指令字和操作数的分隔;指令有两个操作数时用“,”分隔两个操作数;“;”用于注释之前;“[]”中的内容表示可选项。

汇编器伪指令

AVR汇编系统使用的伪指令有18条:

序号伪指令说明
1BYTE在RAM中定义预留存储单元
2CSEG声明代码段
3DB定义字节常数
4DEF定义寄存器富符号名
5DEVICE指定为何器件生成汇编代码
6DSEG声明数据段
7DW定义字常数
8EQU定义标识符常量
9ESEG声明EEPROM段
10EXIT退出文件
11INCLUDE包含指定的文件
12MACRO宏定义开始
13ENDMACRO宏定义结束
14LISTMAC列表宏表达式
15LIST列表文件生成允许器
16NOLIST关闭列表文件生成
17ORG设置程序起始位置
18SET赋值给标识符

表达式

  • 操作数

    • 用户定义的标号,该标号给出了放置标号位置的定位计数器的值。
    • 用户用SET伪指令定义的变量
    • 用户用EQU伪指令定义的常数
    • 整数常数(比如十进制、十六进制、二进制数)
    • PC——程序存储器定位计数器当前的值
  • 函数

    • LOW(表达式) 返回一个表达式值的最低字节
    • HIGH(表达式) 返回一个表达式值的第2个字节
    • BYTE2(表达式) 与HIGH函数相同
    • BYTE3(表达式) 返回一个表达式值的第3个字节
    • BYTE4(表达式) 返回一个表达式值的第4个字节
    • LWRD(表达式) 返回一个表达式值的0~15位
    • HWRD(表达式) 返回一个表达式值的16~31位
    • PAGE(表达式) 返回一个表达式值的16~21位
    • EXP2(表达式) 返回一个表达式值2次幂的值
    • LOG2(表达式) 返回log2(表达式值)的整数部分
  • 运算符

部分运算符如下表,优先级数越高的运算符,其优先级也越高,表达式可以用小括号括起来,并且与括号外其他任意的表达式再组合成表达式。

序号运算符名称优先级说明
1!逻辑非14一元运算符,表达式是0返回1;表达式是返回0
2~逐位非14一元运算符,将表达式的值按位取反
3-负号14一元运算符,使表达式为算术负
4*乘法13二进制运算符,两个表达式相乘
5/除法13二进制运算符,左边表达式除以右边表达式,得整数的商值
6+加法12二进制运算符,两个表达式相加
7-减法12二进制运算符,左边表达式减去右边表达式
8<<左移11二进制运算符,左边表达式值左移右边表达式所给出的次数
9>>右移11二进制运算符,左边表达式值右移右边表达式所给出的次数
10<小于10二进制运算符,左边带符号表达式值小于右边带符号表达式值,则为1;否则为0
11<=小于等于10二进制运算符,左边带符号表达式值小于或等于右边带符号表达式值,则为1;否则为0
12>大于10二进制运算符,左边带符号表达式值大于右边带符号表达式值,则为1;否则为0
13>=大于等于10二进制运算符,左边带符号表达式值大于或等于右边带符号表达式值,则为1;否则为0
14==等于9二进制运算符,左边带符号表达式值等于右边带符号表达式值,则为1;否则为0
15!=不等于9二进制运算符,左边带符号表达式值不等于右边带符号表达式值,则为1;否则为0
16&逐位与8二进制运算符,两个表达式之间逐位与
17^逐位异或7二进制运算符,两个表达式之间逐位异或
18|逐位或6二进制运算符,两个表达式之间逐位或
19&&逻辑与5二进制运算符,两个表达式之间逻辑与,全非0则为1;否则为0
20||逻辑或4二进制运算符,两个表达式之间逻辑或,非0则为1;全0则为0

器件定义头文件m16def.inc

略...

👍 0

none

最后修改于2004天前

评论

贴吧 狗头 原神 小黄脸
收起

贴吧

狗头

原神

小黄脸

目录

avatar

未末

迷失

126

文章数

275

评论数

7

分类