相关疑难解决方法(0)

x86-32/x86-64多语言机器码片段,在运行时检测64位模式?

是否可以使用相同字节的机器代码来确定它们是以32位还是64位模式运行,然后执行不同的操作?

即写多语言机器代码.

通常,您可以在构建时使用#ifdef宏检测.或者在C中,您可以编写一个if()以编译时常量作为条件,并让编译器优化它的另一面.

这仅适用于奇怪的情况,例如代码注入,或只是为了查看是否可能.


另请参见:多语言ARM/x86机器代码,用于分支到不同的地址,具体取决于解码字节的架构.

x86 assembly

10
推荐指数
1
解决办法
789
查看次数

如何在C或内联汇编中设置ARM中断向量表分支?

有人可以告诉我一个如何在没有RTOS或Linux操作系统的裸机环境中使用C或内联汇编设置ARM9中断向量表的示例吗?

具体来说,我如何使用内联汇编或C来设置分支到我在IR中编码的IRQ中断处理程序ISR?

/// timer1 64-bit mode interrupt handler connected to TINT2 interrupt=#34
/// \todo I think I need to ACK it once I get working
interrupt void interruptHandlerTimer1(void) {
    printf("\n [* ISR *] \n");
    // ACK TINT2 interrupt #34
    AINTC ->IRQ1 = 1 << (34 - 32);
}
void main(void) {

    TIMER1 ->TCR = 0x00000000;
    // TGCR: TIMMODE=0 64-bit GP, TIM34RS=TIM12RS=1
    TIM0ER1 ->TGCR = 0x00000003;
    TIMER1 ->TIM34 = 0x00000000;
    TIMER1 ->TIM12 = 0x00000000;
    TIMER1 ->PRD34 = 0x00000000;
    TIMER1 ->PRD12 = …
Run Code Online (Sandbox Code Playgroud)

embedded arm interrupt bare-metal

6
推荐指数
1
解决办法
4677
查看次数

标签 统计

arm ×1

assembly ×1

bare-metal ×1

embedded ×1

interrupt ×1

x86 ×1