汇编程序任务 - 数组的最小值和最大值

Posted

技术标签:

【中文标题】汇编程序任务 - 数组的最小值和最大值【英文标题】:Assembler task - min and max values of the array 【发布时间】:2010-01-20 11:57:41 【问题描述】:

我遇到了汇编代码问题。我是汇编程序的新手,所以我自己似乎很难解决它。

任务是:“找到数组的最小和最大元素。”

我已经完成的只是搜索最大元素。我不知道如何检查最小元素以及我应该在哪里进行此类验证。或者,也许,我应该在找到最大元素后第二次遍历元素?

代码:

#include <conio.h>
#include <stdio.h>
#include <iostream.h>
void main() 
   int  N = 10, i;
   clrscr();
   // on this platform, int is 16-bit
   int a[] =  1, 4, -6, 12, -25, 10, 3, -4, 15, 7, MAX, MIN, RESULT;

    __asm
    mov cx, N
    lea si, a
    lodsw
    mov bx, ax
    mov dx, ax
    dec cx 
    m:
       __asm
     lodsw
     cmp dx, ax
     jge m1
     mov dx, ax
       
    m1:
       __asm
       loop m
       mov MAX, dx
    

cout << "Max = " << MAX;
//cout << "Min = " << MIN;
getch();

【问题讨论】:

最好在计算最大值的同一循环中计算最小值,也就是说,对于每个元素,当你将它放在寄存器中时,同时测试它的最小值测试它的最大值。在标签m1 似乎是正确的地方。 感谢您的帮助。我已经了解算法,如何实现这种验证,但不幸的是我无法编写代码来使这段代码可行。 【参考方案1】:

如果将“jge”替换为“jle”会怎样?试试看。

【讨论】:

结果将等于 '-25' - 数组的最小值。 非常好。现在您有两个循环,一个用于计算最小值,一个用于计算最大值。您需要做什么才能将它们组合成一个循环?提示:您的循环已经在初始化两个寄存器(bx 和 dx),但目前只使用其中一个。【参考方案2】:

如果有人感兴趣,这里是我的问题的解决方案(我今天在导师的帮助下找到了它):

#include <conio.h>
#include <stdio.h>
#include <iostream.h>
void main() 
   int  N = 10, i;
   clrscr();
   int a[] =  1, 4, -6, 12, -25, 10, 3, -4, 15, 7, MAX, MIN, RESULT;

    __asm
      mov cx, N
      lea si, a
      lodsw
      mov MIN, ax
      mov MAX, ax
      dec cx
    
    m:
     __asm
       lodsw
       cmp MIN, ax
       jle m1
       mov MIN, ax
       jmp m2
    
    m1:
     __asm
       cmp MAX, ax
       jge m2
       mov MAX, ax
    
    m2:
     __asm
       loop m;
    

cout << "Max = " << MAX << "\n";
cout << "Min = " << MIN;
getch();

算法:如果cmp MIN, ax的结果是否定的,则表示ax大于MIN。因此脚本跳转到m1 标签以将ax 值与MAX 进行比较。当cmp MIN, ax 返回正值时,脚本将ax 寄存器的值分配给MIN 变量,然后跳转到m2 标签以递减循环计数器。寻找最大值的算法的工作原理类似(标签m1)。

【讨论】:

以上是关于汇编程序任务 - 数组的最小值和最大值的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法读取 4 个不同的数组以在 C 的返回函数中生成最小值和最大值

python编写程序,利用元组作为函数的返回值,求系列类型的最大值、最小值和元素个数

按要求编写字符界面(算法初阶最小值和最大值)填充每个节点的下一个右侧节点指针(树深度优先搜索)最大矩形(栈数组)

Rcpp 程序中的最小值和最大值

在数组中查找最小值和最大值

优雅地同时计算数字数组的最小值和最大值