【发布时间】:2013-11-29 01:55:56
【问题描述】:
我被告知我必须加载存储在内存位置 0xA033C000 中的信息。二进制中的该位置写入超过 13 位 (10100000001100111100000000000000)。然而,ARC 中加载的指令格式表明,如果我要使用一个常量来到达该地址,那么该常量必须是 13 位长(或更低,以 0 结尾)。
那我怎么去那里?
【问题讨论】:
我被告知我必须加载存储在内存位置 0xA033C000 中的信息。二进制中的该位置写入超过 13 位 (10100000001100111100000000000000)。然而,ARC 中加载的指令格式表明,如果我要使用一个常量来到达该地址,那么该常量必须是 13 位长(或更低,以 0 结尾)。
那我怎么去那里?
【问题讨论】:
我不知道 SPARC 程序集,但它必须从寄存器中的地址间接加载。只需将常量加载到寄存器,然后从该常量地址加载内存
更新demo:
void set_register(int x)
{
volatile int* const reg = (volatile int*)0xA033C000;
*reg = x;
}
汇编输出
set_register:
save %sp, -96, %sp
sethi 2624752, %i1
st %i0, [%i1]
ret
restore
【讨论】: