装配中的算术运算

时间:2011-06-10 06:54:43

标签: math assembly

我正在学习汇编语言。我发现汇编中的算术可以是有符号或无符号的。这两种算法的规则都不同,我发现程序员很难决定应用哪些规则。所以程序员应事先知道算术是否涉及负数。如果是,则应使用带符号的算术规则,否则无符号算术将更简单易行。 我发现无符号算术的主要问题是“如果结果大于其存储区域会怎么样?”。通过使用大于所需的数据存储区域可以轻松解决这个问题。但这会消耗额外的字节,数据段的大小会增加。如果代码的大小没有问题,我们不能自由地使用这种技术吗?

2 个答案:

答案 0 :(得分:8)

如果您是程序员,则可以在软件目标域的要求范围内控制数据表示。这意味着在实际开始触摸代码之前,您需要先了解您将要处理的数据类型,如何安排(如果是复杂数据类型)以及如何编码(浮点/无符号整数/有符号整数等)。使用与您操作的数据类型相匹配的操作是“最安全的”,如果您已经完成了您的设计,那么您应该已经知道了。

答案 1 :(得分:4)

这不是那么简单。大多数算术运算都是符号无关的:它们既不是有符号也不是无符号。

结果的解释 - 由程序规范确定 - 是使它们签名或未签名的原因,而不是操作本身。必须仔细选择比较指令的正确风格。

在某些CPU架构中,有明显的有符号和无符号除法指令,但这就是它的全部内容。大多数CPU具有算术右移指令风格,可以保留高位或用零代替:可以分别用作有符号和无符号处理。