L15 MIPS Assembly



Similar documents
《C语言基础入门》课程教学大纲

第2章 数据类型、常量与变量

何 秋 琳 张 立 春 视 觉 学 习 研 究 进 展 视 觉 注 意 视 觉 感 知

类 似 地, 又 可 定 义 变 下 限 的 定 积 分 : ( ). 与 ψ 统 称 为 变 限 积 分. f ( ) d f ( t) dt,, 注 在 变 限 积 分 (1) 与 () 中, 不 可 再 把 积 分 变 量 写 成 的 形 式 ( 例 如 ) 以 免 与 积 分 上 下 限 的

国债回购交易业务指引

说 明 为 了 反 映 教 运 行 的 基 本 状 态, 为 校 和 院 制 定 相 关 政 策 和 进 行 教 建 设 与 改 革 提 供 据 依 据, 校 从 程 资 源 ( 开 类 别 开 量 规 模 ) 教 师 结 构 程 考 核 等 维 度, 对 2015 年 春 季 期 教 运 行 基

修改版-操作手册.doc


Template BR_Rec_2005.dot

Microsoft Word - 第7章 图表反转形态.doc

 编号:

目 录 一 系 统 访 问... 1 二 门 户 首 页 申 报 用 户 审 核 用 户... 2 三 系 统 登 录 用 户 名 密 码 登 录 新 用 户 注 册 用 户 登 录 已 注 册 用

正 规 培 训 达 规 定 标 准 学 时 数, 并 取 得 结 业 证 书 二 级 可 编 程 师 ( 具 备 以 下 条 件 之 一 者 ) (1) 连 续 从 事 本 职 业 工 作 13 年 以 上 (2) 取 得 本 职 业 三 级 职 业 资 格 证 书 后, 连 续 从 事 本 职 业

Microsoft PowerPoint - plan03.ppt

深圳市新亚电子制程股份有限公司

<433A5C446F63756D656E E E67735C41646D696E F725CD7C0C3E65CC2DBCEC4CFB5CDB3CAB9D3C3D6B8C4CFA3A8BCF2BBAFA3A95CCAB9D3C3D6B8C4CF31302D31392E646F63>

定 位 和 描 述 : 程 序 设 计 / 办 公 软 件 高 级 应 用 级 考 核 内 容 包 括 计 算 机 语 言 与 基 础 程 序 设 计 能 力, 要 求 参 试 者 掌 握 一 门 计 算 机 语 言, 可 选 类 别 有 高 级 语 言 程 序 设 计 类 数 据 库 编 程 类

<4D F736F F D C3E6CFF2B6D4CFF3A3A8B5DAC8FDD5C220C0E0CCD8D0D4A3A92E646F63>

Microsoft PowerPoint - plan03.ppt

<4D F736F F D20BFC9B1E0B3CCD0F2BFD8D6C6CFB5CDB3C9E8BCC6CAA6B9FABCD2D6B0D2B5B1EAD7BC2E646F63>

龚 亚 夫 在 重 新 思 考 基 础 教 育 英 语 教 学 的 理 念 一 文 中 援 引 的 观 点 认 为 当 跳 出 本 族 语 主 义 的 思 维 定 式 后 需 要 重 新 思 考 许 多 相 连 带 的 问 题 比 如 许 多 发 音 的 细 微 区 别 并 不 影 响 理 解 和

用节点法和网孔法进行电路分析

,,,,, :,, (.,, );, (, : ), (.., ;. &., ;.. &.., ;, ;, ),,,,,,, ( ) ( ),,,,.,,,,,, : ;, ;,.,,,,, (., : - ),,,, ( ),,,, (, : ),, :,

电信系教学大纲的基本规范

第二讲 数列

登录、注册功能的测试用例设计.doc

(Microsoft Word - NCRE\314\345\317\265\265\367\325\37313\324\27221\272\3051.doc)

I

HSK( 一 级 ) 考 查 考 生 的 日 常 汉 语 应 用 能 力, 它 对 应 于 国 际 汉 语 能 力 标 准 一 级 欧 洲 语 言 共 同 参 考 框 架 (CEF) A1 级 通 过 HSK( 一 级 ) 的 考 生 可 以 理 解 并 使 用 一 些 非 常 简 单 的 汉 语

Cybozu Garoon 3 管理员手册

PowerPoint Presentation

第3章 创建数据库

上证指数

上海证券交易所会议纪要

火车浏览器脚本制作教程

第 期 李 伟 等 用 方 法 对 中 国 历 史 气 温 数 据 插 值 可 行 性 讨 论

一 开 放 性 的 政 策 与 法 规 二 两 岸 共 同 的 文 化 传 承 三 两 岸 高 校 各 自 具 有 专 业 优 势 远 见 杂 志 年 月 日

课程类 别

2006年顺德区高中阶段学校招生录取分数线

珠江钢琴股东大会

