gpt4 book ai didi

assembly - 为什么 ARM 区分 SDIV 和 UDIV,而不区分 ADD、SUB 和 MUL?

转载 作者:行者123 更新时间:2023-12-03 21:33:58 54 4
gpt4 key购买 nike

如标题所述,为什么 ARM 指令集仅在除法时区分有符号和无符号?

SDIV 和 UDIV 可用,但 ADD、SUB 和 MUL 不是这种情况。

最佳答案

相同大小的有符号数和无符号数的加法和减法在二进制补码数学(ARM 使用)中产生完全相同的位模式,因此不需要单独的指令。例如,如果我们采用字节大小的值:

0xFC +4 
signed: -4+4 = 0
unsigned: 252 +4 = 256 = 0x100 = 0x00 (truncated to byte)

乘法结果确实会根据操作数被解释为有符号还是无符号而改变,但是 MUL指令产生 只有低 32 位 结果,在两种情况下都是相同的。
在最近的 ARM 处理器中有产生完整 64 位结果的指令,这些指令成对出现,就像 SDIV 和 UDIV:
UMULL, UMLAL, SSMULL, SMLAL :

Signed and Unsigned Long Multiply, with optional Accumulate, with 32-bit operands, and 64-bit result and accumulator.

关于assembly - 为什么 ARM 区分 SDIV 和 UDIV,而不区分 ADD、SUB 和 MUL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29681305/

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