博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GNU风格 ARM汇编语法2
阅读量:6689 次
发布时间:2019-06-25

本文共 1193 字,大约阅读时间需要 3 分钟。

2、GNU汇编程序中的标号symbol(或label)     标号只能由a~z,A~Z,0~9,".",_等(由点、字母、数字、下划线等组成,除局部标号外,不能以数字开头)字符组成。      Symbol的本质:代表它所在的地址,因此也可以当作变量或者函数来使用。       1>段内标号的地址值在汇编时确定;       2>段外标号的地址值在连接时确定。   Symbol的分类:3类(依据标号的生成方式)。    <1>基于PC的标号。基于PC的标号是位于目标指令前的标号或者程序中数据定义伪操作前的标号。       这种标号在汇编时将被处理成PC值加上(或减去)一个数字常量,常用于表示跳转指令”b”等的目标地址,或者代码段中所嵌入的少量数据。    <2>基于寄存器的标号。基于寄存器的标号常用MAP和FIELD来定义,也可以用EQU来定义。       这种标号在汇编时将被处理成寄存器的值加上(或减去)一个数字常量,常用于访问数据段中的数据。    <3>绝对地址。绝对地址是一个32位数据。它可以寻址的范围为[0,232-1]即可以直接寻址整个内存空间。   特别说明:局部标号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:指示编译器搜索宏的当前层次  例:使用局部符号的例子,一段循环程序  1:  subs r0, r0, #1 @每次循环使r0=r0-1  bne 1F      @跳转到1标号去执行   注意:  如果F和B都没有指定,编译器先向前搜索,再向后搜索  如果A和T都没有指定,编译器搜索所有从当前层次到宏的最高层次,比当前层次低的层次不再搜索。  如果指定了routname,编译器向前搜索最近的ROUT伪操作,若routname与该ROUT伪操作定义的名称不匹配,编译器报告错误,汇编失败。

 

转载地址:http://dezoo.baihongyu.com/

你可能感兴趣的文章
关于怎么实现前端页面中的前端的部分
查看>>
3-python中文编码问题个人总结
查看>>
转 - Unix目录结构的来历
查看>>
开发平台部署到sunflysp上
查看>>
我的友情链接
查看>>
小区WLAN无线网卡上面无信号,用测试软件搜不到信号处理办法
查看>>
saltstack管理四之pillar和grains
查看>>
2017年终总结
查看>>
Linux终端下 dstat 监控工具
查看>>
python爬虫
查看>>
[Thinking in JAVA] 前N章的一些小知识
查看>>
字体跨域问题【解决】
查看>>
bugzilla安装笔记
查看>>
My Python笔记
查看>>
C++一些标准模板容器简要介绍(1)
查看>>
Gradle依赖的统一管理
查看>>
我的友情链接
查看>>
Android SDK Managerr开发工具包离线打包 已下载4.1、4.0.3、4.0、2.3.3、1.6直接使用
查看>>
《Android开发从零开始》——32.单选复选控件学习
查看>>
Dell R730配置RAID及系统OS部署步骤
查看>>