gpt4 book ai didi

assembly - ARM 的加载和存储字节和半字指令如何工作?签名与未签名有何作用?

转载 作者:行者123 更新时间:2023-12-03 06:33:17 24 4
gpt4 key购买 nike

我刚刚开始学习 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位字,并将结果写入通用寄存器。

关于assembly - ARM 的加载和存储字节和半字指令如何工作?签名与未签名有何作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14430522/

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