【问题标题】: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 似乎是正确的地方。
  • 感谢您的帮助。我已经了解算法,如何实现这种验证,但不幸的是我无法编写代码来使这段代码可行。

标签: c++ algorithm assembly x86-16


【解决方案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)。

【讨论】:

    猜你喜欢
    • 2013-10-28
    • 1970-01-01
    • 2017-02-13
    • 2012-02-11
    • 2012-10-09
    • 1970-01-01
    • 2016-09-10
    • 2021-07-31
    • 2021-09-15
    相关资源
    最近更新 更多