assembly 程序集无限大小的数字

jjhzyzn0  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(188)

我觉得这个问题可能有点傻。
由于我们存储位来表示一个数字,而且我们有一个完整的RAM,我们应该能够有一个无限大(实际上是自定义大小)的数字,它可以占用整个RAM(或它的指定部分)。
对不对?
因此,如果我们要做的例子:

mov ax, 0xFFFF
add ax, 1
jc custom_function ; if I remember correctly jc checks the carry flag

custom_function是一个标签/函数,它有一个算法来设置接下来的位,以创建一个无限大的数字。

问题

1.如果不是无限大的数字,则可以使用自定义指定(比默认值更长或更短)
1.我怀疑,如果有可能的话,它会有不好的表现(即使数量如果更短)。你怎么看?
1.你认为有这样的东西会很好吗?(也许在RAM有限的旧系统或嵌入式系统中会更有效?)

yquaqz18

yquaqz181#

1.如果不是无限大的数字,则可以使用自定义指定(比默认值更长或更短)
当然可以。您可以定义任何您想要的表示和数据类型,只受环境的限制。
然而,由于内存的大小是有限的,所以值的范围也是有限的。即使您觉得千兆字节“有点”无限大。只要考虑用更多的位数来计算数学常数PI。在某个点上,您的RAM是满的。
标准术语是arbitrary-precision arithmetic,或bignum / bigint,处理它的一种方法是动态字数组(如C++ std::vector),其上限由系统的实际限制所规定,但只使用数字实际需要的存储空间。
1.我怀疑,如果有可能的话,它会有不好的表现(即使数量如果更短)。你怎么看?
如果你在一台8位机器上实现了一些聪明的算法,那么这种特殊类型的6位值的性能可能会比long的性能更好。
但可以肯定的是,最迟当特殊类型的位数超过支持的最长“标准”类型的位数时,性能就会下降。如果将bignums存储为动态数组,则总是会有额外的间接访问级别,这会增加开销,即使对于较小的数字也是如此。
小数字优化是可能的,就像一个标志位把位当作一个值,而不是一个指针。Python 3中的整数总是任意精度的,所以通常情况下是适合一个“块”位的小整数。)与简单的add指令相比,这仍然需要更多的代码来检查内容。
1.你认为有这样的东西会很好吗?(也许在RAM有限的旧系统或嵌入式系统中会更有效?)
已经有一些库提供了这样的类型,例如GMP,GNU多精度库,它为大多数架构(包括32位和64位x86)手写了asm。
在“旧时代”,这样的算法甚至在PC上也是标准的。例如,我在1980年左右开始我的职业生涯,使用Intel 8080和Z 80处理器,在那里你通常使用8位算术。它们 * 有 * 16位加法和减法指令,但它们的使用涉及大量的寄存器移入和移出值。
这些指令集包括有进位和无进位的加法指令,减法也是一样。有了这些指令,即使是这些古老的处理器也能处理有意宽的数值。
哦,8位机器今天仍然在使用。例如,看看带有AVR的Arduino。但这些都是针对一个特殊的爱好利基。世界上使用的16位处理器可能比PC更多(也更少),通常被隐藏为“嵌入式”控制器。

相关问题