【2015-02-11】《RealView编译工具开发指南》摘录: C和汇编语言互相调用
[历史归档]本文原发布于 cstriker1407.info 个人博客内容为历史存档仅供参考。发布时间2015-02-11 标题《RealView编译工具开发指南》摘录 C和汇编语言互相调用分类操作系统 / ARM 标签ARM《RealView编译工具开发指南》摘录 C和汇编语言互相调用备注4.2. 在汇编代码中访问 C 全局变量Example 4.1. 访问全局变量4.4. C、C 和 ARM 汇编语言交叉调用4.4.3. 语言交叉调用的示例在 C 中调用汇编语言在汇编语言中调用 C备注1 本部分文档摘录自ARM网站【 http://infocenter.arm.com/help/index.jsp?topic/com.arm.doc.dui0203ic/index.html 】,版权归属于ARM。2 作者只摘录了部分内容这里主要是C和汇编相互调用全面详细的内容清参考ARM网址。4.2. 在汇编代码中访问 C 全局变量全局变量只能通过地址间接访问。 要访问全局变量请使用 IMPORT 指令执行导入然后将地址加载到寄存器中。 根据变量的类型可以使用加载和存储指令来访问全局变量。例如对于 unsigned 变量LDRB/STRB 用于 charLDRH/STRH 用于 shortLDR/STR 用于 int对于 signed 变量请使用等效的有符号指令如 LDRSB 和 LDRSH。使用 LDM 和 STM 指令可以将少于 8 个字的小型结构作为整体进行访问。 可以使用适当类型的加载和存储指令来访问结构的单个成员。 为了访问成员必须知道该成员从结构起始地址算起的偏移量。Example 4.1 将整型全局变量 globvar 的地址加载到 R1将该地址中包含的值加载到 R0将它与 2 相加然后将新值存回 globvar 中。Example 4.1. 访问全局变量PRESERVE8 AREA globals,CODE,READONLY EXPORT asmsubroutine IMPORT globvar asmsubroutine LDR R1, globvar ; read address of globvar into R1 LDR R0, [R1] ; load value of globvar ADD R0, R0, #2 STR R0, [R1] ; store new value into globvar BX lr END4.4. C、C 和 ARM 汇编语言交叉调用本节提供一些示例帮助您在 C 中调用 C 和汇编语言代码以及在 C 和汇编语言中调用 C 代码 还介绍调用约定和数据类型。只要遵循 ARM 体系结构的过程调用标准 (AAPCS)就可以混合调用 C、C 和汇编语言例程。 有关详细信息请参阅 install_directory\Documentation\Specifications… 中的 AAPCS 规范 aapcs.pdf。4.4.3. 语言交叉调用的示例在 C 中调用汇编语言Example 4.4 和Example 4.5 介绍的 C 程序调用了汇编语言子例程将一个字符串复制到另一个字符串之前。Example 4.4. 在 C 中调用汇编语言#includestdio.hexternvoidstrcopy(char*d,constchar*s);intmain(){constchar*srcstrFirst string - source ;chardststr[]Second string - destination ;/* dststr is an array since we’re going to change it */printf(Before copying:);printf(%s%s ,srcstr,dststr);strcopy(dststr,srcstr);printf(After copying:);printf(%s%s ,srcstr,dststr);return(0);}Example 4.5. 汇编语言字符串复制子例程PRESERVE8 AREA SCopy, CODE, READONLY EXPORT strcopy strcopy ; R0 points to destination string. ; R1 points to source string. LDRB R2, [R1],#1 ; Load byte and update address. STRB R2, [R0],#1 ; Store byte and update address. CMP R2, #0 ; Check for null terminator. BNE strcopy ; Keep going if not. BX lr ; Return. ENDExample 4.4 位于示例目录 …\asm 中文件名为 strtest.c 和 scopy.s。请按以下步骤在命令行生成该示例键入 armasm --debug scopy.s 编译汇编语言源代码。键入 armcc -c --debug strtest.c 编译 C 源代码。键入 armlink strtest.o scopy.o -o strtest 链接对象代码。通过对相应调试目标使用兼容调试器来运行映像。在汇编语言中调用 CExample 4.6 和Example 4.7 演示如何在汇编语言中调用 C。Example 4.6. 定义 C 函数intg(inta,intb,intc,intd,inte){returnabcde;}Example 4.7. 汇编语言调用; int f(int i) { return g(i, 2*i, 3*i, 4*i, 5*i); } PRESERVE8 EXPORT f AREA f, CODE, READONLY IMPORT g ; i is in R0 STR lr, ! ; preserve lr ADD R1, R0, R0 ; compute 2*i (2nd param) ADD R2, R1, R0 ; compute 3*i (3rd param) ADD R3, R1, R2 ; compute 5*i STR R3, ! ; 5th param on stack ADD R3, R1, R1 ; compute 4*i (4th param) BL g ; branch to C function ADD sp, sp, #4 ; remove 5th param LDR pc, , #4 ; return END

相关新闻

【2015-02-27】centos修改ssh端口

【2015-02-27】centos修改ssh端口

[历史归档] 本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。 发布时间: 2015-02-27 | 标题:centos修改ssh端口 | 分类: 操作系统 / linux | 标签&#xf…

2026/8/26 14:24:02 阅读更多 →
P1629 邮递员送信【洛谷算法习题】

P1629 邮递员送信【洛谷算法习题】

P1629 邮递员送信 网页链接 P1629 邮递员送信 题目描述 有一个邮递员要送东西,邮局在节点 111。他总共要送 n−1n-1n−1 样东西,其目的地分别是节点 222 到节点 nnn。由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共…

2026/8/26 19:32:50 阅读更多 →
2026年印度名义雇主EOR业务推荐榜单,助力企业高效合规用工选择

2026年印度名义雇主EOR业务推荐榜单,助力企业高效合规用工选择

在2026年,印度的名义雇主EOR业务正在引起越来越多企业的关注。通过名义雇主服务,企业可以在全球范围内轻松合规用工。这项服务帮助企业实现快速招聘、减少合规压力、并提升运营效率。文章将介绍多家优秀的EOR服务商、例如万领钧Knit、Deel迪尔等、并分析…

2026/8/26 15:43:15 阅读更多 →

最新新闻

花卉图像分类在植物识别与生态监测中的应用

花卉图像分类在植物识别与生态监测中的应用

“Petals tothe Metal - Flower Classification on TPU”是Kaggle平台上一项典型的“入门”竞赛。其核心任务是利用Tensor Processing Unit硬件,对涵盖104个类别的花卉图像数据集进行多类别分类。竞赛采用Macro F1 Score作为评估指标,数据以TFRecord格式提供,总规模约5GB。此…

2026/8/26 19:33:27 阅读更多 →
照片莫奈风格生成与艺术滤镜应用

照片莫奈风格生成与艺术滤镜应用

在数字艺术与生成式人工智能的交汇点上,图像风格迁移始终是一个充满魅力与挑战的领域。Kaggle入门竞赛“I’m Something of a Painter Myself”以此为切入点,要求参赛者构建生成对抗网络,将普通照片转化为印象派大师克劳德莫奈风格的画作。这项任务远不止于一场算法竞赛,其…

2026/8/26 19:33:27 阅读更多 →
学Simulink——微电网中央控制器(MGCC, Microgrid Central Controller)能量调度仿真

学Simulink——微电网中央控制器(MGCC, Microgrid Central Controller)能量调度仿真

目录 手把手教你学Simulink——微电网中央控制器(MGCC, Microgrid Central Controller)能量调度仿真 一、MGCC 调度原则(简化实用) 1.1 符号与约定 1.2 并网调度优先级(Grid‑Connected) 1.3 孤岛调度优先级(Islanded) 1.4 模式切换 二、关键参数 三、Simulink …

