【问题标题】:How could I go about finding the maximum, minimum and average of a list in assembly language (68000)我怎样才能找到汇编语言列表的最大值、最小值和平均值(68000)
【发布时间】:2022-11-08 17:26:02
【问题描述】:

我在 68000 程序集中编写了一个函数,提示用户输入列表的大小,然后提示他们输入每个数字并将其存储在列表中。 Function screenshot.

现在我想编写第二个函数来“搜索”列表,以找到列表的最大值、最小值和平均值并将它们存储起来。我知道如何使用某些算法在其他语言中进行此操作,但我不知道如何比较每个值以找到我正在寻找的内容,只需要有人指出我正确的方向。

【问题讨论】:

  • Easy68K 3 number find min,max 展示了如何找到 3 个数字的最小值/最大值。您可以执行类似的操作,对从数组加载的值进行比较和分支。和/或从 C 或伪代码开始,并尽可能直接地将每个语句翻译成汇编。或者使用 C 编译器为您制作一个示例循环;编译启用优化。

标签: assembly 68000


【解决方案1】:

您已经有一段遍历列表的代码(在您的情况下是一个数组)。一些伪代码可能是

    lea.l      aX,startOfList
    clr.b      dA                ; register dA holds largest so far
    move.b     #255,dB           ; register dB holds smallest so far
    clr.B      dC                ; register dC holds running average
loop:
    cmp.b      (aX),dA           ; is current bigger than everything else?
    blt.s      noBigger          ;
    move.b     (aX),dA           ; remember current as biggest
noBigger:
    cmp.b      (aX),dB           ; is current smaller than smallest so far?
    bgt.s      noSmaller         
    move.b     (ax),dB
noSmaller:
    move.b     (aX)+,dE          ; fetch a temporary
    ext.w      dE                ; make it a word
    add.w      dE,dC             ; and build a running average
    asr.w      #1,dC             ; half

    bra loop

请注意,此处未显示循环计数器(您的输入代码中已包含该计数器),这将是您自己的练习。代码的工作原理是用可能的最大值初始化保存最小值的寄存器,用可能的最小值初始化保存最大值的寄存器,然后检查每个条目是否大于/小于迄今为止的最大/最小值,如果是,则替换它。

运行平均值是通过将当前值与当前平均值相加,然后除以 2 来构建的。

【讨论】:

    猜你喜欢
    • 2016-03-23
    • 2015-01-16
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多