深入iOS系统底层之程序中的汇编代码
数据的定义类似C语言中变量的定义,汇编代码中也支持多种类型的数据定义。定义一个数据的语法如下:
一共有如下的数据类型: 数据类型的值可以是一个常量也可是一个表达式,也可以是一个标签符号。如果我们想给某个数据定义指定一个类似于变量的名称,则可以和标签来结合。比如:
如果要想在代码块中访问上面定义了标签名的变量,则可以采用如下指令:
7.函数的定义 汇编语言中并没有专门用于函数定义的关键字,汇编语言中只有代码块的定义,所有可执行的代码块都存放在代码段中。所谓函数调用其实就是调用函数代码对应的首地址。因此对于文件内的函数调用其实可以借助标签来完成,而其他文件对函数的调用则可以借助符号来完成。对于函数中的参数部分的处理则是按照函数调用参数传递的ABI规则来指定。 下面就是一个求两个参数和的加法函数在x86_64位体系结构下的实现:
8.指令的编写 关于在汇编语言中编写指令这里就不赘述了,否则一本书也说不完,大家可以参考相关的汇编代码的书籍即可。 9.伪条件语句 汇编语言有相应的进行比较和跳转的指令,但是我们仍然可以借助伪条件语句来使得我们的代码更加具有可读性。伪条件语句的语法如下:
10.CFI: 调用框架指令 这部分伪指令以.cfi开头。主要用来记录函数的帧栈信息和用于异常处理。具体的指令介绍请参考:blog.csdn.net/permike/art… 引用汇编代码文件中的符号 因为汇编代码源文件没有所谓的.h头文件声明。所以当你在其他文件中要想使用汇编语言中定义的函数或者全局变量时,可以在你的源代码文件的顶部进行符号使用的声明:
在高级语言中嵌入汇编代码 我们还可以在高级语言中嵌入汇编代码,嵌入的主要目的是为了优化代码的性能,还有一些高级语言完成不了能力比如获取当前执行指令的地址以及读取一些状态寄存器和特殊寄存器的值,还有一些场景甚至可以用汇编代码来解决高级语言需要用锁来解决的多线程的问题等等。 就可以很清楚的知道嵌入的规则了,这篇文章已经介绍得很仔细了。下面我将举3个具体的例子: 高级语言的变量作为嵌入汇编代码的输入输出
(编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |