Math 汇编中的算术运算

Math 汇编中的算术运算,math,assembly,Math,Assembly,我正在学习汇编语言。我发现汇编中的算术可以是有符号的,也可以是无符号的。对于这两种类型的算术,规则都是不同的,我发现决定应用哪种规则是程序员最头疼的事情。所以程序员应该事先知道算术是否包含负数。如果是,则应使用有符号算术规则,否则更简单、更容易的无符号算术就可以了。 我发现无符号算术的主要问题是“如果结果大于其存储区域怎么办?”。通过使用大于所需的数据存储区域,可以轻松解决此问题。但这将消耗额外的字节,并且数据段的大小将增加。如果代码的大小没有问题,我们就不能自由地使用这种技术吗?如果您是程序员

我正在学习汇编语言。我发现汇编中的算术可以是有符号的,也可以是无符号的。对于这两种类型的算术,规则都是不同的,我发现决定应用哪种规则是程序员最头疼的事情。所以程序员应该事先知道算术是否包含负数。如果是,则应使用有符号算术规则,否则更简单、更容易的无符号算术就可以了。
我发现无符号算术的主要问题是“如果结果大于其存储区域怎么办?”。通过使用大于所需的数据存储区域,可以轻松解决此问题。但这将消耗额外的字节,并且数据段的大小将增加。如果代码的大小没有问题,我们就不能自由地使用这种技术吗?

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

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

由程序规范决定的结果解释是使它们有符号或无符号的原因,而不是操作本身。必须仔细选择合适的比较说明


在某些CPU体系结构中,有不同的有符号和无符号除法指令,但这只是它的一部分。大多数CPU都有算术右移指令风格,它要么保留高位,要么替换为零:这可以分别用作有符号和无符号处理。

溢出与操作是否有符号无关。你只需要更快。大多数算术运算都是符号不可知的???加法和减法是,但乘法不是(65535*-1产生的32位结果与-1*-1不同;如果使用16位结果,则得到相同的结果,但16x16正确地产生32位结果。)