2026/8/26 19:33:27 阅读更多 →
SQL Server Registered Server

SQL Server Registered Server

C:\Users\<username>\AppData\Roaming\Microsoft\SQL Server Management Studio user id<sql_login>;password[^];poolingFalse; user id<sql_login>;poolingFalse;Registered Server文件所在位置C:\Users\<username>\AppData\Roaming\Microsoft\SQL S…

2026/8/26 19:33:27 阅读更多 →
货运搬家小程序从0到1(三):计价引擎,起步价、超程费、楼层费的规则建模

货运搬家小程序从0到1(三):计价引擎,起步价、超程费、楼层费的规则建模

货运搬家小程序从0到1&#xff08;三&#xff09;&#xff1a;计价引擎&#xff0c;起步价、超程费、楼层费的规则建模上篇建好了 8 张表。这篇写整个系统里"业务味"最浓的部分&#xff1a;货运搬家的钱是怎么算出来的。计价规则长什么样 同城货运的通用计价模型&…

2026/8/26 19:33:27 阅读更多 →
第二章:DRM 框架概述:2.1 DRM 框架核心对象速览:drm_device / drm_file / drm_driver

第二章:DRM 框架概述:2.1 DRM 框架核心对象速览:drm_device / drm_file / drm_driver

从计算机系统的组成和工作原理上来讲,我们要操作的GPU也是一个外设,因此也就遵循 Linux 设备的一切设计。 DRM 设备模型本质上遵循 Linux 标准的字符设备文件操作模型:内核通过 struct file_operations 向用户态暴露设备节点(/dev/dri/renderD128),用户态通过 open() / …

2026/8/26 19:32:23 阅读更多 →

日新闻

Python random 模块常用函数详解:从入门到实战

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要&#xff1a; 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数&#xff08;random()、unifor…

2026/8/26 0:00:40 阅读更多 →
《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》索引目录&#xff1a; 《Microsoft Sql server 2008 Internals》读书笔记--目录索引 在上篇文章中&#xff0c;主要介绍了创建数据库的基本语法和FileGroup的初步知识。需要注意的是: 关于FileGroup 如果你的系统是用Raid设备直接存…

2026/8/26 1:18:18 阅读更多 →
政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体已经从概念试点阶段&#xff0c;转入了政务服务的常态化落地应用&#xff1b;在实际使用过程中&#xff0c;它能自主理解办事需求、辅助完成填报申报、开展材料预审&#xff0c;并联动多个系统协同作业&#xff0c;真正嵌入到政务办理的全流程当中。但在落地推进过…

2026/8/26 1:18:18 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态&#xff0c;宏观上观察到的光是由无数个微观的光量子组成的&#xff0c;每个光子在产生的瞬间&#xff0c;其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前&#xff0c;在微观层面&#xff0c;每个光量子的运动轨迹是以波函数所展现…

2026/8/26 14:45:33 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”&#xff0c;而是SIP会话的动态重定向你有没有遇到过这样的场景&#xff1a;客服坐席A正在和客户通电话&#xff0c;突然需要把这通对话无缝转给专家坐席B&#xff0c;客户完全感知不到中间的断连——既没听到忙音&#xff0c;也没被要求重新拨号…

2026/8/26 17:46:43 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack&#xff1f;如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法&#xff0c;那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 14:46:37 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速&#xff1a;macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/26 3:50:20 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南&#xff1a;3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗&#xff1f;ncmdump解密工具帮你轻松解决这个困…

2026/8/26 17:46:39 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片&#xff1a;为英语学习 App 打造桌面级学习助手适用平台&#xff1a;HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0&#xff08;API 26 Beta&#xff09;新增了 AgentCard 智能体卡片能力&#xff0c;这是继 HMAF&#xff08;鸿蒙智能体框架&#x…

2026/8/26 1:24:05 阅读更多 →