中关村在线

软件

C语言嵌入汇编技巧

以下所述均为在GNU C语言中嵌入ARM汇编指令。

1、 所述嵌入汇编均指在GNU C语言中内嵌ARM汇编指令。

2、 两个参数的嵌套语句

3、 此类汇编适用于简单语句,参数限定输入输出格式如下所示。

4、 汇编语句与C语言之间的关联,主要通过上述asm声明中可选的输出操作数列表和输入操作数列表来实现。至于破坏列表的作用,将在后续内容中进行说明。

5、 将C语言的整型变量传入汇编,左移一位后,结果再传回另一个C语言整型变量。

6、 每个asm语句由冒号分为四个部分。

7、 将汇编指令置于第一部分的引号内。

8、 接下来是可选的输出操作数列表,位于冒号之后。每个条目由一对方括号包围的符号名构成,其后紧跟约束字符串,再后是圆括号及其括住的C语言变量。本例中仅包含一个这样的条目。

9、 冒号后为输入操作符列表,其语法与输入操作列表相同。

10、 通过换行、空格和C风格注释,可提升代码可读性。

11、 );

12、 代码中百分号后跟随的符号,对应方括号内相同操作符列表中的某一项。

13、 y代表第二部分的C变量,x代表第三部分的C变量。

14、 符号操作符拥有独立的命名空间,因此它们使用单独的符号表。这意味着无需担心所用符号名是否已在C代码中被占用。在早期C语言编程中,实现循环移位必须采用更为繁琐的写法。

15、 在汇编代码中,操作数通过%后接数字来引用,如%1表示第一个操作数,%2表示第二个,依此类推。尽管最新编译器仍支持此方式,但这种方式不利于代码的后期维护和阅读,容易造成混淆,降低程序可读性与可维护性。

16、 示例代码如下

17、 汇编代码文件以.s为扩展名

18、 编译指令:

19、 {

20、 }

21、 实现将首个输入参数进行编码转换的处理功能。

22、 将数据左移8位,与0x8000异或后复制至第三个参数位置。

23、 将首个参数指向的数据与0x8000进行异或运算,获取解码结果。

24、 将数据右移8位后复制到第三个参数中

展开全文
人赞过该文
内容纠错

相关电商优惠

评论

更多评论
还没有人评论~ 快来抢沙发吧~

读过此文的还读过

点击加载更多

内容相关产品

说点什么吧~ 0

发评论,赚金豆

收藏 0 分享
首页查报价问答论坛下载手机笔记本游戏硬件数码影音家用电器办公打印 更多

更多频道

频道导航
辅助工具