GNU风格 ARM汇编语法2
2024-08-23 03:32:34
、GNU汇编程序中的标号symbol(或label)
标号只能由a~z,A~Z,~,".",_等(由点、字母、数字、下划线等组成,除局部标号外,不能以数字开头)字符组成。
Symbol的本质:代表它所在的地址,因此也可以当作变量或者函数来使用。
1>段内标号的地址值在汇编时确定;
2>段外标号的地址值在连接时确定。 Symbol的分类:3类(依据标号的生成方式)。
<>基于PC的标号。基于PC的标号是位于目标指令前的标号或者程序中数据定义伪操作前的标号。
这种标号在汇编时将被处理成PC值加上(或减去)一个数字常量,常用于表示跳转指令”b”等的目标地址,或者代码段中所嵌入的少量数据。
<>基于寄存器的标号。基于寄存器的标号常用MAP和FIELD来定义,也可以用EQU来定义。
这种标号在汇编时将被处理成寄存器的值加上(或减去)一个数字常量,常用于访问数据段中的数据。
<>绝对地址。绝对地址是一个32位数据。它可以寻址的范围为[,-]即可以直接寻址整个内存空间。 特别说明:局部标号Symbol
局部标号主要在局部范围内使用,而且局部标号可以重复出现。
它由两部组成:开头是一个0-99直接的数字,后面紧接一个通常表示该局部变量作用范围的符号。局部变量的作用范围通常为当前段,也可以用ROUT来定义局部变量的作用范围。
1>局部变量定义的语法格式:N{routname}
N:为0~99之间的数字。
routname:当前局部范围的名称(为符号),通常为该变量作用范围的名称(用ROUT伪操作定义的)。
2>局部变量引用的语法格式:%{F|B}{A|T}N{routname}
%:表示引用操作
N:为局部变量的数字号
routname:为当前作用范围的名称(用ROUT伪操作定义的)
F:指示编译器只向前搜索
B:指示编译器只向后搜索
A:指示编译器搜索宏的所有嵌套层次
T:指示编译器搜索宏的当前层次 例:使用局部符号的例子,一段循环程序
:
subs r0, r0, # @每次循环使r0=r0-
bne 1F @跳转到1标号去执行
注意:
如果F和B都没有指定,编译器先向前搜索,再向后搜索
如果A和T都没有指定,编译器搜索所有从当前层次到宏的最高层次,比当前层次低的层次不再搜索。
如果指定了routname,编译器向前搜索最近的ROUT伪操作,若routname与该ROUT伪操作定义的名称不匹配,编译器报告错误,汇编失败。
最新文章
- 轻松掌握:JavaScript组合模式
- Atititcmd cli环境变量的调用设置与使用
- [bzoj1911][Apio2010]特别行动队
- c-free
- 2014 Super Training #2 C Robotruck --单调队列优化DP
- yii2购物车实现
- JavaScript插入节点
- 转载c#泛型 类型参数的约束(c#编程指南)
- java学习面向对象之封装
- Label 表达式绑定
- RTMP流媒体播放过程(转)
- 乐在其中设计模式(C#) - 观察者模式(Observer Pattern)
- Node.js API
- iOS开发打电话的功能
- PHP验证码类
- php 引入文件 include 和require
- vSphere在RedHat6.0上搭建Oracle 11g R2 RAC环境
- Jmeter之app性能测试(ios,android)
- PHP 环境搭建篇
- synchronized修饰方法和代码块的区别
热门文章
- Circular dependency issuse on cocoapods version(0.36.0) 全然解决方式(非降版本号)
- Tomcat 配置加密的服务器连接器
- 如何在 CentOS 7 中安装、配置和安全加固 FTP 服务
- JPA实体继承实体的映射策略
- Android API之android.os.Parcelable
- AjaxControlToolkit的使用
- js createElement appendChild createTextNode用法
- Centos5 下redmine的安装及配置
- ArchLinux安装 LXDE
- <;转>;字符编码笔记:ASCII,Unicode和UTF-8