<4D F736F F D20CAB5D1E BACDBBE3B1E0D3EFD1D4B5C4BBECBACFB1E0B3CCCAB5D1E92E646F63>

Similar documents
第5章:汇编语言程序设计

MSP430µ¥Æ¬»úCÓïÑԺͻã±àÓïÑÔ»ìºÏ±à³Ì.doc

目录

标题

untitled

微机原理(计算机原理与接口技术)

学习MSP430单片机推荐参考书

chap07.key

Microsoft PowerPoint sun-arm isa2.ppt [Compatibility Mode]

2 12

D 江 苏 汉 邦 建 设 集 团 有 限 公 司 江 苏 邦 实 建 设 工 程 有 限 公 司

目 录

51 C 51 isp 10 C PCB C C C C KEIL

<4D F736F F D203034CAB5D1E9CBC D20B5C4494F20BDD3BFDACAB5D1E92E646F63>

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63>

第 十 一 期 2015 年 2 月 关 于 车 辆 购 置 税 征 收 管 理 有 关 问 题 的 公 告 ( 点 击 跳 转 至 全 文 ) 国 家 税 务 总 局 公 告 2015 年 第 4 号 关 于 电 池 涂 料 消 费 税 征 收 管 理 有 关 问 题 的 公 告 ( 点 击 跳

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

ARM处理器中ARM和THUMB状态的切换(Interworking)

Avision

untitled

bingdian001.com

Microsoft Word - MSP430 Launchpad 指导书.docx

C语言的应用.PDF

untitled

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

untitled

Slide_Master

Microsoft PowerPoint - 8-ADS介绍 [兼容模式]

Microsoft Word - 1-3陳詠琳-近代..

SB 綱 領 : (1) 消 防 服 務 管 制 人 員 : 就 年 度 需 要 特 別 留 意 的 事 項 中, 當 局 提 到 年 度 內, 消 防 處 會 啟 用 啟 德 新 建 並 設 有 救 護 設 施 的 消 防 局, 請 告 知 有 關

上海地区进出口饲料和饲料添加剂经营单位备案名单

Microsoft Word - 中耳的主要疾病~中耳炎.doc

廚餘來電.doc

Simulator By SunLingxi 2003

<4D F736F F D20D0C5CFA2BBAFB7A2D5B9D6D8B5E3D7A8CFEEB9E6BBAE2E646F63>

? 這 全 都 是 市 政 府 提 供 給 我 的 資 料 低 底 盤 公 車 計 畫 96 年 預 算 新 台 幣 4,500 萬 元 97 年 預 算 新 台 幣 1 億 6,500 萬 元 98 年 預 算 新 台 幣 3 億 2,300 萬 元, 共 有 307 台 低 底 盤 公 車,99

关于建立境内违法互联网站黑名单管理制度的通知

98年度即測即評學科測試與即測即評即發證技術士技能檢定簡章

Microsoft Word 箕æ−¥ï¼‹å®ı稿;

Microsoft Word - 送報伕2.doc

申 请 律 师 执 业 许 可 初 审 服 务 指 南 目 录 一 办 理 要 素 ( 一 ) 事 项 名 称 和 编 码 4 ( 二 ) 实 施 机 构 4 ( 三 ) 申 请 主 体 4 ( 四 ) 受 理 地 点 4 ( 五 ) 办 理 依 据 4 ( 六 ) 办 理 条 件 5 ( 七 )

环 境, 我 在 巩 固 在 校 期 间 所 学 习 的 理 论 知 识 的 同 时, 不 断 的 充 实 己, 利 用 业 余 时 间 主 动 学 习 专 业 知 识, 技 能, 把 理 论 联 系 到 工 作 实 践 中 作 为 一 名 工 作 生 活 中 的 党 员, 我 始 终 注 意 与

附件1

邻居啊 第二天 对门却悄无声息了 莫非昨夜的吵闹 仅是个幻觉 夜幕拉下时 寒风又吱溜溜地叫个不停 老婆 睡下后 我这只夜猫子 继续兴致勃勃地跟着福尔 摩斯去探案 白天的喧嚣退去了 周围格外安静 正 是读书的好时候 突然 响起了钟摆声 哒 哒 哒 节奏匀称 不疾不徐 声响却愈来愈大 格外突兀 了 原来

<4D F736F F D BAC520CAD7B6BCCAA6B7B6B4F3D1A C4EAD7A8D2B5BCBCCAF5D6B0CEF1C6C0C6B8B9A4D7F7D2E2BCFB2E646F63>

其 他 方 面 也 可 以 采 用 同 样 的 方 式, 这 样 又 可 以 锻 炼 除 语 文 方 面 的 其 他 能 力 了 而 英 语 方 面, 我 认 为 配 合 英 语 专 业 举 办 英 语 演 讲 比 赛 就 很 不 错 这 样 开 展 一 系 列 的 创 新 活 动, 锻 炼 多 方

第 六 条 办 法 第 五 条 ( 三 ) 协 会 考 评, 考 评 指 考 核 评 价 第 七 条 办 法 第 六 条 职 业 操 守 包 括 的 内 容 : 个 人 诚 信 不 做 假 账 不 偷 漏 税 不 贪 污 盗 窃 等 第 八 条 企 业 财 务 管 理 人 才 评 价 实 行 五 星

<4D F736F F D A67EABD7A4BAB3A1B1B1A8EEA8EEABD7A6DBA6E6B5FBA6F4AD70B5652E646F63>

统计工作情况汇报

他 随 身 带 有 二 三 十 张 古 方, 白 天 卖 药, 夜 晚 将 药 材 精 细 研 末, 按 方 配 制 对 于 病 人 服 药 后 反 应, 特 别 留 心 发 现 问 题, 就 近 向 老 医 生 老 药 贩 虚 心 求 教, 千 方 百 提 高 药 效 同 时 对 于 春 夏 秋

目 录 第 一 章 地 方 陪 同 导 游 人 员 服 务 程 序...1 第 一 节 地 方 陪 同 导 游 人 员 的 概 念 与 职 责...1 第 二 节 服 务 准 备...2 一 熟 悉 接 待 计 划...2 二 落 实 接 待 事 宜...5 三 物 质 和 知 识 的 准 备...

走 吧, 到 三 峡 去 : 那 里 是 我 们 先 人 用 生 命 之 血 打 造 的 家 园 走 吧, 到 三 峡 去 : 那 里 的 浪 涛 承 载 过 千 百 万 只 我 们 先 人 驶 向 今 天 的 航 船 走 吧, 到 三 峡 去 : 那 里 的 每 一 座 青 山 都 刻 满 了 我

6寸PDF生成工具

Microsoft Word - N011 斷翅天使

中 国 科 学 院 国 家 科 学 图 书 馆

申论写作套路万能模板

( 地 ( ) 组 织 机 构 代 码 企 业 详 细 名 称 哈 密 地 伊 吾 新 疆 广 汇 新 能 源 有 限 公 司 玛 纳 斯 玛 纳 斯 祥 云 化 纤 有 限 公 司 玛 纳 斯 玛 纳 斯 澳 洋 科 技 有 限 责

图 文 聚 焦 国 培 计 划 (2013) 甘 肃 省 农 村 小 学 音 乐 骨 干 教 师 短 期 集 中 培 训 9 月 4 日 开 班 了, 学 员 老 师 们 从 甘 肃 省 各 个 县 市 州 汇 聚 湖 南 一 师, 开 始 了 为 期 14 天 的 培 训 学 习 : 鲜 明 的

申請機構基本資料

申請機構基本資料

Microsoft Word - 三方协议书与接收函的相关说明学生版.doc

~2~

,,

untitled

2013 年 大 陸 書 市 觀 察 2013 年, 新 笑 傲 江 湖 也 引 起 熱 烈 討 論, 首 播 當 晚 已 居 黃 金 檔 電 視 劇 收 視 冠 軍, 進 而 帶 動 了 該 作 品 的 圖 書 銷 量, 之 後 隋 唐 英 雄 傳 精 忠 嶽 飛 等 也 紛 紛 改 編 成 電

计算机网络

untitled

<4D F736F F D20C7B6C8EBCABDCFB5CDB3C9E8BCC6CAA6B0B8C0FDB5BCD1A75FD1F9D5C22E646F63>

目 录 第 一 部 分 档 案 局 概 况 一 主 要 职 责 二 部 门 决 算 单 位 构 成 第 二 部 分 档 案 局 2016 年 度 部 门 预 算 表 一 2016 年 度 市 级 部 门 收 支 预 算 总 表 二 2016 年 度 市 级 部 门 支 出 预 算 表 三 2016

2015 年 度 收 入 支 出 决 算 总 表 单 位 名 称 : 北 京 市 朝 阳 区 卫 生 局 单 位 : 万 元 收 入 支 出 项 目 决 算 数 项 目 ( 按 功 能 分 类 ) 决 算 数 一 财 政 拨 款 一 一 般 公 共 服 务 支 出 二

江 西 : 失 信 被 执 行 人 曝 光 台 写 入 两 会 报 告 摘 要 1 月 27 日, 江 西 省 十 二 届 人 大 五 次 会 议 举 行 第 二 次 全 体 会 议, 江 西 省 高 级 人 民 法 院 院 长 张 忠 厚 向 大 会 作 江 西 省 高 级 人 民 法 院 工 作

形 式 审 查 不 通 过, 将 说 明 原 因 并 予 退 回, 不 予 重 新 修 改 提 交 ( 形 式 审 查 常 见 主 要 问 题 参 考 附 件 3) ( 三 ) 申 请 人 下 载 打 印 网 上 状 态 为 请 交 纸 质 材 料 至 窗 口 受 理 的 申 报 书, 报 送 项

撤 离 你 听 到 了 吗? 它 们 已 经 进 了 墙 里 边 了 那 些 金 属 的 撞 击 声 在 狂 风 之 中 很 难 听 清, 但 断 然 不 会 有 错 围 坐 在 桌 边 的 四 人 靠 得 更 紧 了 些, 并 不 是 因 为 害 怕, 而 是 为 了 取 暖 你 们 觉 得 呢?


序 1995 年 我 走 进 了 朝 阳 区 将 台 乡 五 保 老 人 院, 如 今 17 年 后, 十 分 欣 喜 有 机 会 为 这 本 流 金 岁 月 小 集 作 序 在 多 年 陪 伴 孤 单 老 人 的 过 程 中, 我 深 深 地 体 会 到 每 位 老 人 的 生 命 里 其 实 都

78 云 芝 79 五 加 皮 80 五 味 子 81 五 倍 子 82 化 橘 红 83 升 麻 84 天 山 雪 莲 85 天 仙 子 86 天 仙 藤 87 天 冬 88 天 花 粉 89 天 竺 黄 90 天 南 星 91 天 麻 92 天 然 冰 片 ( 右 旋 龙 脑 ) 93 天 葵

43081.indb


一 天 吃 两 顿, 从 不 例 外 我 上 班 就 是 找 一 个 网 吧 上 网 上 网 的 内 容 很 杂, 看 新 闻, 逛 论 坛, 或 者 打 打 小 游 戏 如 果 没 钱 上 网, 我 会 独 自 一 个 人 到 一 个 偏 僻 的 地 方, 静 静 地 坐 着 发 呆 这 也 是

工 造 价 15 邗 江 南 路 建 设 工 一 标 市 政 公 用 6000 中 机 环 建 集 团 有 限 公 胡 美 娟 16 邗 江 南 路 建 设 工 二 标 市 政 公 用 品 尊 国 际 花 园 1# 2# 3# 4# 7# 9# 10# 11# 楼 地 库 C 区 工

第一篇 建置区划


untitled


31 121

ǎà

Microsoft PowerPoint - plan06.ppt

ARM学习报告003——Bios源码分析.doc

华恒家庭网关方案

untitled

CC213


2.5 idlocs PIC idloc idloc 0x1234 ; 0x config idloc HEX errorlevel errorlevel Error (Warning) Message HEX 3-14 errorlevel

DPJJX1.DOC

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha

PIC16F F MPLAB 08 16F LED 15 LED

Microsoft Word - IRFWX_A051_C_SyncMOS_with_STC_APN_SC_.doc

<4D F736F F D D342D3231D2C7B1EDCCD6C2DBB8E5B1E0D6C6CBB5C3F72E646F63>

我 覺 得 流 病 的 各 單 元 之 間 常 常 都 有 相 連 的 觀 念, 中 間 要 是 有 觀 念 不 清 楚, 後 面 的 東 西 有 時 會 比 較 接 不 上 來 重 要 的 解 釋 名 詞 都 有 要 好 好 背, 容 易 考 的 申 論 題 要 整 理 成 筆 記 4. 衛 生


Transcription:

1 实验目的 实验 2 C 和汇编语言的混合编程实验 学习在 C 程序中使用嵌入式汇编编写程序 了解嵌入式汇编的格式 语言特点 2 实验设备 S3C2410 开发板 ADS1.2 集成开发环境,JTAG 调试器 串口连接线 3 实验原理 在 ARM 的应用开发中,C 语言功能强大且容易编写程序, 但是汇编程序在底层的操作仍然具有 C 程序无法替代的功能, 有时候我们需要在 C 程序中嵌入汇编程序来完成一些直接对底层的诸如寄存器的操作 C 程序与汇编程序相互调用规则为了使单独编译的 C 语言程序和汇编程序之间能够相互调用, 必须为子程序间的调用规定一定的规则 ATPCS, 即 ARM, Thumb 过程调用标准 (ARM/Thumb Procedure Call Standard), 是 ARM 程序和 Thumb 程序中子程序调用的基本规则, 它规定了一些子程序间调用的基本规则, 如子程序调用过程中的寄存器的使用规则, 堆栈的使用规则, 参数的传递规则等 下面结合实际介绍几种 ATPCS 规则, 如果读者想了解更多的规则, 可以查看相关的书籍 1. 基本 ATPCS 基本 ATPCS 规定了在子程序调用时的一些基本规则, 包括下面 3 方面的内容 : (1) 各寄存器的使用规则及其相应的名称 (2) 数据栈的使用规则 (3) 参数传递的规则 相对于其它类型的 ATPCS, 满足基本 ATPCS 的程序的执行速度更快, 所占用的内存更少 但是它不能提供以下的支持 : ARM 程序和 Thumb 程序相互调用, 数据以及代码的位置无关的支持, 子程序的可重入性, 数据栈检查的支持 而派生的其他几种特定的 ATPCS 就是在基本 ATPCS 的基础上再添加其他的规则而形成的 其目的就是提供上述的功能 2. 寄存器的使用规则 寄存器的使用必须满足下面的规则 : (1) 子程序间通过寄存器 R0~R3 来传递参数 这时, 寄存器 R0~R3 可以记作 A0~A3 被调用的子程序在返回前无需恢复寄存器 R0~R3 的内容 (2) 在子程序中, 使用寄存器 R4~Rll 来保存局部变量 这时, 寄存器 R4~R11 可以记作 V1~V8 如果在子程序中使用到了寄存器 V1~V8 中的某些寄存器, 子程序进入时必须保存这些寄存器的值, 在返回前必须恢复这些寄存器的值 ; 对于子程序中没有用到的寄存器则不必进行这些操作 在 Thumb 程序中, 通常只能使用寄存器 R4~R7 来保存局部变量 (3) 寄存器 R12 用作子程序间 scratch 寄存器, 记作 IP 在子程序间的连接代码段中 1

常有这种使用规则 (4) 寄存器 R13 用作数据栈指针, 记作 SP 在子程序中寄存器 R13 不能用作其他用途 寄存器 SP 在进入子程序时的值和退出子程序时的值必须相等 (5) 寄存器 R14 称为连接寄存器, 记作 LR 它用于保存子程序的返回地址 如果在子程序中保存了返回地址, 寄存器 R14 则可以用作其他用途 (6) 寄存器 R15 是程序计数器, 记作 PC 它不能用作其他用途 表 4-2 总结了在 ATPCS 中各寄存器的使用规则及其名称 这些名称在 ARM 编译器和汇编器中都是预定义的 表 4-2 ATPCS 中各寄存器的使用规则及其名称 寄存器 别名 特殊名称 使用规则 R15 PC 程序计数器 R14 LR 连接寄存器 R13 SP 数据栈指针 R12 IP 子程序内部调用的 scratch 寄存器 R11 V8 ARM 状态局部变量寄存器 8 R10 V7 SL ARM 状态局部变量寄存器 7 在支持数据栈检查的 ATPCS 中为数据栈限制指针 R9 V6 SB ARM 状态局部变量寄存器 6 在支持 RWPI 的 ATPCS 中为静态基址寄存器 R8 V5 ARM 状态局部变量寄存器 5 R7 V4 WR 局部变量寄存器 4 Thumb 状态工作寄存器 R6 V3 局部变量寄存器 3 R5 V3 局部变量寄存器 2 R4 V1 局部变量寄存器 2 R3 A4 参数 / 结果 /scratch 寄存器 4 R2 A3 参数 / 结果 /scratch 寄存器 3 R1 A2 参数 / 结果 /scratch 寄存器 2 R0 A1 参数 / 结果 /scratch 寄存器 1 3. 参数传递规则 根据参数个数是否固定可以将子程序分为参数个数固定的 (nonvariadic) 子程序和参数个数可变的 (variadic) 子程序 这两种子程序的参数传递规则是不同的 (1) 参数个数可变的子程序参数传递规则对于参数个数可变的子程序, 当参数不超过 4 个时, 可以使用寄存器 R0~R3 来传递参数 ; 当参数超过 4 个时, 还可以使用数据栈来传递参数 在参数传递时, 将所有参数看作是存放在连续的内存字单元中的字数据 然后, 依次将各字数据传送到寄存器 R0 R1 R2 R3 中, 如果参数多于 4 个, 将剩余的字数据传送到数据栈中, 入栈的顺序与参数顺序相反, 即最后一个字数据先入栈 按照上面的规则, 一个浮点数参数可以通过寄存器传递, 也可以通过数据栈传递, 也可能一半通过寄存器传递, 另一半通过数据栈传递 (2) 参数个数固定的子程序参数传递规则对于参数个数固定的子程序, 参数传递与参数个数可变的子程序参数传递规则不同 如果系统包含浮点运算的硬件部件, 浮点参数将按照下面的规则传递 : 各个浮点参数按顺序处理 为每个浮点参数分配 FP 寄存器 分配的方法是, 满足该浮点参数需要的且编号最小的一组连续的 FP 寄存器 第一个整数参数, 通过寄存器 R0~R3 来传递 其他参数通过数据栈传递 2

(3) 子程序结果返回规则子程序中结果返回的规则如下 : 结果为一个 32 位的整数时, 可以通过寄存器 R0 返回 结果为一个 64 位整数时, 可以通过寄存器 R0 和 Rl 返回, 依次类推 结果为一个浮点数时, 可以通过浮点运算部件的寄存器 f0 d0 或者 s0 来返回 结果为复合型的浮点数 ( 如复数 ) 时, 可以通过寄存器 f0~fn 或者 d0~dn 来返回 对于位数更多的结果, 需要通过内存来传递 对有调用关系的所有子程序必须遵守同一种 ATPCS 编译器或者汇编器在 ELF 格式的目标文件中设置相应的属性, 标识用户选定的 ATPCS 类型 对应于不同类型的 ATPCS 规则, 有相应的 C 语言库, 连接器根据用户指定的 ATPCS 类型连接相应的 C 语言库 使用 ADS 的 C 语言编译器编译的 C 语言子程序满足用户指定的 ATPCS 类型 而对于汇编语言程序来说, 完全要依赖用户来保证各子程序满足选定的 ATPCS 类型 具体来说, 汇编语言子程序必须满足下面 3 个条件 : 在子程序编写时必须遵守相应的 ATPCS 规则 数据栈的使用要遵守相应的 ATPCS 规则 在汇编编译器中使用 -apcs 选项 程序设计中在需要 C 与汇编混合编程时, 若汇编代码较简洁, 则可使用直接内嵌汇编的方法混合编程 ; 否则, 可以将汇编文件以文件的形式加入项目中, 通过 ATPCS 规定与 C 程序相互调用及访问 在 C 程序中嵌入汇编程序在 ARM C 语言中, 使用关键词 asm 来标志一段汇编指令程序 : 其格式如下, asm 汇编程序 嵌入式汇编语言不同的地方有 : 如果一行中有多个汇编指令, 指令之间用分号 (;) 隔离 如果一天指令占多行, 要使用续行符号 (\) 在汇编指令段中可以使用 C 语言的注释语句 4 实验电路图 3

5 程序实现 5.1 创建 GPFC.c 源文件, 应用 C 语言实现嵌入式编程 /* 这是一个利用 GPIO 做跑马灯的程序 */ /* GPIO1 到 GPIO4 分别对应 2410 的 GPF4 到 GPF7 */ #include "2410lib.h" #define GPFCON #define GPFDAT #define GPFUP (*(volatile unsigned *)0x56000050) //Port F control (*(volatile unsigned *)0x56000054) //Port F data (*(volatile unsigned *)0x56000058) //Pull-up control F int Main() GPFCON=(GPFCON 0xFF00)&0xFFFF55FF;//GPF4--GPF7 设置为 output GPFUP =0xFF00; //disable GPF pull up while(1) int i=0; GPFDAT=(GPFDAT&0xFFFFFF0F) 0xE0; GPFDAT=(GPFDAT&0xFFFFFF0F) 0xD0; GPFDAT=(GPFDAT&0xFFFFFF0F) 0xB0; GPFDAT=(GPFDAT&0xFFFFFF0F) 0x70; 5. 2 创建 GPFA.c 源程序, 实现在 C 程序中嵌入 ARM 汇编指令 // 定义寄存器地址 #define GPFCON (*(volatile unsigned *)0x56000050) //Port F control #define GPFDAT (*(volatile unsigned *)0x56000054) //Port F data #define GPFUP (*(volatile unsigned *)0x56000058) //Pull-up control F int Main() int x=0; // 时钟 端口 串口初始化 SetClockDivider(1, 1); SetSysFclk(DFT_FCLK_VAL); 4

Port_Init(); Uart_Select(0); Uart_Init(0, UART_BAUD); GPFCON=(GPFCON 0xFF00)&0xFFFF55FF;//GPF4--GPF7 设置为 output GPFUP =0xFF00; //disable GPF pull up while(1) GPFDAT=(GPFDAT&0xFFFFFF0F) 0xE0; asm // 嵌入汇编指令 add x,x,#1 nop nop GPFDAT=(GPFDAT&0xFFFFFF0F) 0xD0; GPFDAT=(GPFDAT&0xFFFFFF0F) 0xB0; GPFDAT=(GPFDAT&0xFFFFFF0F) 0x70; Uart_Printf("the value of x is: %d\n",x);// 串口输出 5.3 创建 delay.s 和 GPFTEST.c 源文件, 实现在 C 程序中汇编函数调用 /* delay.s */ EXPORT delay AREA DELAY,CODE,READONLY ; 该伪指令定义了一个代码段, 段名为 Init, 属性只读 ; 下面是延迟子程序 delay sub r0,r0,#1 ;r0=r0-1 cmp r0,#0x0 ; 将 r0 的值与 0 相比较 bne delay ; 比较的结果不为 0(r0 不为 0), 继续调用 delay, 否则执行下一条语句 mov pc,lr ; 返回 END ; 程序结束符 5

/* GPFTEST.C */ /*C 语言函数 */ /* 端口 F 寄存器预定义 */ #define GPFCON (*(volatile unsigned *)0x56000050) //Port F control #define GPFDAT (*(volatile unsigned *)0x56000054) //Port F data #define GPFUP (*(volatile unsigned *)0x56000058) //Pull-up control F extern int delay(int time); /* 声明汇编函数 */ int Main() GPFCON=(GPFCON 0xFF00)&0xFFFF55FF;//GPF4--GPF7 设置为 output GPFUP =0xFF00; //disable GPF pull up while(1) int i=0; GPFDAT=(GPFDAT&0xFFFFFF0F) 0xE0; GPFDAT=(GPFDAT&0xFFFFFF0F) 0xD0; GPFDAT=(GPFDAT&0xFFFFFF0F) 0xB0; GPFDAT=(GPFDAT&0xFFFFFF0F) 0x70; 6. 实验过程 程序运行后, 结果和实验一相同,LED 灯不断闪烁 6