变 量 的 主 要 作 用 是 存 取 数 据 提 供 存 放 信 息 的 容 器 对 于 变 量 必 须 明 确 变 量 的 命 名 变 量 的 类 型 变 量 的 声 明 及 其 变 量 的 作 用 域 JavaScript 是 一 种 弱 类 型 语 言, 也 就 是 说, 在 声 明 变 量

全国艺术科学规划项目

4.3.3 while 语 句 用 于 无 限 循 环 当 while 语 句 的 表 达 式 永 远 不 会 为 布 尔 假 时, 循 环 将 永 远 不 会 结 束, 形 成 无 限 循 环, 也 称 死 循 环 使 用 while 语 句 构 成 无 限 循 环 的 格 式 通 常

金 不 少 于 800 万 元, 净 资 产 不 少 于 960 万 元 ; (3) 近 五 年 独 立 承 担 过 单 项 合 同 额 不 少 于 1000 万 元 的 智 能 化 工 程 ( 设 计 或 施 工 或 设 计 施 工 一 体 ) 不 少 于 2 项 ; (4) 近 三 年 每 年

评 委 : 李 炎 斌 - 个 人 技 术 标 资 信 标 初 步 审 查 明 细 表 序 号 投 标 单 位 投 标 函 未 按 招 标 文 件 规 定 填 写 漏 填 或 内 容 填 写 错 误 的 ; 不 同 投 标 人 的 投 标 文 件 由 同 一 台 电 脑 或 同 一 家 投 标 单

( ) 信 号 与 系 统 Ⅰ 学 科 基 础 必 修 课 教 周 2016 年 06 月 13 日 (08:00-09:35) ( )

目 录 关 于 图 标... 3 登 陆 主 界 面... 3 工 单 管 理... 5 工 单 列 表... 5 搜 索 工 单... 5 工 单 详 情... 6 创 建 工 单... 9 设 备 管 理 巡 检 计 划 查 询 详 情 销 售 管

一、资质申请

附 件 : 上 海 市 建 筑 施 工 企 业 施 工 现 场 项 目 管 理 机 构 关 键 岗 位 人 员 配 备 指 南 二 一 四 年 九 月 十 一 日 2

2 熟 悉 Visual Basic 的 集 成 开 发 环 境 3 了 解 可 视 化 面 向 对 象 编 程 事 件 驱 动 交 互 式 开 发 等 基 本 概 念 4 了 解 Visual Basic 的 特 点 环 境 要 求 与 安 装 方 法 1 Visual Basic 开 发 应 用

Microsoft Word - 第3章.doc

导 数 和 微 分 的 概 念 导 数 的 几 何 意 义 和 物 理 意 义 函 数 的 可 导 性 与 连 续 性 之 间 的 关 系 平 面 曲 线 的 切 线 和 法 线 导 数 和 微 分 的 四 则 运 算 基 本 初 等 函 数 的 导 数 复 合 函 数 反 函 数 隐 函 数 以

超 级 玛 丽 JAVA 小 游 戏 测 试 报 告 1. 导 言 1.1 编 写 目 的 该 文 档 的 目 的 是 描 述 超 级 玛 丽 JAVA 小 游 戏 的 系 统 测 试 的 总 结 报 告, 其 主 要 内 容 包 括 : 系 统 环 境 的 介 绍 功 能 的 实 现 的 测 试

DLJ1.nps

马 克 思 主 义 公 正 观 的 基 本 向 度 及 方 法 论 原 则!! # #

<433A5C C6B73625C B746F705CB9FABCCAD6D0D2BDD2A9D7A8D2B5B8DFBCB6BCBCCAF5D6B0B3C6C6C0C9F3C9EAC7EBD6B8C4CFA3A CDA8D3C3B0E6A3A92E646F63>

IntelBook_cn.doc

doc


第 一 部 分 MagiCAD for Revit 安 装 流 程

第三章 作业

生产支援功能 使用说明书(IP-110 篇)

2. 本 次 修 改 后, 投 资 者 申 购 新 股 的 持 有 市 值 要 求 市 值 计 算 规 则 及 证 券 账 户 使 用 的 相 关 规 定 是 否 发 生 了 变 化? 答 : 未 发 生 变 化 投 资 者 申 购 新 股 的 持 有 市 值 是 指, 以 投 资 者 为 单 位

中国银行股份有限公司首次公开发行A股发行安排及初步询价公告

<4D F736F F D C4EAB9A4B3CCCBB6CABFCAFDD1A7D7A8D2B5BFCEBFBCCAD4B4F3B8D9D3EBD2AAC7F3>

业务方案篇

3 复 试 如 何 准 备 4 复 试 成 绩 计 算 5 复 试 比 例 6 复 试 类 型 7 怎 么 样 面 对 各 种 复 试 04 05

GB

系统设计文档_样稿管理模块 V1.1_.doc

