相关疑难解决方法(0)

C宏定义确定大端或小端机?

是否有一行宏定义来确定机器的字节顺序.我使用以下代码,但将其转换为宏将太长.

unsigned char test_endian( void )
{
    int test_var = 1;
    unsigned char test_endian* = (unsigned char*)&test_var;

    return (test_endian[0] == NULL);
}
Run Code Online (Sandbox Code Playgroud)

c architecture macros endianness

101
推荐指数
13
解决办法
9万
查看次数

在MIPS64中加载地址

这可能是一个简单明了的事情,我只是没有看到,但如何在MIPS64处理器中加载地址?在MIPS32处理器中,以下汇编程序伪指令:

la $at, LabelAddr
Run Code Online (Sandbox Code Playgroud)

扩展到:

lui $at, LabelAddr[31:16]
ori $at,$at, LabelAddr[15:0]
Run Code Online (Sandbox Code Playgroud)

看一下MIPS64指令集,我看到lui仍然会在32位字的上半部分加载一个16位立即数.似乎没有任何类型的扩展指令将立即加载到64位字的上部区域.那么,似乎要做一个la伪指令的等价物,我需要扩展到代码中,例如:

lui $at, LabelAddr[63:48]
ori $at, $at, LabelAddr[47:32]
sll $at, 16
ori $at, $at, LabelAddr[31:16]
sll $at, 16
ori $at, $at, LabelAddr[15:0]
Run Code Online (Sandbox Code Playgroud)

这让我觉得有点......因为加载一个地址这样基本的东西令人费解,所以它让我确信我忽略了一些东西.

我忽略了什么(如果有的话)?

mips mips64

7
推荐指数
1
解决办法
2331
查看次数

标签 统计

architecture ×1

c ×1

endianness ×1

macros ×1

mips ×1

mips64 ×1