- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
环境:ARM Cortex m4f 的 GCC 4.7.3 (arm-none-eabi-gcc)。裸机(实际上是 MQX RTOS,但在这里无关紧要)。 CPU 处于 Thumb 状态。
这是我正在查看的一些代码的反汇编程序列表:
//.label flash_command
// ...
while(!(FTFE_FSTAT & FTFE_FSTAT_CCIF_MASK)) {}
// Compiles to:
12: bf00 nop
14: f04f 0300 mov.w r3, #0
18: f2c4 0302 movt r3, #16386 ; 0x4002
1c: 781b ldrb r3, [r3, #0]
1e: b2db uxtb r3, r3
20: b2db uxtb r3, r3
22: b25b sxtb r3, r3
24: 2b00 cmp r3, #0
26: daf5 bge.n 14 <flash_command+0x14>
常量(在扩展宏等之后)是:
address of FTFE_FSTAT is 0x40020000u
FTFE_FSTAT_CCIF_MASK is 0x80u
这是在没有优化 (-O0) 的情况下编译的,所以 GCC 不应该做任何花哨的事情...... 然而,我没有得到这段代码。 答案后编辑:永远不要假设这一点。我的问题是关闭优化会产生一种错误的安全感。
我读到“uxtb r3,r3”是截断 32 位值的常用方法。为什么要将其截断两次然后进行符号扩展?这到底是怎么等同于 C 代码中的位掩码操作的呢?
我在这里错过了什么?
编辑:涉及的事物类型:所以 FTFE_FSTAT 的实际宏扩展归结为
((((FTFE_MemMapPtr)0x40020000u))->FSTAT)
结构定义为
/** FTFE - Peripheral register structure */
typedef struct FTFE_MemMap {
uint8_t FSTAT; /**< Flash Status Register, offset: 0x0 */
uint8_t FCNFG; /**< Flash Configuration Register, offset: 0x1 */
//... a bunch of other uint_8
} volatile *FTFE_MemMapPtr;
最佳答案
这两个uxtb
指令是编译器愚蠢的,如果你打开优化,它们应该被优化掉。 sxtb
是出色的编译器,使用了您在未优化代码中不会想到的技巧。
第一个 uxtb
是因为您从内存中加载了一个字节。编译器正在将寄存器 r3 的其他 24 位清零,以便字节值填满整个寄存器。
第二个 uxtb
是因为您要与一个 8 位值进行与运算。编译器意识到结果的高 24 位将始终为零,因此它使用 uxtb
清除高 24 位。
uxtb
指令都没有做任何有用的事情,因为 sxtb
指令无论如何都会覆盖 r3
的高 24 位。优化器应该意识到这一点,并在启用优化的情况下进行编译时将其删除。
sxtb
指令将您关心的一位0x80
移入寄存器r3
的符号位。这样,如果位 0x80
被设置,则 r3
变为负数。所以现在编译器可以与 0
进行比较以确定该位是否已设置。如果该位未设置,则bge
指令分支回到while
循环的顶部。
关于c - 这个反汇编如何对应给定的 C 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34189516/
我想检查我的应用程序或系统中是否存在库。在 Java 中,我通常执行 System.loadlibrary,但是有谁知道 C 中类似的相应调用吗? 最佳答案 是dlopen打开一个库,dlsym 从加
我在 typescript 中输入以下内容 export type Excludable = T & { isExcluded?: boolean } 其中过滤值: export type Filte
我最近在我的应用程序中添加了一种方法,可以自动格式化 TextView ,从“50000”到“50,000”,效果绝对完美。现在我遇到的问题是,在我的应用程序中,有多个按钮功能可以从该 TextVie
SELECT * FROM conversations WHERE chatMembers LIKE '%1%'AND chatMembers LIKE '%10%' 对话表 id | chatMem
我正在编写一个需要将 Java Date() 值保存到 MySQL 数据库的 RESTful Web 服务,但是,我不确定 MySQL 中可以保存 Java Date() 的数据类型是什么,或者我是否
同样,在任何 Red Hat 或 JBoss 站点上都没有关于此的信息,所以我在这里问... 我不确定是 13 还是 14。 最佳答案 Mapping the Community versions w
同样,在任何 Red Hat 或 JBoss 站点上都没有关于此的信息,所以我在这里问... 我不确定是 13 还是 14。 最佳答案 Mapping the Community versions w
我曾尝试使用 swift 开发一款利用 iPhone 的 3D 触摸硬件的游戏。然而,当我将我的应用程序提交到 App Store 时,它被拒绝了,因为该游戏无法在 iPad 上玩。 我的问题是,
Qt 的有序关联容器对应项 std::map是QMap , std::set是QSet , 对于无序关联容器 std::unordered_map是QHash . 我应该用什么来代替std::unor
JavaScript 方法 String.fromCharCode() 在以下意义上与 Python 的 unichar() 等效: print unichr(213) # prints Õ on t
正如谷歌在 "Discontinuing support for JSON-RPC and Global HTTP Batch Endpoints" 中提到的那样,Google API 客户端库已重新
我正在使用 MapLayer 和 MapOverlay 在 map 中创建自己的路径/折线,GPS 捕获的所有点都存储在一个结构中,以便我可以访问它们。随时。 现在,我希望路径在用户操作 map (缩
我们使用 Adobe Flash Builder 创建由 Flex 提供支持的交互式 Web 应用程序。现在我们正在寻找替代方案,让我们在 UI 设计和迎合 HTML5 的编码方面拥有同样的开发便
我想知道Android/Java 中类似C#/C++ 中的GetTickCount 方法的相应方法吗? 最佳答案 Android 为 SystemClock.uptimeMillis() .请注意,u
我用 Vue + Phaser 开始了新项目,但是当我尝试加载 Assets 时,this.game.load.image 中的“load”和“add”返回“undefined”。我尝试从 JS 文件
我是一名优秀的程序员,十分优秀!