gpt4 book ai didi

assembly - MIPS中的div divu

转载 作者:行者123 更新时间:2023-12-03 23:15:26 27 4
gpt4 key购买 nike

div有什么区别和 divu在 MIPS。

我看到了 add 之间的区别和 addu ( link for same )。我对 add 和 addu 的理解:都对 2 的补符号数进行操作,唯一的区别是 add 在溢出时生成陷阱,而 addu 不会

但是 div 和 divu 之间有什么区别,我的意思是我们不会在这里真正得到溢出。

我尝试了以下案例,但使用 divu 得到了非常奇怪的结果。我只加载了商数(使用 mflo),这里是输出:

num1 |  num2  | div num1 num2 (qoutient) | divu num1 num2 (qoutient) | 

5 | 2 | 2 | 2 |

-5 | 2 | -2 | 2147483645 |

5 | -2 | -2 | 0 |

-5 | -2 | 2 | 0 |

有人可以解释一下发生的事情的逻辑吗????

最佳答案

一般来说,u后缀表示“未签名”。溢出陷阱是有符号算术的副作用,不应该溢出,而无符号算术允许溢出或回绕而不触发任何异常。
这意味着您应该在查看陷阱之前考虑有符号与无符号的差异。普通 div指令会将其操作数视为二进制补码编码,而 divu操作将操作数视为无符号整数。
所有这一切意味着使用相同的操作数可能会导致不同的答案,这取决于 divdivu用来。
分割时-5来自 2div ,您会得到您期望的答案:商为 -2,余数为 -1,这是有意义的,因为 -2 * 2 + -1 = -5 .但是当使用 divu它采用无符号整数,-5不被视为“负五”,而是 11111111111111111111111111111011 (这是 -5 的二进制补码表示)但它被读取为“普通”字节,在其中它出现 4294967291 ,除以 2正确产生 2147483645 .
简而言之:u的目的命令的版本是将输入视为无符号整数,即使这不会导致溢出。为什么会这样?好吧,假设您确实想找出 4294967291/2 的结果- 你会如何用有符号的鸿沟来做到这一点?正在尝试存储 4294967291在 32 位寄存器中将产生一个解释为 -5 的值。而不是 4294967291 . divu通过让您使用寄存器的所有 32 位作为“数据”而不是为符号留出一位来解决这个问题。

关于assembly - MIPS中的div divu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51882347/

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