- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为 C 程序编写一个汇编宏,并且对此很陌生,我陷入了一些困境。我正在尝试编写一个宏,用于将数据从通用寄存器移动到专用寄存器。
我的问题是,我发现将数据从 GPR 移动到 SPR 的语法采用恒定的 SPR 值,而我想使用存储在另一个寄存器中的变量。
# SPR is constant, rA is the value to be written
mtspr SPR, rA
我正在寻找看起来像这样的东西:
# rA contains the number of the SPR, and rB the value to be moved.
AWESOMEmtspr rA, rB
有没有这样的宏可用的原因,我该如何自己制作它?
提前非常感谢。
---- 编辑: ----现在看来,我的 C 代码中有一个巨大的 switch case,可以跳转到正确的 mtspr 部分。我有二十几个部分用于读取和编写特定的 SPR:s,每个部分看起来完全相同,但有一个常数值不同。
最佳答案
不能这样做的原因是指令架构不接受寄存器间接作为寄存器参数的寻址模式。老实说,我从未见过这样的机器架构,因为寄存器的数量通常相当小,因此寄存器被编码为指令本身的一部分。如果您确实不喜欢现有的解决方案,您可以尝试自己合成指令(获取基本操作码,查看寄存器说明符的位置以及适当值中的“或”),然后执行它。根据您的操作系统和编译器,这可能是不可能的(自修改代码通常是禁忌)。
如果用汇编语言编写跳转表,是否会使代码更简洁?也许传入 SPR 说明符(假设它是一个从零开始的整数,或者可以强制为 1),将其向左移动以获得跳转表中的偏移量,然后跳转到表中,这将是一个序列
MTPSR PSRx, val
RET
MTPSR PSRx+1, val
RET
我不知道什么对你来说算“更干净”,只是想我会把它扔掉。请注意,您可能必须用 NOP 填充才能使所有内容对齐,我没有 PowerPC 手册,因此我不知道指令大小或对齐要求是什么。
关于assembly - PowerPC 转向可变 SPR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3236791/
我需要在裸机 PowerPC 系统上编写程序。作为没有操作系统/ bootstrap 的裸机编程的新手,我决定编写一个 hello world 程序来开始。我在谷歌上搜索了一些关于这个的帖子,并发现了
我听说过很多有关 Altivec 寄存器的信息,但我什至在 POWER9 ISA 上都没有找到它。 。在该文档中,我只在第 6 章“矢量设施”和第 7 章“矢量标量浮点运算”下找到 VR 和 VSR
我无法在 PowerPC 440EP 上运行 node.js,我只收到错误“非法指令”。 硬件信息: cat /proc/cpuinfo processor : 0 cpu
如何从内存转储中反汇编一些指令?我只有原始转储,objdump 只理解对象格式。 我的处理器是 PowerPC 440(PowerPC Book E 架构)。 最佳答案 事实上,objdump 可以很
我有兴趣为我自己的学习目的开发一个 PowerPC 模拟器。我已经找到了大量有关 PowerPC 程序集编程的资源,但是经过一段时间的查找,我还没有在任何地方找到指令/操作码映射表。当然,我需要操作码
我有一个问题,我被要求声明一个结构数组,其中有一个结构,如下所示: typedef struct { int a; int b; int c; }blah; int main() { blah
我这里有一个 MPC5668G。我想从引导加载程序中的 asm 代码跳转到独立生成的主程序的主例程。因此,我使用一些编译指示和链接器将 main 方法(无论它链接到哪里)的地址放到内部闪存的末尾。那将
我正在为 C 程序编写一个汇编宏,并且对此很陌生,我陷入了一些困境。我正在尝试编写一个宏,用于将数据从通用寄存器移动到专用寄存器。 我的问题是,我发现将数据从 GPR 移动到 SPR 的语法采用恒定的
所以,我一直在为 Xbox 的简单逆向项目学习 PowerPC,但我总是在这样的事情上纠结。 lwz r11, 0(r29) # Loads 0x34 from 0x10710
交叉编译 Maliit 框架源代码时面临问题。 inputcontextdbusaddress.cpp: In member function 'virtual void Maliit::InputC
我有一个使用 Mysql 5.6 作为数据库的 Web 应用程序。该应用程序在 x64 系统中运行速度很快。但我们必须为客户端在 PowerPC 64 位机器上安装此应用程序。问题是应用程序在 x64
我有一个运行软处理器 (PowerPC) 的 Xilinx FPGA。我最近为 PowerPC 交叉编译了 Boost 库并想测试它。因此,我使用了其中一个示例程序并尝试针对我的目标对其进行交叉编译。
我对编码和构建应用程序还比较陌生,我想通过软件包为 PowerPC Linux 做出贡献。因此,我尝试将应用程序和工具移植到平台上,然后将它们打包到平台上,并尝试将它们打包到不同的发行版上,例如 ub
我们正在为 PowerPC 604 用嵌入式 C 编写实时软件. 接下来是我的两位同事之间的对话。我很难理解他们在说什么。 员工 1: In the PPC architecture, must in
我下载了MySQL-5.5.34的源码,按照说明编译。然后在/usr/local/mysql/bin 文件夹中我做了 ./mysqld_safe --user=root &mysql 服务器立即启动并
我还没有找到任何资源来准确回答我在我正在使用的软件中看到的问题,所以我会问这里的天才! 首先,我在 PowerPC 处理器上运行 VxWorks。 在尝试调试一个单独的问题时,我尝试在中断处理例程中抛
我有大量可在 PowerPC 上运行的源代码。我需要将它移植到 ARM。但是,ARM 在未对齐的内存访问上生成硬件异常。所以,我想找到所有可能发生未对齐内存访问异常的实例。我考虑了以下选项。 在 gc
我正在尝试打印 float 。尽管可变参数函数不适用于 float ,因此它们被提升为 double 。我可以通过将其转换为 double 来设法消除警告。在某些 powerpc 架构上打印结果时,如
我想在汇编代码中创建一个 ifdef 条件,类似于 C 中的预处理器。 例如: ifdef UNIT_TEST b somewhere else b somewhere else 我使用的是 e200
我有以下来自 PowerPc 内核源代码的代码片段 #define SPRN_IVOR32 0x210 /* Interrupt Vector Offset Register 32 */
我是一名优秀的程序员,十分优秀!