我刚刚开始学习 ARM,但无法理解加载和存储指令的确切作用。
加载说明:
ldrsb
ldrb
ldrsh
ldrh
ldr
店铺说明:
strb
strh
str
有符号或无符号“加载半字”是什么意思?或者“加载字节”有符号或无符号?有符号和无符号之间有什么区别,以及在哪些特定应用中某些加载/存储指令实用?
总而言之,我正在寻求对这些指令的作用的直观理解,因为我仍然对它们的工作原理和目的感到困惑。
当谈论 ARM 时,“字”是 32 位,“半字”是 16 位,“字节”是 8 位。如果您阅读 ARM 架构参考手册中的指令集文档(如果您不知道该获取哪一个,则只需获取 ARMv5 的指令集文档,infocenter.arm.com),您将看到 ldrb 将字节加载到 的低 8 位中目标寄存器将高 24 位填充为零。 ldrsb 将签署扩展而不是用零填充。半字也是如此。
如果你有这样的代码:
char a,b,c;
...
c = a+b;
if(c<0)
{
}
当您需要执行此加法时,a 或 b 或两者都在内存中,那么您理想情况下希望进行符号扩展(假设您已告诉编译器 char 已签名)加载以保存指令符号扩展寄存器这样您就可以执行数学运算并设置正确的标志以进行比较。
来自ARM ARM。
LDRSB(加载寄存器有符号字节)从内存加载一个字节,对其进行符号扩展以形成一个 32 位字,并将结果写入通用寄存器。
LDRB(加载寄存器字节)从内存加载一个字节,对其进行零扩展以形成 32 位字,并将结果写入通用寄存器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)