10.07.2015 Views

MPLAB® C30 C 编译器用户指南

MPLAB® C30 C 编译器用户指南

MPLAB® C30 C 编译器用户指南

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

MPLAB ® <strong>C30</strong> 用 户 指 南4.12 函 数 调 用 约 定调 用 函 数 时 :• 寄 存 器 W0-W7 由 调 用 函 数 保 存 。 为 保 存 寄 存 器 的 值 , 调 用 函 数 必 须 将 这 些 值 压 入堆 栈 。• 寄 存 器 W8-W14 由 被 调 用 函 数 保 存 。 被 调 用 函 数 必 须 保 存 它 会 修 改 的 任 何 这 些 寄 存器 。• 寄 存 器 W0-W4 用 于 存 放 函 数 返 回 值 。表 4-3:需 要 的 寄 存 器数 据 类 型char 1int 1short 1pointer 1需 要 的 寄 存 器 数long 2 ( 邻 近 的 – 对 齐 到 偶 数 编 号 的 寄 存 器 )float 2 ( 邻 近 的 – 对 齐 到 偶 数 编 号 的 寄 存 器 )double* 2 ( 邻 近 的 – 对 齐 到 偶 数 编 号 的 寄 存 器 )long double 2 ( 邻 近 的 – 对 齐 到 以 4 的 倍 数 编 号 的 寄 存 器 )structure 结 构 中 2 个 字 节 使 用 1 个 寄 存 器* 如 果 使 用 -fno-short-double, double 等 价 于 long double。参 数 存 放 到 可 用 的 第 一 批 ( 个 ) 对 齐 的 邻 近 寄 存 器 中 。 如 果 需 要 的 话 , 调 用 函 数 必 须保 存 参 数 。 结 构 没 有 任 何 对 齐 限 制 ; 如 果 有 足 够 的 寄 存 器 来 保 存 整 个 结 构 , 结 构 参 数将 占 用 寄 存 器 。 函 数 结 果 存 储 在 从 W0 开 始 的 连 续 寄 存 器 中 。4.12.1 函 数 参 数前 八 个 工 作 寄 存 器 (W0-W7) 用 于 存 储 函 数 参 数 。 参 数 以 自 左 向 右 的 顺 序 分 配 到 寄 存器 中 , 且 参 数 被 分 配 到 对 齐 适 当 的 第 一 个 可 用 寄 存 器 中 。下 面 的 示 例 中 , 所 有 参 数 都 通 过 寄 存 器 传 递 , 尽 管 这 些 参 数 不 是 以 在 声 明 中 出 现 的 顺序 存 放 在 寄 存 器 中 。 这 种 格 式 允 许 MPLAB <strong>C30</strong> 编 译 器 最 高 效 地 使 用 可 用 的 参 数 寄 存器 。例 4-1:函 数 调 用 模 型voidparams0(short p0, long p1, int p2, char p3, float p4, void *p5){/*** W0 p0** W1 p2** W3:W2 p1** W4 p3** W5 p5** W7:W6 p4*/...}DS51284C_CN 第 72 页© 2005 Microchip Technology Inc.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!