问题标签 [thumb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
assembly - 将数据写入绝对地址
我目前正在使用 Cortex-M3 微控制器上的汇编程序。我不确定这是否重要,但给你。
我需要将一个值写入内存中的某个地址。这是我尝试过的:
但似乎我需要参考相对于 PC 寄存器的 VTOR 地址。问题是是否有办法不引用地址相关并让它自动执行(这样它基本上看起来像我的方法)。
我正在使用 GNU 汇编程序。
linux - _start 可以是拇指功能吗?
请帮助我使用 arm926ejs cpu 的 gnu 汇编程序。
我尝试构建一个简单的程序(test.S):
并成功构建它:
但是当我在 arm 目标 linux 环境中运行程序时,我得到一个错误:
我究竟做错了什么?_start 函数可以是拇指函数吗?或者它总是手臂功能?
assembly - 与 arm 指令集相比,拇指的指令数如何增加?
我在一篇研究论文中读到,当使用 thumb 指令时,代码大小会减小,但有时这会导致指令数量增加,从而使 thumb 执行速度变慢。但是指令数是如何增加的呢?是不是像那些对拇指来说太复杂的指令被分成多个指令?这是我的直觉。想验证我是否以正确的方式思考。
exception-handling - 如何为 Cortex-M3 设置异常处理程序
我开始在 STM32L152 Cortex-M3 上做一些简单的项目......
我读到 M3 仅是 thumb2,因此,我们需要将异常处理程序地址的 LSB 保持为“1”以保持拇指模式。
由于指令是 16 位或 32 位的,所以说“reset_handler”符号的地址 LSB = 0 是否正确?
如果是这样,一般来说,如何/何时/在哪里将处理程序符号(reset_handler、NMI_handler 等)的 LSB 设置为“1”?
非常感谢
branch - Using B instructions in Cortex-M3 (thumb)
I read that in Cortex-M3 which is thumb only, whenever we write to PC, we must make sure the the target address LSB is a '1' to ensure the processor stays in thumb mode.
Also, when we use 'BX reg', the reg values must have LSB = 1 to enable thumb mode.
How about the case when we are using a 'B label' in a cortex-m3? this 'label' will have a value with LSB = 0 since 16-bit/32-bit instructions are aligned to even address. Isn't 'B label' equivalent to 'PC := label'?
Are 'B label' and 'BL label' exceptional cases where the writing of PC will not affect the processor mode?
Thank you.
android - 如何将 rust 代码编译并链接到 android apk 打包应用程序中
我正在尝试将 Rust 代码添加到 android NDK 示例(本机活动);每当我将 Rust 代码(编译为 .a)链接到 .so 时,它就无法运行。
我从这里继续获取信息以获取 android 感知 rust 编译器和“独立工具链” https://github.com/mozilla/rust/wiki/Doc-building-for-android
有人在 Rust IRC 频道上建议我需要在某处提及“拇指”;是否有传递给 rustc 的选项,或者我是否必须首先以不同的方式构建它?
我当然能够在桌面版本上互相调用 rust & c。
是否有一个示例,其中有人在 .apk 中使用了 rust 代码;它必须很简单。要破译复杂项目的makefile非常困难。(我认为通过阅读伺服源很难弄清楚这一点)
我已经验证了这个过程会生成一个可用的包而不会生锈;如果我链接未剥离的 rust 代码,它只会无法运行 ——即使它没有达到(即使链接没有告诉我任何错误)。如果我删除对“rusty_android()”的调用,它就可以工作。如果我将对 rusty_android 的调用移动到未达到的点,它仍然不起作用。我可以用 'nm' 验证 'rusty_android' 是否在 .so ... 中。
这是我当前的构建过程:它取自 android native-activity 示例;我添加了一个带有单个 extern 函数返回值的 rust 源文件,并尝试从示例的 C main 调试打印
通过比较 LLVM IR 和 asm 源,可能需要一些特定于“拇指”的东西的怀疑,但奇怪的是,这将是除“arm-linux-androideabi”之外的额外选项
arm - What's the meaning of W suffix for thumb-2 instruction?
There is a w suffix for thumb-2 instruction as below, how does it change the semantic of the instruction without it? The search result is very noisy and I didn't get the answer.
addw r0, r1, #0
linux-kernel - “THUMB”宏在 ARM-linux 代码中的作用是什么?
我正在查看 head.S ARM linux 代码。我知道拇指模式是什么。但是有一行,例如THUMB(it eq)
,它是一个预定义的宏,因为#define THUMB(x...) x
dotdotdot是实际编写的。
请告诉我宏的作用。
arm - ARM Cortex-M4:在汇编中调用 printf 时遇到的问题
我试图在 ARM M4 程序集中调用 printf 并遇到一些问题。目的是转储 R1 中的内容。代码如下
我遇到的问题是,当将“output_string”地址放入R0时,该值加上一个额外的1。例如,如果符号“output_string”的值为0x2000,则R0将得到值0x2001。
我觉得这与 THUMB/ARM 模式有关。但是我已经在数据部分声明了“output_string”,为什么汇编器仍然将它翻译为指令地址?
还是有一些更正式的方法来进行这种汇编函数调用?
gdb - 如何判断我在 gdb 中是处于 ARM 模式还是 Thumb 模式?
使用 GDB 调试 ARMv7 二进制文件时,除了查看指令长度之外,有没有办法确定 CPU 当前处于哪种模式?(手臂,拇指)