arm蛋疼汇编 part8 -- 汇编 c 谁调用谁?

本文介绍了一个具体的C语言与汇编语言交互的例子,详细展示了如何通过定义函数指针调用不同语言编写的函数,并实现了从C代码调用汇编代码及从汇编代码调用C代码的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今晚学校网络真无法忍受了  哎~

只能直接上代码了:
makefile:

 

 

这里链接只能使用ld   如果使用gcc连接的话  会链接ctr*.o文件   提示找不到main函数

如下:

 

test2.c:

test.S:

执行结果:

 

 

*说明一下:汇编中其实没有函数的概念  所有的都是标号  不管是常量标号还是函数标号 在连接的时候都是等同的   所以相互调用的时候应该注意函数与变量 常量的区别     不然可能会出现编译链接正常  但是执行时却出错的冏像

### 关于ARM汇编指令集的手册和文档 对于学习和开发基于ARM架构的应用程序来说,了解其汇编指令集是非常重要的。以下是关于如何获取ARM汇编指令集相关手册或文档的信息: #### 官方资源 官方发布的文档是最权威的学习材料之一。可以通过访问 **ARM官方网站** 下载最新的技术参考手册和技术文档。这些文档通常包括详细的寄存器描述、指令格式以及各种模式下的操作说明。 - ARM Architecture Reference Manual (ARMv8-A): 这份手册涵盖了所有的ARM v8体系结构细节,适合希望深入理解现代64位ARM处理器的人士[^1]。 ```bash wget https://developer.arm.com/-/media/Files/pdf/arm-reference-manual.pdf ``` #### 社区与第三方资料 除了官方文档外,还有许多社区维护的指南可以帮助开发者更快地上手: - **GNU Assembler (GAS)** 文档提供了有关使用GCC工具链编写内联汇编的具体指导[^2]。 - 对于THUMB指令集的支持情况及其局限性也有专门章节讨论[^3]。 另外一些常用的伪操作符如`.align`, `.ascii`等也能够在特定场景下辅助完成复杂的编码任务[^4]. 下面给出一个简单的例子来展示如何利用PC相对寻址加载字符串地址并调用函数: ```asm .section .text .globl _start _start: 1: auipc a0, %pcrel_hi(msg) # Load high part of 'msg' address into register a0. addi a0, a0, %pcrel_lo(1b) # Adjust with low offset to complete loading process. jal ra, puts # Call external function `puts`. 2: j 2b # Jump back creating infinite loop. .section .rodata msg: .string "Hello World\n" ``` 此片段展示了通过RISC-V风格语法实现基本I/O功能的方法[^5].尽管这里采用的是RISCV样式的代码演示而非严格意义上的ARM汇编,但它同样适用于解释概念性的知识点迁移过程。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值