<4D F736F F D20B9D8D3DAB0BABBAAA3A8C9CFBAA3A3A9D7D4B6AFBBAFB9A4B3CCB9C9B7DDD3D0CFDEB9ABCBBE C4EAC4EAB6C8B9C9B6ABB4F3BBE1B7A8C2C9D2E2BCFBCAE92E646F6378>

评 委 : 徐 岩 宇 - 个 人 技 术 标 资 信 标 初 步 审 查 明 细 表 序 号 投 标 单 位 投 标 函 未 按 招 标 文 件 规 定 填 写 漏 填 或 内 容 填 写 错 误 的 ; 不 同 投 标 人 的 投 标 文 件 由 同 一 台 电 脑 或 同 一 家 投 标 单

中 日 信 息 化 的 比 较 与 合 作 一 中 日 信 息 化 的 规 模 比 较

i 1) 系 统 运 作 前 设 定 *1. [2.1 网 页 主 机 名 称 设 定 ] -- 设 定 校 务 系 统 的 主 机 IP 地 址, 以 供 其 他 个 人 电 脑 连 接 及 使 用 该 系 统 *2. [2.3.1 输 入 / 修 改 学 校 资 料 ] -- 输 入 系 统 使

徐天宏:《基因天堂》.doc

自 服 务 按 钮 无 法 访 问 新 系 统 的 自 服 务 页 面 因 此 建 议 用 户 从 信 网 中 心 ( 主 页, 右 下 角 位 置 的 常 用 下 载, 或 校 园 网 用 户 自 服 务 ( 首 页

世华财讯模拟操作手册

证券代码: 证券简称:长城电脑 公告编号:

在 企 业 生 产 过 程 中 (E 水 泥 ), 往 往 需 要 测 量 计 算 许 多 数 据, 而 在 测 量 计 算 过 程 中, 我 们 要 遵 循 那 些 法 则 和 计 算 方 法, 这 就 是 学 习 本 章 的 目 的 重 点 学 习 实 验 数 据 误 差 估 算 及 分 析,

教师上报成绩流程图

ICS 35

Microsoft Word - 文件汇编.doc


抗 日 战 争 研 究 年 第 期

一 从 分 封 制 到 郡 县 制 一 从 打 虎 亭 汉 墓 说 起

第 三 章 审 计 证 据 2

一 公 共 卫 生 硕 士 专 业 学 位 论 文 的 概 述 学 位 论 文 是 对 研 究 生 进 行 科 学 研 究 或 承 担 专 门 技 术 工 作 的 全 面 训 练, 是 培 养 研 究 生 创 新 能 力, 综 合 运 用 所 学 知 识 发 现 问 题, 分 析 问 题 和 解 决

( 二 ) 现 行 统 一 高 考 制 度 不 利 于 培 养 人 的 创 新 精 神,,,,,,,,,,,,, [ ],,,,,,,,,,, :, ;,,,,,,? ( 三 ) 现 行 统 一 高 考 制 度 不 利 于 全 体 学 生 都 获 得 全 面 发 展,, [ ],,,,,,,,,,,

Microsoft Word - GT21L16S2W简要说明V3.7.doc


报 价 量 单 位 变 动 点 交 割 方 式 挂 牌 基 准 价 每 日 结 算 价 到 期 交 割 价 到 期 交 割 结 算 金 额 等 2.2 合 约 代 码 交 易 系 统 中 用 于 区 分 不 同 合 约 品 种 的 代 码, 由 标 的 债 券 缩 写 和 到 期 月 份 组 成 如

白皮书

随着执业中医师资格考试制度的不断完善,本着为我校中医学专业认证服务的目的,本文通过对我校中医类毕业生参加2012年和2013年的中医执业医师考试成绩及通过率、掌握率进行分析,并与全国的平均水平进行差异比较分析,以此了解我校执业中医师考试的现状,进而反映我校中医类课程总体教学水平,发现考核知识模块教学中存在的不足,反馈给相关学院和教学管理部门,以此提高教学和管理水平。

18 上 报 该 学 期 新 生 数 据 至 阳 光 平 台 第 一 学 期 第 四 周 至 第 六 周 19 督 促 学 习 中 心 提 交 新 增 专 业 申 请 第 一 学 期 第 四 周 至 第 八 周 20 编 制 全 国 网 络 统 考 十 二 月 批 次 考 前 模 拟 题 第 一 学

新, 各 地 各 部 门 ( 单 位 ) 各 文 化 事 业 单 位 要 高 度 重 视, 切 实 加 强 领 导, 精 心 组 织 实 施 要 根 据 事 业 单 位 岗 位 设 置 管 理 的 规 定 和 要 求, 在 深 入 调 查 研 究 广 泛 听 取 意 见 的 基 础 上, 研 究 提

伊 犁 师 范 学 院 611 语 言 学 概 论 全 套 考 研 资 料 <2016 年 最 新 考 研 资 料 > 2-2 语 言 学 纲 要 笔 记, 由 考 取 本 校 本 专 业 高 分 研 究 生 总 结 而 来, 重 点 突 出, 借 助 此 笔 记 可 以 大 大 提 高 复 习 效

第1篇 道路桥梁工程技术核心专业课程标准及学习绩效考评体系

国际财务报告准则第13号——公允价值计量

ETF、分级基金规模、份额变化统计

全国教师资格认定管理信息系统

<4D F736F F D DB9FAD5AEC6DABBF5B1A8B8E6CAAEC8FDA3BAB9FAD5AEC6DABBF5B5C4B6A8BCDBBBFAD6C6D3EBBBF9B2EEBDBBD2D7D1D0BEBF>

Transcription:

Lecture 20: MIPS Assembly Language II

Example: 过 程 调 用 int i; i 是 全 局 静 态 变 量 void set_array(int num) { array 数 组 是 局 部 变 量 int array[10]; for (i = 0; i < 10; i ++) { set_array 是 调 用 过 程 arrar[i] = compare (num, i); } compare 是 被 调 用 过 程 } int compare (int a, int b) compare 是 调 用 过 程 { sub 是 被 调 用 过 程 if ( sub (a, b) >= 0) return 1; else return 0; 问 题 : 过 程 调 用 对 应 的 机 器 代 码 如 何 表 示? } 1. 如 何 从 调 用 程 序 把 参 数 传 递 到 被 调 用 程 序? int sub (int a, int b) { return a-b; } 2. 如 何 从 调 用 程 序 执 行 转 移 到 被 调 用 程 序 执 行? 3. 如 何 从 被 调 用 程 序 返 回 到 调 用 程 序 执 行? 4. 如 何 保 证 调 用 程 序 中 寄 存 器 内 容 不 被 破 坏?

Procedure Call and Stack( 过 程 调 用 和 栈 ) 过 程 调 用 的 执 行 步 骤 ( 假 定 过 程 P 调 用 过 程 Q): compare (num, i); 将 参 数 放 到 Q 能 访 问 到 的 地 方 在 调 用 过 程 P 将 P 中 的 返 回 地 址 存 到 特 定 的 地 方, 将 控 制 转 移 到 过 程 Q 中 完 成 为 Q 的 局 部 变 量 分 配 空 间 ( 局 部 变 量 临 时 保 存 在 栈 中 ) 执 行 过 程 Q 在 被 调 用 过 程 Q 将 Q 执 行 的 返 回 结 果 放 到 P 能 访 问 到 的 地 方 中 完 成 取 出 返 回 地 址, 将 控 制 转 移 到 P, 即 返 回 到 P 中 执 行 MIPS 中 用 于 过 程 调 用 的 指 令 ( 见 MIPS 过 程 调 用 指 令 ) MIPS 规 定 少 量 过 程 调 用 信 息 用 寄 存 器 传 递 ( 见 MIPS 寄 存 器 功 能 定 义 ) 如 果 过 程 中 用 到 的 参 数 超 过 4 个, 返 回 值 超 过 2 个, 怎 么 办? 更 多 的 参 数 和 返 回 值 要 保 存 到 存 储 器 的 特 殊 区 域 中 这 个 特 殊 区 域 为 : 栈 (Stack) 一 般 用 栈 来 传 递 参 数 保 存 返 回 地 址 临 时 存 放 过 程 的 局 部 变 量 等 为 什 么? 便 于 递 归 调 用!

栈 (Stack) 的 概 念 栈 的 基 本 概 念 是 一 个 先 进 后 出 队 列 需 一 个 栈 指 针 指 向 栈 顶 元 素 每 个 元 素 长 度 一 致 用 入 栈 (push) 和 出 栈 (pop) 操 作 访 问 栈 元 素 MIPS 中 栈 的 实 现 用 栈 指 针 寄 存 器 $sp 来 指 示 栈 顶 元 素 每 个 元 素 的 长 度 为 32 位, 即 : 一 个 字 (4 个 字 节 ) 入 栈 和 出 栈 操 作 用 sw / lw 指 令 来 实 现, 需 用 add / sub 指 令 调 整 $sp 的 值, 不 能 像 x86 那 样 自 动 进 行 栈 指 针 的 调 整 ( 有 些 处 理 器 有 专 门 的 push/pop 指 令, 能 自 动 调 整 栈 指 针 如 x86) 栈 生 长 方 向 从 高 低 地 址 增 长, 而 取 数 / 存 数 的 方 向 是 低 高 地 址 ( 大 端 方 式 )» 每 入 栈 1 字,$sp- 4 $sp ; 每 出 栈 1 字,$sp+4 $sp 例 : 若 将 返 回 地 址 $ra 和 参 数 $a0 保 存 到 栈, 则 指 令 序 列 为 : sub $sp, $sp, 8 sw $ra, 4($sp) sw $a0, 0($sp) $sp $ra $a0 高 地 址 栈 增 长 的 方 向 低 地 址

栈 帧 的 概 念 各 过 程 有 自 己 的 栈 区, 称 为 栈 帧 (Stack frame), 即 过 程 的 帧 (procedure frame) 栈 由 若 干 栈 帧 组 成 用 专 门 的 帧 指 针 寄 存 器 指 定 起 始 位 置 当 前 栈 帧 范 围 在 帧 指 针 和 栈 指 针 之 间 程 序 执 行 时, 栈 指 针 可 移 动, 帧 指 针 不 变 所 以 过 程 内 对 栈 信 息 的 访 问 大 多 通 过 帧 指 针 进 行 X86 的 栈 帧 情 况 如 右 图 所 示 假 定 P 调 用 Q P 帧 中 Q 所 用 的 参 数 若 调 用 时 将 返 回 地 址 入 栈, 则 在 P 帧 中 存 放 返 回 地 址 帧 指 针 需 保 存 的 寄 存 器 Q 所 用 的 局 部 和 临 时 变 量 Q 传 给 其 他 过 程 的 参 数 栈 指 针 P frame Q frame

MIPS 中 的 过 程 调 用 ( 假 定 P 调 用 Q) 程 序 可 访 问 的 寄 存 器 组 是 所 有 过 程 共 享 的 资 源, 给 定 时 刻 只 能 被 一 个 过 程 使 用, 因 此 过 程 中 使 用 的 寄 存 器 的 值 不 能 被 另 一 个 过 程 覆 盖! MIPS 的 寄 存 器 使 用 约 定 : 保 存 寄 存 器 $s0 ~$s7 的 值 在 从 被 调 用 过 程 返 回 后 还 要 被 用, 被 调 用 者 需 要 保 留 临 时 寄 存 器 $t0 ~$t9 的 值 在 从 被 调 用 过 程 返 回 后 不 需 要 被 用 ( 需 要 的 话, 由 调 用 者 保 存 ), 被 调 用 者 可 以 随 意 使 用 参 数 寄 存 器 $a0~$a3 在 从 被 调 用 过 程 返 回 后 不 需 要 被 用 ( 需 要 的 话, 由 调 用 者 保 存 在 栈 帧 或 其 他 寄 存 器 中 ), 被 调 用 者 可 以 随 意 使 用 全 局 指 针 寄 存 器 $gp 的 值 不 变 在 过 程 调 用 时 帧 指 针 寄 存 器 $fp 用 栈 指 针 寄 存 器 $sp- 4 来 初 始 化 需 在 被 调 用 过 程 Q 中 入 栈 保 存 的 寄 存 器 ( 称 为 被 调 用 者 保 存 ) 返 回 地 址 $ra ( 如 果 Q 又 调 用 R, 则 $ra 内 容 会 被 破 坏, 故 需 保 存 ) 保 存 寄 存 器 $s0 ~$s7 (Q 返 后 P 可 能 还 会 用 到,Q 中 用 的 话 就 被 破 坏, 故 需 保 存 ) 除 了 上 述 寄 存 器 以 外, 所 有 局 部 数 组 和 结 构 类 型 变 量 也 要 入 栈 保 存 如 果 局 部 变 量 和 临 时 变 量 发 生 寄 存 器 溢 出 ( 寄 存 器 不 够 分 配 ), 则 也 要 入 栈 每 个 处 理 器 对 栈 帧 规 定 的 调 用 者 保 存 和 被 调 用 者 保 存 的 寄 存 器 可 能 不 同 例 : x86 中 返 回 地 址 保 存 在 调 用 过 程 栈 帧 中 ; 而 MIPS 则 在 被 调 用 过 程 栈 帧 中 保 存 x86 中 调 用 参 数 保 存 在 调 用 过 程 栈 帧 中 ; 而 MIPS 则 在 被 调 用 过 程 栈 帧 中 保 存 X86 中 调 用 过 程 的 帧 指 针 保 存 在 被 调 用 过 程 栈 帧 中 ;MIPS 也 一 样

过 程 调 用 时 MIPS 中 的 栈 和 栈 帧 的 变 化

Example in C: swap 假 定 swap 作 为 一 个 过 程 被 调 用,temp 对 应 $t0, 变 量 v 和 k 分 别 对 应 $s0 和 $s1 写 出 对 应 的 MIPS 汇 编 代 码 swap(int v[ ], int k) 问 题 : 上 述 假 设 有 何 问 题? 参 数 v 和 k 应 该 在 $a0 和 $a1 { sll $s2, $a1, 2 ; mulitply k by 4 addu $s2 $s2, $a0 ; address of v[k] int temp; lw $t0, 0($s2) ; load v[k] temp = v[k]; lw $s3, 4($s2) ; load v[k+1] v[k] = v[k+1]; v[k+1] = temp; sw sw $s3, 0($s2) $t0, 4($s2) ; store v[k+1] into v[k] ; store old v[k] into v[k+1] } 在 调 用 过 程 中 用 指 令 jal swap 进 行 swap 调 用 jal --- jump and link ( 跳 转 并 链 接 ) $31 = PC+4 ; $31=$ra goto swap 问 题 1: 若 swap 中 不 保 存 $s2, 则 会 发 生 什 么 情 况? caller 中 $s2 的 值 被 破 坏! 须 在 swap 中 保 存 $s2 问 题 2: 若 swap 中 不 保 存 $t0, 则 会 发 生 什 么 情 况? $t0 约 定 由 caller 保 存, 故 无 须 在 swap 栈 帧 中 保 存 $t0 调 用 程 序 sub $s2,$s3,$s1 jal swap add $s3,$s2,$t0 swap 程 序 jr $ra

swap: MIPS 中 的 一 个 过 程 示 例 swap: addi $sp,$sp, 12 ; 栈 增 长 3 个 sw $31, 8($sp) ; 返 回 地 址 入 栈 sw $s2, 4($sp) ; 保 留 寄 存 器 $s2 入 栈 sw $s3, 0($sp) ; 保 留 寄 存 器 $s3 入 栈... lw $s3, 0($sp) ; 恢 复 $s3 lw $s2, 4($sp) ; 恢 复 $s2 lw $31, 8($sp) ; 恢 复 $31($ra) addi $sp,$sp, 12 ; 退 栈 $sp sll $s2, $a1, 2 ; mulitply k by 4 addu $s2, $s2, $a0 ; address of v[k] lw $t0, 0($s2) ; load v[k] lw $s3, 4($s2) ; load v[k+1] sw $s3, 0($s2) ; store v[k+1] into v[k] sw $t0, 4($s2) ; store old v[k] into v[k+1] jr $31 ; 从 swap 返 回 到 调 用 过 程 问 题 : 是 否 一 定 要 将 返 回 地 址 ($31) 保 存 到 栈 帧 中? $ra $s2 $s3 如 果 swap 是 叶 子 过 程, 则 无 需 保 存 返 回 地 址 到 栈 中, 为 什 么? 如 果 将 所 有 内 部 寄 存 器 都 用 临 时 寄 存 器 ( 如 $t1 等 ), 则 叶 子 过 程 swap 的 栈 帧 为 空, 且 上 述 黑 色 指 令 都 可 去 掉 高 地 址 栈 增 长 的 方 向 $ra 的 内 容 不 会 被 破 坏!

Example: 过 程 调 用 int i; i 是 全 局 静 态 变 量 void set_array(int num) { array 数 组 是 局 部 变 量 int array[10]; for (i = 0; i < 10; i ++) { set_array 是 调 用 过 程 arrar[i] = compare (num, i); } compare 是 被 调 用 过 程 } int compare (int a, int b) { if ( sub (a, b) >= 0) return 1; else return 0; } int sub (int a, int b) { return a-b; } compare 是 调 用 过 程 sub 是 被 调 用 过 程 问 题 1: 编 译 器 如 何 为 全 局 变 量 和 局 部 变 量 分 配 空 间? 问 题 2: 执 行 set_array 的 结 果 是 什 么?

过 程 调 用 时 的 变 量 分 配 全 局 静 态 变 量 一 般 分 配 到 寄 存 器 或 在 R/W 存 储 区 ( 数 组 或 结 构 等 ) 该 例 中 只 有 一 个 简 单 变 量 i, 假 定 分 配 给 $s0 无 需 保 存 和 恢 复! 为 减 少 指 令 条 数, 并 减 少 访 问 内 存 次 数 在 每 个 过 程 的 过 程 体 中 总 是 先 使 用 临 时 寄 存 器 $t0~$t9, 临 时 寄 存 器 不 够 或 者 某 个 值 在 调 用 过 程 返 回 后 还 需 要 用, 就 使 用 保 存 寄 存 器 $s0~$s7 过 程 set_array 的 入 口 参 数 为 num, 没 有 返 回 参 数, 有 一 个 局 部 数 组, 被 调 用 过 程 为 compare, 因 此, 其 栈 帧 中 除 了 保 留 所 用 的 保 存 寄 存 器 外, 必 须 保 留 返 回 地 址 ( 是 否 保 存 $fp 要 看 具 体 情 况, 如 果 确 保 后 面 都 不 用 到 $fp, 则 可 以 不 保 存, 但 为 了 保 证 $fp 的 值 不 被 后 面 的 过 程 覆 盖, 通 常 情 况 下, 应 该 保 存 $fp 的 值 ), 并 给 局 部 数 组 预 留 4 10=40 个 字 节 的 空 间 从 过 程 体 来 看, 从 compare 返 回 后 还 需 要 用 到 数 组 基 地 址, 故 将 其 分 配 给 $s1 因 此 要 用 到 的 保 存 寄 存 器 有 两 个 :$s0 和 $s1, 但 只 需 要 保 存 $s1 另 外 加 上 返 回 地 址 $ra 帧 指 针 $fp 局 部 数 组, 其 栈 帧 空 间 最 少 为 3 4+40=52B

程 序 的 翻 译 链 接 和 加 载 ( 自 学 ) 不 同 的 高 级 语 言 有 不 同 的 编 译 器, 但 生 成 的 汇 编 语 言 一 样 前 面 许 多 例 子 说 明 了 编 译 器 如 何 把 高 级 语 言 语 句 翻 译 成 汇 编 指 令 每 台 机 器 的 汇 编 程 序 功 能 一 样, 与 高 级 语 言 无 关 目 标 文 件 就 是 机 器 语 言 ( 指 令 数 据 及 链 接 说 明 信 息 ) 如 何 链 接? 可 执 行 文 件 要 说 明 代 码 和 数 据 区 多 大, 并 给 出 每 条 指 令 的 机 器 码 及 其 地 址 各 数 据 及 其 地 址 将 多 个 过 程 ( 包 括 库 例 程 ) 的 目 标 文 件 链 接 成 一 个 可 执 行 文 件 加 载 可 执 行 文 件 到 存 储 器, 并 启 动 开 始 执 行 如 何 分 配 代 码 和 数 据 的 地 址? SKIP

复 习 :MIPS 程 序 和 数 据 的 存 储 器 分 配 每 个 MIPS 程 序 都 按 如 下 规 定 进 行 存 储 器 分 配 每 个 可 执 行 文 件 都 按 如 下 规 定 给 出 代 码 和 数 据 的 地 址 栈 区 位 于 堆 栈 高 端, 堆 区 位 于 堆 栈 低 端 静 态 数 据 区 存 放 全 局 变 量 ( 也 称 静 态 变 量 ), 指 所 有 过 程 之 外 声 明 的 变 量 和 用 Static 声 明 的 变 量 ; 从 固 定 的 0x1000 0000 处 开 始 向 高 地 址 存 放 全 局 指 针 $gp 总 是 0x1000 8000, 其 16 位 偏 移 量 的 访 问 范 围 为 0x1000 0000~0x1000 ffff, 可 遍 及 整 个 静 态 数 据 区 的 访 问 Heap 程 序 代 码 从 固 定 的 0x0040 0000 处 开 始 存 放 故 PC 的 初 始 值 为 0x0040 0000 BACK

目 标 文 件 的 链 接 ( 自 学 ) 过 程 A 和 过 程 B 分 别 编 译 汇 编 成 目 标 文 件, 链 接 后 生 成 一 个 可 执 行 文 件 过 程 A 的 目 标 文 件 代 码 的 长 度 为 0x100 数 据 的 长 度 为 0x20 链 接 前 地 址 总 是 从 0 开 始 实 际 是 指 令 机 器 码 0 是 由 x 待 定 的 地 址 0 是 由 B 待 定 的 地 址 链 接 前 地 址 总 是 从 0 开 始 X 的 地 址 待 定 B 的 地 址 待 定

目 标 文 件 的 链 接 ( 自 学 ) 过 程 A 和 过 程 B 分 别 编 译 汇 编 成 目 标 文 件, 链 接 后 生 成 一 个 可 执 行 文 件 过 程 B 的 目 标 文 件 代 码 的 长 度 为 0x200 数 据 的 长 度 为 0x30 0 是 由 Y 待 定 的 地 址 0 是 由 A 待 定 的 地 址

目 标 文 件 的 链 接 ( 自 学 ) 过 程 A 和 过 程 B 分 别 编 译 汇 编 成 目 标 文 件, 链 接 后 生 成 一 个 可 执 行 文 件 生 成 的 可 执 行 文 件 代 码 地 址 总 是 从 0040 0000 开 始 过 程 B 从 A 后 的 0x100 开 始 静 态 区 地 址 从 0x1000 0000 开 始 1000 0000=?+ 1000 8000 过 程 B 从 A 后 的 0x20 开 始 1000 8000+ FFFF 8000=1000 0000H?= 8000 ( 符 号 扩 展 后 为 FFFF 8000) BACK

MIPS 指 令 中 位 的 指 定 和 逻 辑 运 算 ( 自 学 ) 逻 辑 数 据 表 示 用 一 位 表 示 真 :1 -True / 假 :0-False N 位 二 进 制 数 可 表 示 N 个 逻 辑 数 据 逻 辑 运 算 按 位 进 行, 如 : And / Or / Shift Left / Shift Right 等 位 的 指 定 设 置 某 位 的 值 : 清 0: 与 掩 码 (1 101 1) 相 与 置 1: 与 位 串 (0 010 0) 相 或 判 断 某 位 的 值 : 是 否 为 0: 与 位 串 (0 010 0) 相 与 后, 是 否 为 0 是 否 为 1: 与 位 串 ( 0 010 0 ) 相 与 后, 是 否 不 为 0 MIPS 中 的 移 位 指 令 (sll / srl) 例 : srl $t2,$s0,8 $s0 右 移 8 位 后 送 $t2 op rs rt rd shamt func 000000 00000 10000 01010 01000 000010 逻 辑 数 据 和 数 值 数 据 在 形 式 上 并 无 差 别, 也 是 一 串 0/1 序 列, 机 器 本 身 不 能 识 别, 需 靠 指 令 的 类 型 来 识 别 包 括 后 面 所 讲 的 字 符 数 据 等 都 一 样

MIPS 指 令 中 常 数 的 指 定 ( 自 学 ) 程 序 中 经 常 需 要 使 用 常 数, 例 如 : C 编 译 器 gcc 中 52% 的 算 术 指 令 用 到 常 数 电 路 模 拟 程 序 Spice 中 69% 的 算 术 指 令 用 到 常 数 指 令 中 如 何 取 得 常 数 若 程 序 装 入 时, 常 数 已 在 内 存 中, 则 需 用 load 指 令 读 入 寄 存 器 在 指 令 中 用 一 个 立 即 数 来 使 用 常 数 例 1:i=i+4; Assuming variable i ~ $1 则 : addi $1, $1, 4 例 2:if (i<20). ; Assuming variable i ~ $1 则 : slti $3, $1, 20 ; if (i<20) $3=1 else $3=0 如 果 常 数 的 值 用 16 位 无 法 表 示, 怎 么 办? 用 lui 指 令 把 高 16 位 送 到 寄 存 器 的 高 16 位, 再 把 低 16 位 加 到 该 寄 存 器 中 例 3: 将 0000 0000 0011 1101 0000 0000 0000 1000 送 $3 中 则 : lui $3, 61 addi $3, $3, 8

MIPS 指 令 中 如 何 表 示 文 本 字 符 串 ( 自 学 ) 有 些 情 况 下, 程 序 需 要 处 理 文 本 例 如 : 西 文 文 本 由 ASCII 码 字 符 构 成 字 符 串 Java 等 语 言 使 用 Unicode 编 码 构 成 字 符 串 汉 字 文 本 使 用 的 汉 字 编 码 字 符 构 成 字 符 串 字 符 串 的 表 示 由 一 个 个 字 符 组 成, 长 度 不 定 有 三 种 表 示 方 式 :» 字 符 串 的 首 字 节 记 录 长 度» 用 其 他 变 量 来 记 录 长 度 ( 即 : 用 struc 类 型 来 描 述 )» 字 符 串 末 尾 用 一 个 特 殊 字 符 表 示 如 :C 语 言 用 字 符 (NULL) 来 标 记 字 符 串 结 束 如 何 在 指 令 中 表 示 字 符 ASCII 字 符 串, 每 个 字 符 由 8 位 组 成, 用 lb/sb 指 令 存 / 取 一 个 字 节 Unicode 及 汉 字 字 符 都 有 16 位, 用 lh/sh 指 令 存 / 取 两 个 字 节 例 :x[i] = y[j]; variables i,j ~ $1,$2, base address x,y ~ $3,$4 则 : add $5, $3, $1 ; $5=the address of x[i] add $6, $4, $2 ; $6=the address of y[j] lb $7, 0($6) ; $7=y[j] sb $7, 0($5) ; x[i]=$7 SKIP

数 据 类 型 和 MIPS 指 令 的 对 应 ( 自 学 ) C 语 言 中 的 char 为 8 位, Java 语 言 中 的 char 为 16 位 (Unicode)

本 讲 小 结 MIPS 指 令 格 式 R- 类 型 / I- 类 型 / J- 类 型 MIPS 寄 存 器 长 度 / 个 数 / 功 能 分 配 MIPS 操 作 数 寄 存 器 操 作 数 / 存 储 器 操 作 数 / 立 即 数 / 文 本 MIPS 指 令 寻 址 方 式 立 即 数 寻 址 / 寄 存 器 寻 址 / 相 对 寻 址 / 伪 直 接 寻 址 / 偏 移 寻 址 MIPS 指 令 类 型 算 术 / 逻 辑 / 数 据 传 送 / 条 件 分 支 / 无 条 件 转 移 MIPS 汇 编 语 言 形 式 操 作 码 的 表 示 / 寄 存 器 的 表 示 / 存 储 器 数 据 表 示 机 器 语 言 的 解 码 ( 反 汇 编 ) 高 级 语 言 汇 编 语 言 机 器 语 言 之 间 的 转 换 运 算 表 达 式 / If 语 句 / 循 环 / 数 组 访 问 / 过 程 / 堆 栈 / 栈 帧 其 他 指 令 系 统 :PowerPC 80x86 CISC vs. RISC