gpt4 book ai didi

arm - 如何确定处理器运行的字节序模式?

转载 作者:行者123 更新时间:2023-12-02 10:59:46 26 4
gpt4 key购买 nike

如何仅使用汇编语言确定 ARM 处理器运行的字节序模式。

我可以很容易地看到 Thumb/ARM 状态读取 CPSR 的第 5 位,但我不知道 CPSR 或其他地方是否有对应的位用于字节序。

;silly example trying to execute ARM code when I may be in Thumb mode....
MRS R0,CPSR
ANDS R0,#0x20
BNE ThumbModeIsActive
B ARMModeIsActive

我可以访问 ARM7TDMI 数据表,但该文档没有告诉我如何读取当前状态。
我使用什么汇编代码来确定字节顺序?

假设我使用的是 ARM9 处理器。

最佳答案

ARMv4 (ARM7TDMI) 或 ARMv5 (ARM9) 中没有用于字节序的 CPSR 位,因此您需要使用其他方式。

如果您的核心实现系统协处理器 15,那么您可以检查寄存器 1 的位 7:

MRC p15, 0, r0, c1, c0 ; CP15 register 1
TST r0, #0x80 ; check bit 7 (B)
BNE big_endian
B little_endian

但是,文档(ARM DDI 0100E)似乎暗示该位仅对运行时可配置字节序的系统有效。如果是通过引脚设置的,则该位可能是错误的。当然,在大多数(所有?)ARM7 内核上,CP15 都不存在。

有一种独立于平台的方法来检查字节序,不需要任何硬件位。事情是这样的:

   LDR R0, checkbytes
CMP R0, 0x12345678
BE big_endian
BNE little_endian
checkbytes
DB 0x12, 0x34, 0x56, 0x78

根据当前的字节顺序,负载将生成 0x12345678 或 0x78563412。

关于arm - 如何确定处理器运行的字节序模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22354542/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com