深入iOS系统底层之程序中的汇编代码
标签可以看成是一个文件中的局部指针变量,对于数据段中定义的标签通常用来当做访问变量的地址,而对于代码段中定义的标签通常用来做指令跳转用。比如下面的代码:
有的时候还可以定义方向标签,方向标签只能是数字,然后可以在使用这些方向标签时,在方向标签后面带一个b表明跳转到当前指令前面定义的某个最近的方向标签,而方向标签后面带一个f表明跳转到当前指令后面定义的某个最近的方向标签。就比如下面演示的代码:
标签只是文件内地址偏移的别名,只能在定义的文件内部引用。要想让这个标签被外部引用和访问就需要将标签声明为符号。高级语言文件中定义的能被外部访问的函数和全局变量其实都是一个符号,不管是函数地址还是全局变量的内存地址,其实都是一个地址位置,而地址的别名则是可以用标签表示,因此要想将一个标签定义为外部可访问,就需要将标签名声明为符号。就如高级语言中的静态函数和静态变量以及全局函数和全局变量一样,汇编语言中的符号声明也有两种:
符号名要和标签名匹配。因为C语言的函数名称以及全局变量等符号在编译时生成的符号前面添加一个下划线_。所以在高级语言中的名称对应的真实符号都是带一个下划线前缀的,因此一般情况下我们在汇编语言中声明的符号和标签名最好带一个下划线。并且在其他高级语言的声明中不要使用这个下化线,就比如下面的例子:
同时在汇编代码中引用高级语言定义的符号时,也要多带上一个下划线前缀。 4.对齐 因为内存寻址访问的一些特性,要求我们的某些代码或者数据的存放地址必须是某个数字的倍数,也就是所谓的对齐。设置对齐的关键字如下:
5.宏定义 汇编语言也可以和C语言一样使用宏定义,来做一些代码复用处理。宏定义的语法如下:
(编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |