【问题标题】:How to write an assembly sorting program 8086 with works with 6 digits numbers? [closed]如何使用 6 位数字编写汇编排序程序 8086? [关闭]
【发布时间】:2013-12-15 08:55:53
【问题描述】:

我是汇编语言的新手,我知道很多代码。 但是,我使用 8086 仿真器只能使用 16 位数字。 这是我真正坚持的家庭作业: 我如何编写汇编代码,执行以下操作:

1-get 20 , maximum 6-digits decimal numbers and store them in an array.

2- sort the array in ascending order.

我真的很难理解如何为这么长的数字管理寄存器和堆栈。

我们将提前感谢您的每一个帮助。

【问题讨论】:

  • 到目前为止您尝试过什么?听起来像是家庭作业,所以我想您已经了解了如何开始。
  • 正如我所说的,这是一个家庭作业;但我无法管理如何启动它:|我可以对排序和其他工作人员进行排序和编写代码,以获得最多 4 位数字(16 位),但这是一个 20 位的数字,让我感到困惑。
  • 您可以开始构建您的作业并发布您遇到困难的步骤。

标签: sorting assembly numbers stack x86-16


【解决方案1】:

要使用 16 位寄存器对 32 位数字(或更宽的数字)进行排序,您必须分别比较每个数字的上半部分。

假设我们有这两个随机的 32 位数字(以十六进制显示)4567afdf321abc09

现在,当您将它们视为 16 位值时,它们看起来像这样:

4567 afdf
321a bc09

如您所见,您可以单独比较高 16 位。

如果高 16 位较高或较低,那么您知道较低的部分不再重要,并相应地对它们进行排序。

如果高 16 位相等,则比较低 16 位,如果它们也相等,则两个数字相等 => 不需要排序,否则你相应地打乱它们。由于高 16 位也是相等的,因此您甚至不需要对它们进行 shuffle。

如果高 16 位不同,您仍然需要相应地打乱低 16 位,因为它们可能不同。

这种方法的基础可以用于任意数量的位,而不仅仅是 32 位。一般来说,当你遇到一个看似困难的问题时,你应该试着想一些简单的例子以及如何解决它。然后您可以将其扩展到更复杂的情况。

编辑:

另一种方法是,如果您有十进制数字字符串,并且您想根据字符串表示而不是数字对它们进行排序。

在这种情况下,你可以这样做

  1. 如果两个数字字符串的长度不同,则较短的数字较小。
  2. 如果长度相等,则可以单独查看每个数字(从第一个数字开始),直到遇到不相等的数字或字符串结尾。如果你收到了字符串的末尾,数字是相同的,否则你知道哪个更高/更低。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 2011-12-13
    • 2011-03-25
    • 1970-01-01
    • 2013-01-08
    • 2023-04-08
    相关资源
    最近更新 更多