




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ARM 嵌入式系统结构与编程 嵌入式系统结构与编程 第第 2 版 版 邱铁邱铁 编著编著 清华大学出版社清华大学出版社 2013 年 8 月第 2 版 2015 年 8 月第 4 次印刷 ARM 嵌入式系统结构与编程 嵌入式系统结构与编程 第第 2 版 版 第第 6 8 章章 思考与练习题思考与练习题答案答案 此答案仅供教师教学用此答案仅供教师教学用 第第 6 章章 ARM 汇编伪指令与伪操作汇编伪指令与伪操作 思考与练习题思考与练习题答案答案 1 1 在在 ARMARM 汇编语言程序设计中 伪操作与伪指令的区别是什么 汇编语言程序设计中 伪操作与伪指令的区别是什么 解解答 答 伪指令是 ARM 处理器支持的汇编语言程序里的特殊助记符 它不在处理器运 行期间由机器执行 只是在汇编时将被合适的机器指令代替成 ARM 或 Thumb 指令 从而实现真正的指令操作 伪操作 Directive 是ARM汇编语言程序里的一些特殊的指令助记符 其作用主要 是为完成汇编程序做各种准备工作 对源程序运行汇编程序处理 而不是在计算机运 行期间由处理器执行 也就是说 这些伪操作只是汇编过程中起作用 一旦汇编结束 伪 操作也就随之消失 2 2 分析分析 ARMARM 汇编语言伪指令汇编语言伪指令 LDRLDR ADRLADRL ADRADR 的汇编结果 说明它们之间的区的汇编结果 说明它们之间的区 别 别 解解答 答 见教材 6 1 节的详细描述 3 3 在在 ADSADS 编译环境下 写出实现下列操作的伪操作 编译环境下 写出实现下列操作的伪操作 1 声明一个局部的算术变量 声明一个局部的算术变量 La var1 并将其初始化为并将其初始化为 0 2 声明一个局部的逻辑变量 声明一个局部的逻辑变量 Ll var 并将其初始化为并将其初始化为 FALSE 3 声明一个局部的字符串变量 声明一个局部的字符串变量 Ls var 并将其初始化为空串并将其初始化为空串 4 声明一个全局的逻辑变量 声明一个全局的逻辑变量 Gl var 并将其初始化为并将其初始化为 FALSE 5 声明一个全局的字符串变量 声明一个全局的字符串变量 Gs var 并将其初始化为空串并将其初始化为空串 6 声明一个全局的算术变量 声明一个全局的算术变量 Ga var 并将其赋值为并将其赋值为 0 xAA 7 声明一个全局的逻辑变量 声明一个全局的逻辑变量 Gl var 并将其赋值为并将其赋值为 TURE 8 声明一个全局的字符串变量 声明一个全局的字符串变量 Gs var 并将其赋值为 并将其赋值为 CHINA 解解答 答 1 LCLA La var1 ARM 嵌入式系统结构与编程 嵌入式系统结构与编程 第第 2 版 版 邱铁邱铁 编著编著 清华大学出版社清华大学出版社 2013 年 8 月第 2 版 2015 年 8 月第 4 次印刷 2 LCLL Ll var 3 LBLS Ls var 4 GBLL Gl var 5 GBLS Gs var 6 GBLA Ga var Ga var SETA 0 xAA 7 GBLL Gl var Gl var SETL TURE 8 GBLS Gs var Gs var SETS CHINA 4 4 有有 ARM ADSARM ADS 伪操作将寄存器列表伪操作将寄存器列表 R0R0 R5R5 R7R7 R8R8 的名称定义为的名称定义为 ReglistReglist 解解答 答 Reglist RLIST R0 R5 R7 R8 5 5 在在 ARMARM 标准标准 ADSADS 编译环境下编译环境下完成下列数据定义伪操作 完成下列数据定义伪操作 1 申请以申请以 data buffer1 为起始地址的连续的内存单元 并用依次用半字数为起始地址的连续的内存单元 并用依次用半字数 据据 0 x11 0 x22 0 x33 0 x44 0 x55 进行初始化 进行初始化 2 申请以申请以 Str buffer 为起始地址的连续的内存单元 并用字符串为起始地址的连续的内存单元 并用字符串 ARM7 and ARM9 进行初始化进行初始化 解答 解答 1 1 data buffer1 DCW 0 x11 0 x22 0 x33 0 x44 0 x55 2 2 Str buffer DCB ARM7 and ARM9 6 定义一个结构化的内存表 其首地址固定为定义一个结构化的内存表 其首地址固定为 0 x900 该结构化内存表包含 该结构化内存表包含 2 个域 个域 Fdata1 长度为长度为 8 个字节 个字节 Fdata2 长度为长度为 160 个字节 个字节 解答 解答 MAP 0 x900 Fdata1 FIELD 8 Fdata2 FIELD 160 7 7 在 GNU 编译环境下 写出实现下列操作的伪操作 1 分配一段字节内存单元 并用57 0 x11 031 Z 0 x76进行初始化 ARM 嵌入式系统结构与编程 嵌入式系统结构与编程 第第 2 版 版 邱铁邱铁 编著编著 清华大学出版社清华大学出版社 2013 年 8 月第 2 版 2015 年 8 月第 4 次印刷 2 分配一段半字内存单元 并用0 xFFE0 0 xAABB 0 x12 进行初始化 3 分配一段字内存单元 并用 0 x12345678 0 xAABBCCDD进行初始化 4 分配一段内存单元 并用长为8字节的数值0 x11填充100次 解答 解答 1 byte 57 0 x11 031 Z 0 xt6 2 hword 0 xFFE0 0 xAABB 12 或或 short 0 xFFE0 0 xAABB 12 3 word 0 x12345678 0 xAABBCCDD 或或 int 0 x12345678 0 xAABBCCDD 或或 long 0 x12345678 0 xAABBCCDD 4 fill 100 8 0 x11 8 8 写出与写出与 GNUGNU 编译环下伪操作编译环下伪操作 arm arm thumb thumb 功能相同的功能相同的 ADSADS 编译环境下的伪编译环境下的伪 操作 操作 解答 解答 ARM 或 CODE32 THUMB 或 CODE16 ARM 嵌入式系统结构与编程 嵌入式系统结构与编程 第第 2 版 版 邱铁邱铁 编著编著 清华大学出版社清华大学出版社 2013 年 8 月第 2 版 2015 年 8 月第 4 次印刷 第第 7 章章 汇编语言汇编语言程序设计 思考与练习题思考与练习题答案答案 1 分别写出分别写出 ARM集成开发环境下集成开发环境下 ARM汇编语句格式与汇编语句格式与 GNU ARM环境下环境下 ARM 汇编语句通用格式 并分析它们的区别 汇编语句通用格式 并分析它们的区别 解答 解答 1 ADS 环境下 ARM 汇编语句格式如下 symbol instruction comment symbol directive comment symbol pseudo instruction comment 2 GNU 环境下 ARM 汇编语言语句格式如下 label instruction comment label directive comment label pseudo instruction comment 2 局部标号提供分支指令在汇编程序的局部范围内跳转 它的主要用途是什么 局部标号提供分支指令在汇编程序的局部范围内跳转 它的主要用途是什么 并举一实例加以例说明 并举一实例加以例说明 解答 解答 ARM 汇编语言的局部标号是相对全局标号而言的 局部标号提供分支指令在汇 编程序的局部范围内跳转 主要用途是汇编子程序中的循环和条件编码 它是一个 0 99 之间的数字 后面可以有选择的附带一个符号名称 使用 ROUT 指示符可以限制局部标号的范围 从而做到只能在该范围内引用局 部标号 如果在该范围的上下两个方向都没有匹配的标号 汇编器将给出一个错误 信号并停止汇编 举例 1 b 2f 2 b 1b 3 先 对 内 存 地 址先 对 内 存 地 址0 xB000开 始 的开 始 的100个 字 内 存 单 元 填 入个 字 内 存 单 元 填 入 0 x10000001 0 x10000064 字数据 然后将每个字单元进行字数据 然后将每个字单元进行 64 位累加结位累加结 果保存于果保存于 R9 R8 R9 中存放高中存放高 32 位 位 解答 解答 程序代码如下 程序代码如下 1 在 在 GNU ARM 开发环境下编程 开发环境下编程 ARM 嵌入式系统结构与编程 嵌入式系统结构与编程 第第 2 版 版 邱铁邱铁 编著编著 清华大学出版社清华大学出版社 2013 年 8 月第 2 版 2015 年 8 月第 4 次印刷 global start text arm start MOV R0 0 xB000 MOV R1 0 x10000001 MOV R2 100 loop 1 STR R1 R0 4 ADD R1 R1 1 SUBS R2 R2 1 BNE loop 1 MOV R0 0 xB000 MOV R2 100 MOV R9 0 MOV R8 0 loop 2 LDR R1 R0 4 ADDS R8 R1 R8 ADC R9 R9 0 SUBS R2 R2 1 BNE loop 2 Stop B Stop end 2 在在 ARM 集成开发环境下编程集成开发环境下编程 AREA Fctrl CODE READONLY ENTRY CODE32 START MOV R0 0 xB000 MOV R1 0 x10000001 MOV R2 100 loop 1 STR R1 R0 4 ADD R1 R1 1 SUBS R2 R2 1 BNE loop 1 ARM 嵌入式系统结构与编程 嵌入式系统结构与编程 第第 2 版 版 邱铁邱铁 编著编著 清华大学出版社清华大学出版社 2013 年 8 月第 2 版 2015 年 8 月第 4 次印刷 MOV R0 0 xB000 MOV R2 100 MOV R9 0 MOV R8 0 loop 2 LDR R1 R0 4 ADDS R8 R1 R8 ADC R9 R9 0 SUBS R2 R2 1 BNE loop 2 Stop B Stop END 3 程序执行后输出结果如下 程序执行后输出结果如下 R8 0X400013BA R9 0X00000006 4 在在 GNU 环境下用环境下用 ARM 汇编语言编写程序初始化各汇编语言编写程序初始化各 ARM 处理器各模式下的堆处理器各模式下的堆 栈指针栈指针 SP mode R13 各模式的堆栈地址如下 各模式的堆栈地址如下 equ ISR STARTADDRESS 0 xcFFF000 设置栈的内存基地址设置栈的内存基地址 equ UserStack ISR STARTADDRESS 用户模式堆栈地址用户模式堆栈地址 equ SVCStack ISR STARTADDRESS 64 管理模式堆栈地址管理模式堆栈地址 equ UndefStack ISR STARTADDRESS 64 2 未定义模式堆栈地址未定义模式堆栈地址 equ AbortStack ISR STARTADDRESS 64 3 中止模式堆栈地址中止模式堆栈地址 equ IRQStack ISR STARTADDRESS 64 4 IRQ 模式堆栈地址模式堆栈地址 equ FIQStack ISR STARTADDRESS 64 5 FIQ 模式堆栈地址模式堆栈地址 解答 解答 参考程序参考程序 equ ISR STARTADDRESS 0XCFFF000 设置栈的内存基地址 equ UserStack ISR STARTADDRESS 用户模式堆栈地址 equ SVCStack ISR STARTADDRESS 64 管理模式堆栈地址 equ UnderfStack ISR STARTADDRESS 64 2 未定义模式堆栈地址 equ AbortStack ISR STARTADDRESS 64 3 中止模式堆栈地址 equ IRQStack ISR STARTADDRESS 64 4 IRQ 模式堆栈地址 equ FIQStack ISR STARTADDRESS 64 5 FIQ 模式堆栈地址 equ USERMODE 0X10 用户模式 equ SVCMODE 0X13 管理模式 ARM 嵌入式系统结构与编程 嵌入式系统结构与编程 第第 2 版 版 邱铁邱铁 编著编著 清华大学出版社清华大学出版社 2013 年 8 月第 2 版 2015 年 8 月第 4 次印刷 equ UNDEFMODE 0X1B 未定义模式 equ ABORTMODE 0X17 中止模式 equ IRQMODE 0X12 IRQ 模式 equ FIQMODE 0X11 FIQ 模式 equ MODEMASK 0X1F 模式位掩码 global start text start MRS R0 CPSR BIC R0 R0 MODEMASK 设置管理模式下的 SP ORR R1 R0 SVCMODE MSR CPSR c R1 进入管理模式 LDR SP SVCStack 设置未定义模式下的 SP ORR R1 R0 UNDEFMODE MSR CPSR c R1 进入未定义模式 LDR SP UnderfStack 设置中止模式下的 SP ORR R1 R0 ABORTMODE MSR CPSR c R1 进入中止模式 LDR SP AbortStack 设置 IRQ 模式下的 SP ORR R1 R0 IRQMODE MSR CPSR c R1 进入 IRQ 模式 LDR SP IRQStack 设置 FIQ 模式下的 SP ORR R1 R0 FIQMODE MSR CPSR c R1 进入 FIQ 模式 LDR SP FIQStack 设置用户模式下的 SP ORR R1 R0 USERMODE MSR CPSR c R1 进入用户模式 LDR SP UserStack stop B stop end ARM 嵌入式系统结构与编程 嵌入式系统结构与编程 第第 2 版 版 邱铁邱铁 编著编著 清华大学出版社清华大学出版社 2013 年 8 月第 2 版 2015 年 8 月第 4 次印刷 5 内存数据区定义如下 内存数据区定义如下 Src long 1 2 3 4 5 6 7 8 9 0 xA 0 xB 0 xC 0 xD 0 xE 0 xF 0 x10 long 1 2 3 4 5 6 7 8 9 0 xA 0 xB 0 xC 0 xD 0 xE 0 xF 0 x10 Src Num long 32 Dst long 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 long 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 请用请用 ARM 指令编写程序 实现将数据从源数据区指令编写程序 实现将数据从源数据区 Src 拷贝到目标数据区拷贝到目标数据区 Dst 要求 要求 以以 6 个字为单位进行块拷贝 如果不足个字为单位进行块拷贝 如果不足 6 个字时则以字为单位进行拷贝 其中数据个字时则以字为单位进行拷贝 其中数据 区区 Src Num 处存放源数据的个数 处存放源数据的个数 解答 解答 参考程序参考程序 寄存器使用说明 R0 源数据区指针 R1 目的数据区指针 R2 需要拷贝的字数 R4 R9 批量拷贝使用的寄存器组 global start text start LDR R0 Src R0 源数据区指针 LDR R1 Dst R1 目的数据区指针 LDR R2 Src Num LDR R2 R2 获取需要拷贝的字数 CMP R2 6 BCC copy word 如果 R2 小于 6 则进行字拷贝 copy 6word LDMIA R0 R4 R9 STMIA R1 R4 R9 SUB R2 R2 6 CMP R2 6 BCS copy 6word 如果 R2 大于 6 则进行 6 字块拷 copy word LDR R4 R0 4 STR R4 R1 4 SUBS R2 R2 1 BNE copy word ARM 嵌入式系统结构与编程 嵌入式系统结构与编程 第第 2 版 版 邱铁邱铁 编著编著 清华大学出版社清华大学出版社 2013 年 8 月第 2 版 2015 年 8 月第 4 次印刷 stop B stop ltorg Src long 1 2 3 4 5 6 7 8 9 0 xA 0XB 0XC 0XD 0XE 0XF 0X10 long 1 2 3 4 5 6 7 8 9 0 xA 0XB 0XC 0XD 0XE 0XF 0X10 Src Num long 32 Dst long 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 long 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 end 6 6 将一个存放在将一个存放在 R1 R0 中的中的 64 位数据 其中位数据 其中 R1 中存放高中存放高 32 位 的高位和低位 的高位和低 位对称换位 如第位对称换位 如第 0 位与第位与第 63 位调换 第位调换 第 1 位与第位与第 62 位调换 第位调换 第 2 位与第位与第 61 位调换 第位调换 第 31 位与第位与第 32 位调换 位调换 解答 解答 参考程序参考程序 寄存器使用说明 R0 源数据的低 32 位 R1 源数据的高 32 位 R2 目标数据的低 32 位 R3 目标数据的高 32 位 R4 计数器 初值为 32 递减计数至 0 R5 临时存放数据的最低位 global start text start LDR R0 0X55555555 输入数据的低 32 位 LDR R1 0X55555555 输入数据的高 32 位 MOV R2 0 目标数据的低 32 位 MOV R3 0 目标数据的高 32 位 MOV R4 32 计数器 shift low AND R5 R0 1 取出源数据低 32 位的最低位送入 R5 中暂存 ORR R3 R5 R3 LSL 1 将目标数据低 32 位左移一位 并将 取出的数据送到其最低位 MOV R0 R0 LSR 1 源数据低 32 位右移一位 ARM 嵌入式系统结构与编程 嵌入式系统结构与编程 第第 2 版 版 邱铁邱铁 编著编著 清华大学出版社清华大学出版社 2013 年 8 月第 2 版 2015 年 8 月第 4 次印刷 SUBS R4 R4 1 递减计数 BNE shift low MOV R4 32 恢复计数器初值 shift hight AND R5 R1 1 取出源数据高 32 位的最低位送入 R5 中暂存 ORR R2 R5 R2 LSL 1 将目标数据高 32 位左移一位 并将 取出的数据送到其最低位 MOV R1 R1 LSR 1 源数据高 32 位右移一位 SUBS R4 R4 1 递减计数 BNE shift hight MOV R0 R2 MOV R1 R3 stop B stop end 7 内存数据区定义如下 内存数据区定义如下 DataZone DCD 0 x12345678 0 x87654321 0 xABCDEF12 0 xCDEFAB45 DCD 0 x20932197 0 xABC99DA3 0 x5522AB90 0 x338899A2 DCD 0 x2345FDEA 0 x77AD3F61 0 x5290C316 0 x2728CE2A DCD 0 x9AC67D4F 0 x8FB247AE 0 x2064887C 0 xCCB3267A DCD 0 x2DFA1947 0 xA245861B 0 x9235AD78 0 xC365A247 DCD 0 x2F965AA4 0 x92348365 0 xABC90273 0 x47598334 DCD 0 x453B346A 0 x23AE23DD 0 x35563242 0 x2354CAF2 DCD 0 x54379652 0 xA354EF34 0 xBBB32523 0 x234B289A 以上可以看作以上可以看作一个一个 8 4 矩阵 请用矩阵 请用 ARM 汇编语言在汇编语言在 ARM 集成开发环境下设集成开发环境下设 计程序 实现对矩阵的转置操作 计程序 实现对矩阵的转置操作 如果改为在如果改为在 GNU ARM 环境下编程 程序应如何修改 环境下编程 程序应如何修改 在 ARM 集成开发环境下编程 寄存器使用说明 R0 存放源矩阵数据的起始地址 R1 指向目标知阵数据的地址 R2 源矩阵的行坐标 R3 源矩阵的列坐标 R4 转置过程中存放临时数据 AREA Conversion CODE READONLY 声明代码段 Conversion ENTRY 标识程序放口 CODE32 start ARM 嵌入式系统结构与编程 嵌入式系统结构与编程 第第 2 版 版 邱铁邱铁 编著编著 清华大学出版社清华大学出版社 2013 年 8 月第 2 版 2015 年 8 月第 4 次印刷 LDR R0 DataZone R0 为源矩阵的数据的起始 地址 MOV R1 R0 ADD R1 R1 128 R1 初始化为转目标矩阵数 据的起始地址 MOV R2 0 行坐标初始为 0 MOV R3 0 列坐标初始为 0 col row 依次取出各行中第 R3 列的数 据 MOV R4 R3 ADD R4 R4 R2 LSL 2 LDR R4 R0 R4 LSL 2 STR R4 R1 4 将取出的数存入目标矩阵中 ADD R2 R2 1 行坐标值加 1 准备取下一 行的数据 CMP R2 8 判断是否已经取到最后一 行 BCC row 如果R2小于8则继续循环 MOV R2 0 行坐标置为 0 回到第一行 ADD R3 R3 1 列坐标值加 1 准备处理下 一行 CMP R3 4 判断是否已经处理到最后 一 BCC col 如果R3小于4则继续循环 stop B stop LTORG DataZone DCD 0 x12345678 0 x87654321 0 xABCDEF12 0 xCDEFAB45 DCD 0 x20932197 0 xABC99DA3 0 x5522AB90 0 x338899A2 DCD 0 x2345FDEA 0 x77AD3F61 0 x5290C316 0 x2728CE2A DCD 0 x9AC67D4F 0 x8FB247AE 0 x2064887C 0 xCCB3267A DCD 0 x2DFA1947 0 xA245861B 0 x9235AD78 0 xC365A247 DCD 0 x2F965AA4 0 x92348365 0 xABC90273 0 x47598334 DCD 0 x453B346A 0 x23AE23DD 0 x35563242 0 x2354CAF2 DCD 0 x54379652 0 xA354EF34 0 xBBB32523 0 x234B289A END 在在 GNU ARM 开发环境下编程 开发环境下编程 ARM 嵌入式系统结构与编程 嵌入式系统结构与编程 第第 2 版 版 邱铁邱铁 编著编著 清华大学出版社清华大学出版社 2013 年 8 月第 2 版 2015 年 8 月第 4 次印刷 寄存器使用说明 R0 存放源矩阵数据的起始地址 R1 指向目标知阵数据的地址 R2 源矩阵的行坐标 R3 源矩阵的列坐标 R4 转置过程中存放临时数据 global start text start LDR R0 DataZone R0 为源矩阵的数据的起始地址 MOV R1 R0 ADD R1 R1 128 R1 初始化为转目标矩阵数据的起始地址 MOV R2 0 行坐标初始为 0 MOV R3 0 列坐标初始为 0 col row 依次取出各行中第 R3 列的数据 MOV R4 R3 ADD R4 R4 R2 LSL 2 LDR R4 R0 R4 LSL 2 STR R4 R1 4 将取出的数存入目标矩阵中 ADD R2 R2 1 行坐标值加 1 准备取下一行的数据 CMP R2 8 判断是否已经取到最后一行 BCC row 如果 R2 小于 8 则继续循环 MOV R2 0 行坐标置为 0 回到第一行 ADD R3 R3 1 列坐标值加 1 准备处理下一行 CMP R3 4 判断是否已经处理到最后一 BCC col 如果 R3 小于 4 则继续循环 stop B stop ltorg DataZone int 0 x12345678 0 x87654321 0 xABCDEF12 0 xCDEFAB45 int 0 x20932197 0 xABC99DA3 0 x5522AB90 0 x338899A2 int 0 x2345FDEA 0 x77AD3F61 0 x5290C316 0 x2728CE2A int 0 x9AC67D4F 0 x8FB247AE 0 x2064887C 0 xCCB3267A int 0 x2DFA1947 0 xA245861B 0 x9235AD78 0 xC365A247 int 0 x2F965AA4 0 x92348365 0 xABC90273 0 x47598334 int 0 x453B346A 0 x23AE23DD 0 x35563242 0 x2354CAF2 int 0 x54379652 0 xA354EF34 0 xBBB32523 0 x234B289A end ARM 嵌入式系统结构与编程 嵌入式系统结构与编程 第第 2 版 版 邱铁邱铁 编著编著 清华大学出版社清华大学出版社 2013 年 8 月第 2 版 2015 年 8 月第 4 次印刷 第第 8 章章 ARM 汇编语言与嵌入式汇编语言与嵌入式 C 混合编程混合编程 思考与练习题思考与练习题答案答案 1 严格按照嵌入式严格按照嵌入式 C 语言的编程规范 写一个语言的编程规范 写一个 C 语言程序 实现将一个二维数组语言程序 实现将一个二维数组 内的数据行和列进行排序 内的数据行和列进行排序 解答 解答 对行和列分别进行排序 对行和列分别进行排序 选择排序 void Sort int array int count int i j k max for i 0 i count i max array i k i for j i jmax max array j k j array k array i array i max 直接作为一维数组排序 void SortXY int array int x int y Sort array x y Main int array 3 3 2 3 6 1 4 9 8 5 7 SortXY int array 3 3 2 嵌入式嵌入式 C 程序设计中常用的移位操作有哪几种 请说明每种运算所对应的程序设计中常用的移位操作有哪几种 请说明每种运算所对应的 ARM ARM 嵌入式系统结构与编程 嵌入式系统结构与编程 第第 2 版 版 邱铁邱铁 编著编著 清华大学出版社清华大学出版社 2013 年 8 月第 2 版 2015 年 8 月第 4 次印刷 指令实现 指令实现 解答 解答 右移 对应 LSR 3 volatile 限制符在程序中起到什么作用 请举例说明 限制符在程序中起到什么作用 请举例说明 解答 解答 volatile 的本意为 暂态的 或 易变的 该说明符起到抑制编译器优化的作用 此题有这句话就算对 对于一个变量 如果编译器发现赋值后 没有变化 编 译器就可能优化代码 直接从内部高速缓存 CACHE 或寄存器获取数据 而不是从 内存中读取 如果在这段时间里 变量被中断服务或外围设备输入等编译器未知的 原因更改 程序可能没有获得最新的值而导致运行结果异常 举例可以参考教材 8 3 1 节的实例 4 请分析下列程序代码的执行结果 请分析下列程序代码的执行结果 include main int value 0 xFF1 int p1 p2 p3 p4 p1 p2 p3 p4 printf p4 x n p4 5 5 分析宏定义分析宏定义 define POWER x x x define POWER x x x 是否合理 举例说明 如果不合理 应如何是否合理 举例说明 如果不合理 应如何 更改 更改 解答 解答 不合理 如果参数为 a b 则结果为 a b a b 错误 应改为 define POWER x x x 6
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿感官认知游戏教学设计
- 财务部月度报表编制及分析实操手册
- 编织地垫设计行业跨境出海项目商业计划书
- 宠物品牌连锁加盟模式推广创新创业项目商业计划书
- 有机猪疾病防控创新创业项目商业计划书
- 高校教师教学质量评估制度
- 肿瘤标志物检测系统行业深度调研及发展项目商业计划书
- 幼儿园冬季安全防护工作计划
- 小学英语单元教学重点提炼
- 高中数学解题技巧与思考方法
- 艺人独家经纪合同(标准版)
- 2025年肺功能证考试题及答案
- 2026中国海洋石油集团有限公司秋季校园招聘备考考试题库附答案解析
- 2025年及未来5年中国羊奶粉行业市场调研分析及投资战略咨询报告
- 学校物业委托管理服务合同7篇
- 2025-2026学年人教版二年级上册数学第三单元测试卷(含答案)(三套)
- 《守望成长法治护航》法制教育主题班会
- 桡骨骨折课件教学
- 2025年特种作业类冶金煤气作业理论知识-理论知识参考题库含答案解析(5卷)
- 2025-2030中国节能玻璃材料市场发展动态及竞争格局研究报告
- 数据标注课件
评论
0/150
提交评论