一起学IAR汇编,第二天————操作符 和 指令

现在开始我们学习汇编的操作符

与C的运算符类似,汇编也包含大部分C支持的运算符,并且优先级设定都相似。

  1. 下面列举汇编中特有的操作符,注意SFB的使用
  • BYTE1 例子: BYTE1 0xABCD –> 0xCD

  • BYTE2 例子: BYTE2 0x12345678 –> 0x56

  • BYTE3,BYTE4

  • DATA1 当前秒

  • DATA2 分

  • DATA3~DATA6

  • HIGH 获取16位的高8位

  • LOW 低8位

  • HWRD 获取32位的高16位

  • LWRD 低16位

  • SFB SFB(section [{+|-}offset]) 获取section的开头加减偏移之后的地址,其中section变量就是定义的SECTION的名字

  • SFE section的结尾

  • SIZEOF SIZEOF section .SIZEOF 大小就是SFE-SFB (offset=0)

  1. 指令(Page79)
    指令按功能可以分为多种,下面一一列举
  • Module control directives(模块控制
指令注释
name / program开始一个并定义一个module
end结束module定义 忽略后面的代码
rtmodelmodule link时的标识
PRESERVE8模块属性设置,表明这个模块需要栈8字节对齐
REQUIRE8模块属性设置,表明如果调用这个模块需要8字节对齐的栈

rtmodel作用详解, 格式:RTMODEL key, value
其中key和value都是字符串,当不同module中的rtmodel的key和value都一致的时候,表示这些模块不能link到一起。

  • Symbol control directives(Symbol控制
指令注释
EXTERN symbol导入一个外部的symbol
IMPORT symbol与extern一样
EXTWEAK symbol同上,但是symbol可以是空
PUBLIC symbol导出一个symbol
PUBWEAK symbol同上,但是可以重名覆盖
REQUIRE symbol链接时 包含定义这个symbol定义的文件
  • Mode control directives(模式控制
指令注释
arm /code32指示接下来的指令时32位arm指令,并且labels 的bit0 永远置0,来确保4字节对齐
code1616位thumb指令集,并且labels 的bit0 永远置1,确保2字节对齐
thumb根据cpu型号,可以时thumb-1 也可以是thumb-2
code代码段
data数据段

指令集切换需要跳转指令。
只有在code段的labels的bit0位是固定的,Data段的bit0是可以自由设定的。

-Section control directives(块控制

指令注释
ALIGN align对齐,2的align次幂
ALIGNRAM align对齐,2的align次幂 ,对齐方式是以指针累加
ALIGNROM align对齐,2的align次幂 ,对齐方式是内容填充0
EVEN对齐到偶地址
ODD对齐到奇地址
SECTION segment :type [:flag] [(align)]定义一个section,其中[]里面变量可选
RSEG segment :type [:flag] [(align)]SECTION 的别名
SECTION_TYPE type-expr {,flags-expr}设置section类型

type有下面几种:

  • CODE,CONST,DATA

flag有下面几种:

  • ROOT(默认)
  • NOROOT :表示如果linker没有用到这个section,就忽略它。
  • REORDER(默认),如果存在这个section就在这里面添加新的片段
  • NOREORDER ,直接创建一个新section

-Value assignment directives(变量赋值指令

指令注释
label ASSIGN value设定一个变量label,值=value
SET ,SETA,VAR同上
label EQU value设定一个常量 ,可以使用public 导出,extern导入
=同上
label DEFINE value同上

-Conditional assembly directives(条件汇编

IF,ELSE,ELSEIF,ENDIF 4个指令,与C类似

-Macro processing directives(宏处理

指令注释
name MACRO var1,var2…定义一个宏叫做name,包含变量var1,var2…
endm宏定义结束
REPT value循环value次
REPTC循环,并替代一个字符
REPTI循环,并以string代替
ENDR结束循环
EXITM退出宏 ,不能出现在循环里面
local symbol创建一个宏内的变量

如果有多个参数,那么用\1~\9 and \A-\Z表示其中的某一个
REPTC 和REPTI 区别见(Page 102~103)

  • Listing control directives(列表控制指令

  • 控制编译的某些信息的显示隐藏。

  • C-style preprocessor directives(C预定义指令
    IAR 汇编可以使用下列C风格的指令:
    在这里插入图片描述

  • Data definition or allocation directives(数据定义指令

指令注释
DC8,DCB8 BIT 常量
DC16,DCW16 BIT 常量
DC2424 BIT 常量
DC32,DCD32 BIT 常量
DF32,DF6432/64 浮点常量
DS8/DS value分配value个8bit数
DS16 value分配value个16bit数
DS24 value分配value个24bit数
DS32 value分配value个32bit数
  • Assembler control directives(汇编程序控制指令
指令注释
$fileinclude一个file,$必须是行的第一个字符
INCLUDE file同上
CASEOFF,CASEON禁用/启用 大小写敏感
radix value修改立即数的进制,默认10进制,可以用radix 16 改为16进制,但是改为10进制必须使用radix 0x0a
  • Function directives(功能指令

  • 未使用

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值