arm7汇编中怎么使用c中的变量_一步步编写操作系统81 at&t内嵌汇编语法

本文介绍了如何在ARM7汇编中使用C语言的变量,详细解析了扩展内联汇编的output、input和clobber/modify三部分,阐述了C代码如何为内联汇编提供输入参数和存储输出结果,帮助读者更好地理解和应用内联汇编。
摘要由CSDN通过智能技术生成
e3933ea2bddbc53124af4d7189b3f4e5.png

内联汇编的格式也变得让人生畏了,感觉既不像C语言,也不像汇编语言,似乎是一种中间产物,不信您看:

asm [volatile] (“assembly code” : output : input : clobber/modify)

和前面的基本内联汇编相比,扩展内联汇编在圆括号中变成了4部分,多了output,input,和clobber/modify三项。其中的每一部分都可以省略,甚至包括assembly code。省略的部分要保留冒号分隔符来占位,如果省略的是后面的一个或多个连续的部分,分隔符也不用保留,比如省略了clobber/modify,不需要保留input后面的冒号。

assembly code:还是用户写入的汇编指令,和基本内联汇编一样。

汇编代码的运行是需要输入参数的,其运行之后也可产出结果。

在C代码中内嵌汇编的目的是让汇编帮助C完成某些功能,所以C代码就要为其提供参数和用于存放其输出结果的空间。这样一来,内联汇编代码类似机器,C代码类似人。机器要运行,人就要为机器提供加工的源材料(input),机器运行后,将生产出来的成果放到人能够得着的地方(output),人才能获取机器的输出结果。input和output正是C为汇编提供输入参数和存储其输出的部分,这是汇编与c交互的关键,我们之前的讨论就通过这两项解决。

output:output用来指定汇编代码的数据如何输出给C代码使用。内嵌的汇编指令运行结束后,如果想将运行结果存储到c变量中,就用此项指定输出的位置。output中每个操作数的格式为:

操作数修饰符 约束名”(C变量名)

其中的引号和圆括号不能少,操作数修饰符通常为等号’=’。多个操作数之间用逗号’,’分隔。

input:input用来指定C中数据如何输入给汇编使用。要想让汇编使用c中的变量作为参数,就要在此指定。input中每个操作数的格式为:

”[操作数修饰符] 约束名”(C变量名)

其中的引号和圆括号不能少,操作数修饰符为可选项。多个操作数之间用逗号’,’分隔。

单独强调一下,以上的output()input()括号中的是C代码中的变量,output(c变量)input(c变量)就像c语言中的函数,将C变量(值或变量地址)转换成汇编代码的操作数。

clobber/modify:汇编代码执行后会破坏一些内存或寄存器资源,通过此项通知编译器,可能造成寄存器或内存数据的破坏,这样gcc就知道哪些寄存器或内存需要提前保护起来,后面会展开细说。

assembly code中引用的所有操作数其实是经过gcc转换后的复本,“原件”都在output和input括号中的c变量,后面通过各种例子您就明白了。

周末愉快,【再续】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值