ARM汇编语言中的符号

news/2024/11/15 14:47:55/
  • 在汇编语言程序设计中,经常使用各种符号代替地址(addresses)、变量(variables)和常量(constants)等,以增加程序的灵活性和可读性。尽管符号的命名由编程者决定,但并不是任意的,必须遵循以下的约定。
  • 符号区分大小写,同名的大小写符号会被编译器认为是两个不同的符号。[插图] 符号在其作用范围内必须唯一。
  • 自定义的符号名不能与系统的保留字相同。其中保留字包括系统内部变量(built-in variable)和系统预定义(predefined symbol)的符号。
  • 符号名不应与指令或伪指令同名。如果要使用和指令或伪指令同名的符号要用双竖杠“||”将其括起来,如“||ASSERT||”。
  • 局部标号以数字开头,其他的符号都不能以数字开头。

(1)变量(variable)

(1)变量(variable)

程序中的变量是指其值在程序的运行过程中可以改变的量。ARM(Thumb)汇编程序所支持的变量有三种。

① 数字变量(numeric)。数字变量用于在程序的运行中保存数字值,但注意数字值的大小不应超出数字变量所能表示的范围。

② 逻辑变量(logical)。逻辑变量用于在程序的运行中保存逻辑值,逻辑值只有两种取值情况:真({TURE})或假({FALSE})。

③ 字符串变量(string)。字符串变量用于在程序的运行中保存一个字符串,但注意字符串的长度不应超出字符串变量所能表示的范围。

在ARM(Thumb)汇编语言程序设计中,可使用GBLA、GBLL、GBLS伪指令声明全局变量,使用LCLA、LCLL、LCLS伪指令声明局部变量,并可使用SETA、SETL和SETS对其进行初始化。

(2)常量(constants)

程序中的常量是指其值在程序的运行过程中不能被改变的量。ARM(Thumb)汇编程序所支持的常量有数字常量、逻辑常量和字符串常量。

数字常量一般为32位的整数,当作为无符号数时,其取值范围为0~232-1,当作为有符号数时,其取值范围为-231~231-1。汇编器认为-n和232-n是相等的。对于关系操作,如比较两个数的大小,汇编器将其操作数看做无符号的数。也就是说“0>-1”,对汇编器来说取值为“假({FLASE})”。

逻辑常量只有两种取值情况:真或假。

字符串常量为一个固定的字符串,一般用于程序运行时的信息提示。

(3)程序中的变量代换

汇编语言中的变量可以作为一整行出现在汇编程序中,也可以作为行的一部分使用。

如果在数字变量前面有一个代换操作符“$”,编译器会将该数字变量的值转换为十六进制的字符串,并将该十六进制的字符串代换“$”后的数字变量。

如果在逻辑变量前面有一个代换操作符“$”,编译器会将该逻辑变量代换为它的取值(真或假)。

如果在字符串变量前面有一个代换操作符“$”,编译器会将该字符串变量的值代换“$”后的字符串变量。

如果程序中需要字符“$”,则可以用“$$”来表示。汇编器将不进行变量替换,而是将“$$”作为“$”。

下面的两个例子说明了变量替换的过程。

          ; 直接的变量替换GBLS    add4ff;add4ff  SETS   "ADD  r4,r4,#0xFF"   ; 给变量add4ff赋值$add4ff.00                 ; 引用变量; codesADD  r4,r4,#0xFF00

(4)程序标号(label)

在ARM汇编中,标号代表一个地址,段内标号的地址在汇编时确定,而段外标号地址值在链接时确定。根据标号的生成方式,可以有以下三种。

① 程序相关标号(Program-relative labels)。程序相关标号指位于目标指令前的标号或程序中的数据定义伪操作前的标号。这种标号在汇编时将被处理成PC值加上或减去一个数字常量。它常用于表示跳转指令的目标地址。

② 寄存器相关地址(Register-relative labels)。这种标号在汇编时将被处理成寄存器的值加上或减去一个数字常量。它常被用于访问位于数据段中的数据。这种基于寄存器的标号通常用MAP和FIELD伪操作定义,也可以用EQU伪操作定义。

③ 绝对地址(Absolute address)。绝对地址是一个32位的数字量,使用它可以直接寻址整个内存空间


http://www.ppmy.cn/news/696664.html

相关文章

修改系统默认屏幕显示方向横屏或竖屏

在源码frameworks\base\core\java\android\view目录下的windowmanager.java里。 /** * Specific orientation value for a window. * May be any of the same values allowed * for {link android.content.pm.ActivityInfo#screenOrientation}. * If not set, a defa…

强制竖屏横屏

默认情况下,app会随着手机方向的改变进行屏幕切换,手机横向摆放的时候,app屏幕就会切换到横屏,反之切换到竖屏,但是app是一般都是根据竖屏设计的,一旦切换到横屏,布局就会乱掉,所以没…

计算机桌面倒过来了按什么恢复快,win10电脑屏幕倒过来了怎么办

我们现在的日常生活、工作和学习都离不开用电脑,电脑也的确方便了我们的生活,另外也有很好的娱乐休闲作用。我们的电脑有很多按键,但我们通常不知道有什么用,可能一不小心就误按了什么,导致很难恢复。那么电脑屏幕的画…

横竖屏的几种方法

1.媒体查询 media screen and (orientation: portrait){ //竖屏状态下 }media screen and (orientation: landscape) { //横屏状态下 }通过link 实现横竖屏不同的css <link rel"stylesheet" media"all and (orientation:portrait)" href"p…

[转载]电脑屏幕倒过来该怎么办?

不错支持&#xff01; 原文地址&#xff1a;电脑屏幕倒过来该怎么办&#xff1f; 作者&#xff1a;Allen 电脑屏幕倒过来该怎么办 提供以下两种解决方案&#xff1a; 1.桌面--属性--设置--高级--选择你显卡的那一项,然后图形属性--旋转--180度就可以了&#xff1b; 2.一般pc支持…

Android屏幕旋转-横屏竖屏切换

刚实现了App内手机横/竖放置时&#xff0c;屏幕横/竖屏的切换。记录一下中间需要的关键信息和实现过程。 开门见山的说&#xff0c;实现屏幕自动/手动旋转的方式有两种&#xff1a; 一种是在工程的代码中定义&#xff0c;这种方式在横竖屏切换时执行的操作是&#xff1a;销毁当…

横屏竖屏转换

在App Store上的大部分视频播放App中&#xff0c;都实现了竖屏小屏播放以显示更多相关信息&#xff0c;横屏切换到全屏播放&#xff0c;这样的交互显得优雅而大方。最近项目里有个这样的需求&#xff0c;为全屏视频播放加上竖屏模式。下面&#xff0c;让我们一起来实现这个需求…

横屏竖屏切换

当用N85、N95的时候&#xff0c;可以横屏竖屏切换。当切换的时候&#xff0c;就要把程序中的控件位置、大小重新计算&#xff0c;重新画了。 其实也没有什么困难的。 1.这根据原始屏幕(240*320)的屏幕计算坐标。当横屏竖屏切换的时候&#xff0c;可以用下面的公式进行自动的拉…